第一次接触block design是在学习ZYNQ期间,加入PS的IP核到bd里进行图形化开发,误以为bd里只能加入官方开发的ip。最近才意识到不但可以加入自制ip,甚至可以加入RTL模块开发。以前bd的教程总是围绕zynq展开,普通PL也都是自己写顶层,没有直接PL生成顶层的,所以写一篇。(虽然融会贯通很简单,但对初学者来说就不那么容易了)。
Block Design位置:vivado界面左侧的IP INTEGRATOR处。
创建一个新bd,添加rtl代码或者ip到工程。
如何把模块加入bd
bd空白处右键,选择Add Module/Add IP。若一个RTL下例化多个其他模块,只需要在bd加入最顶层那个。注意:如果在 点击后的弹窗 找不到已经添加进工程的模块,先检查路径是否有中文(会导致识别不到文件),再查看待模块内部子模块是否存在(比如内部在另一个工程例化了FIFO的ip,把模块拖到当前工程时没创建IP)。
如何添加输入输出引脚
右键端口信号,Make External,就会自动生成引脚。会自动分配引脚名。
修改方法是先左键点击引脚,在External Port Pr窗口修改(这个窗口之前一直被我习惯性忽略)。对于rst信号来说,这个窗口还可以修改极性,高有效或低有效,视开发板而定,一般都是低有效。
如何连接多个模块
鼠标点到小黑线上,光标会变成笔的样子,长按并拖拽到想连的其他模块信号上再次点击,连线完成。右键bd空白处选择End Connection Mode退出连线模式。
连线完成后点击Validate Design验证是否有可行。很快。可行后仿真,写xdc,综合,实现,生成bit流。创建新顶层的工作顺手就帮你做了。
双击模块中间空白地方,弹出的界面可以修改定义的parameter参数。模块中间的RTL表示他能查看源文件,右键 go to source即可。
模块中间空白表示他是ip核,官方或自制都有可能。
这种属于添加的连接模块,在axi总线里常见。
简单的使用就这么多,当然也有好多地方没说,不过只要做一个简单的工程就算入门,剩下的可以自己学了。
当设计模块越来越繁多,图形化可能是唯一的选择,bd可以清楚的看清信号走向,模块划分,自动生成顶层,极大提升效率,避免错误。鬼知道我有多少次因为顶层连线例化出错调试浪费一整天。
即使是单个模块的设计,我也推荐在bd中进行,原因很简单,图形总比代码生动。