kevinc

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

Vivado中将verilog代码封装成IP

1
阅读(10355)

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的更新也有很多注意事项,在下一篇中详细说明。