AXI jtag2axi驱动cdma和gpio - minichao9901/TangNano-20k-Zynq-7020 GitHub Wiki
D1 框图
gpio0用作sw输入,gpio1用作led输出
D2 产生bitstream后,直接用sdk的xcst控制
产生bitstream后,可以copy到其它地方去保存。这样以后重新综合也不会冲掉结果。
D3 jtag2axi控制led
注意GPIO的0x4寄存器是TRI寄存器,控制输入或者输出。默认是0xff,也就是输入。需要配置成0x00才能输出。 因此第1步是配置0x4为0x00输出,第2步是配置0x0寄存器来控制灯。
D4 jtag2axi读取sw
由于GPIO默认是输入,因此直接读取即可,不需要做任何配置。 可以看到,改变sw读到的值是不同的。
D5 CDMA读写blockram
读写blockram正确。
可以直接用下面的脚本测试
mwr 0xC0000000 0x87654321 8
mrd 0xC0000000 8
mwr 0x44A00018 0xC0000000
mwr 0x44A00020 0xC0001000
mwr 0x44A00028 32
mrd 0xC0001000 8
D6 CDMA测试key hole功能(固定地址)
- 重新填充src-ram数据,这一回让每个数据都不同。
- 开启cdram为key hole功能,让wr/rd都启用key hole。
- 启动写传输,然后读取dest-ram确认。可以看到读/写地址都固定住了。因此只有一个地址内容发送变化,读写采用的都是同一个地址的内容,值也就是最初的0xB。
只固定写地址,因此只有一个地址内容发送变化,写入的是最后一个值,也就是0x12。
只固定读地址,可以看到写地址的内容全部发送变化,全部是相同的值,也就是0x0B。
因此整个过程是ok的。
D7 用cdma的key hole功能来写led
第1步填充bram,第2步设置源地址和目的地址,第3步配置为写地址固定模式,第4步执行dma传输,并读出gpio寄存器确认。第5步再次执行dma传输,并读出gpio寄存器确认。第6步再次执行dma传输,并读出gpio寄存器确认。
可以看到led灯确实在变化。
可以直接用如下脚本,直接copy后贴到xsct界面中就可以全部一条一条运行。
mwr 0xC0000000 {0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88} 8
mrd 0xC0000000 8
mwr 0x44A00018 0xC0000000
mwr 0x44A00020 0x40010000
mrd 0x44A00000 10
mwr 0x44A00000 0b100000
mwr 0x44A00028 32
mrd 0x40010000 4
mwr 0x44A00028 28
mrd 0x40010000 4
mwr 0x44A00028 24
mrd 0x40010000 4
D7 用cdma的key hole功能来读sw
第1轮dma读
改版sw位置后,第2轮dma读
可以直接用如下脚本,直接copy后贴到xsct界面中就可以全部一条一条运行。
mwr 0x44A00018 0x40000000
mwr 0x44A00020 0xC0001000
mrd 0x44A00000 10
mwr 0x44A00000 0b010000
mwr 0x44A00028 32
mrd 0xC0001000 8