kevinc

主攻ZYNQ及RTOS开发,关注Flash存储

Vivado中将verilog代码封装成IP

1
阅读(3511) 评论(2)

Xilinx的Vivado采用原理图的设计方式,比较直观适合大型项目,我们自己的code都需要封装成user IP。

这里主要介绍怎么把多个关联管脚合并成类似bus的大端口


第一大部分 选择source文件

  1. 先新建一个project,把要package的v文件加进去,一般都会先做功能仿真

  2. Tools->Create and Package IP,我个人喜欢用第一项current project;

    第二项block design用来封装多层嵌套的大IP;

    第三项是封装指定文件夹下的source文件,也非常好用;

    第四项是新建一个AXI4接口的IP,比如说我要自己写AXI-HP的接口就用这个;

    blob.png

  3. 建个文件夹Verilog_IP,存自己的IP,每个IP再建个子文件夹

    blob.png


第二大部分 端口分组合并

  1. Parameter页除了第一个Width是传递参数,其他都是状态机的参数,可以全部删掉

    blob.png

  2. Ports页会自动把能识别的clk和rst都分类好,但不是我们想要的分类,要删

    blob.png

    选中右键 Remove Interface

    blob.png

  3. 接下来就是信号分组,也叫bus interface

    分两种情况,需要跟xilinx的IP对接的标准接口要用Add Bus Interface,我们自己定义的接口用Create Interface Definition来新建;

    blob.png

    前面的port是打算引出芯片的nand接口,选中右键Create Interface Definition,名称nand_x8

    后面的bram0和bram1都是要跟标准AXI_BRAM接口对接的,各自选中右键Add Bus Interface

  4. 先是标准接口,默认是aximm_rtl,要换成bram

    blob.png

    打开浏览进入Chooser页,选Advanced页的bram接口

    blob.png

    选好后如下,General页,这里Mode选master,跟你代码的in/out有关

    blob.png

    然后Port Mapping页,逐个接口map,主要依据in/out/inout类型关联。接口太多先search筛选

    blob.png

  5. 接着是user定义的接口

    如果你有多个相同的bus接口,可以每个都新create,也可以先create一个,然后后面几个用Add Bus Interface的方式。

    在Chooser中的User子项找到nand_x8接口,然后逐个map。建议用后面一种,因为在你把IP引出port的时候命名会保持原值,否则你还得逐个改信号名。

    补充:请把Location的位置改成自己IP下的文件夹,放在Roaming系统文件夹下下次就找不到了。

    blob.png

  6. 最终的界面就清爽了,折叠成了3个bus接口,可以再右键Edit

    blob.png

    参考二

    blob.png

  7. 最终框图。输入脚在左,输出脚在右

    blob.png

    参考二

    blob.png

  8. 确认下名字和路径,全部OK后点Packaged IP就完成了

    blob.png


第三大部分 调用 IP

  1. 然后你在IP Catalog中是可以选中新IP的

    blob.png

  2. 如果后续再建project时,搜不到自己的IP,请按照下面的方式添加IP路径

    blob.png

  3. IP的更新也有很多注意事项,在下一篇中详细说明。

  1. 多谢分享,详细

  2. 正在学习vivado,很不错的文章