Vivado及Zynq使用经验

1.添加debug核的合理方法是在源代码中添加(*mark_debug="true"*),综合后,打开综合结果,set debug内这些标记的信号全部在网标内,不会被优化掉。如果不在代码里加这些标记,直接在综合结果里添加net,很多感兴趣的信号会被优化掉,且残缺不全。

2.若果debug核使用的时钟是zynq ps端输出的时钟,那么烧录完bit文件后,是不会自动弹出debug界面的,需要在软件工程里,debug软件工程,让cpu跑起来,产生时钟信号,再回vivado内refresh device,即可弹出debug界面。

3.自定义IP内代码被改动后,Block Design内会提醒刷新IP路径,然后在窗口下方勾选改动的IP,点击UPDATE IP按钮,即可更新IP核。

4.重新生成bit文件后,建议关闭eclipse软件工程,vivado内file-> export hardware,重新输出.hdf等硬件信息文件,然后重新打开eclipse软件工程,eclipse会自动更新硬件信息,并重新编译整个工程。

5.逻辑模块IP的多个中断不能直接与CPU的中断输入连接,需要通过xlconcat组件合并后,一起连接至CPU上。且逻辑模块IP的中断最好在Block Design内连接到CPU上,如果引出BD,然后在顶层模块用代码方式连接到CPU的中断输入端,产生的.hdf文件生成的xparamerters.h中,不会产生中断号,导致无法在c程序中注册中断函数。

6.vivado IP封装时,如何设置模块的某个中断输出为中断类型?interface and port (大概是这个名字)标签里,选中该ip port信号,右键->auto infer single bit interface 为interrupt即可。随后选中该信号的上一级目录ip bus,右键->edit interface ->paramerters里可设置中断触发类型。

7.Block Design内的axi interconnect 组件,在输入输出位宽不一致的时候,会引入位宽转换功能,该功能引入后,会严重降低axi总线的传输效率,降低带宽。所以使用该组件时,两端的总线位宽应一致。

8.zynq HP总线只用的是axi3协议,而自定义封装的IP都是axi4协议,因此,axi interconnect组件输入端接axi4主端口,输出接CPU的HP从端口,即便位宽一致,BD自动连线时也会调用axi interconncet组件,引入协议转换功能。该功能在某些情况下会降低传输效率(axi 乱序传输时),将连续读指令multiple outstanding 转换为single outstanding(即读数据返回后才会发出下一次读请求,严重降低传输效率)。一般情况下该功能不会降低传输效率。为避免这种可能,可将主从端口信号引出BD,在顶层代码中强行连接axi3 axi4协议(前提是设计中未使用axi3/4有差异的aqos,aid等几个信号),可避免调用axi interconnect组件。

9.zynq中欲利用CPU读写小数据量到DDR,须使用BSP函数Xil_DCache_Disable();关闭数据缓存使能,否则,读写操作可能被执行到CPU的32KB DCache中,而没有实际读写到DDR上。

10.vivado2016.4下,不要在子模块中定义inout接口,并做三态选择。而应该将输入,输出,选择信号寄存器引出到top层,在top层内定义inout并做三态选择,否则,1.inout口无法被布局布线为iobuf/obuft三态门 2.inout的输入输出三态选择信号寄存器无法被绑定到IOB(IO Block)的寄存器上。

文章来源:shimmy_lee

最新文章

最新文章