【原创】vivado之IP定制封装(三)
1赞接着上一篇博文继续写,上篇博文地址:http://blog.chinaaet.com/crazybird/p/5100000567 。
一、端口和接口选项卡(Ports and Interfaces)
端口和接口选项卡如图1所示,我们可以定制接口、端口映射到接口、设置端口参数等。这里举一个使能复位引脚的例子,其他的以后有时间再进行相关的介绍。
图1 端口和接口选项卡
在定制参数选项卡中点击右键并选择“Add Parameter...”,在弹出的对话框中输入参数名称“C_RESET_EN”,如图2所示。点击OK。
图2 添加一个参数
在弹出的对话框中设置相应的参数,如图3所示。其中,参数在图形界面的显示名称为Reset_En;该参数可编辑;数据类型为bool型;参数默认值为false,即在图形界面中不勾选。点击OK完成参数的设置。
图3 设置相应的参数
然后在端口和接口选项卡中双击复位端口rst_n,在弹出的对话框中填写参数,如图4所示。当复位端口rst_n没有连接时,其驱动值为逻辑1,即复位无效;当参数C_RESET_EN为逻辑0时,复位端口不隐藏,否则复位端口隐藏,且默认驱动值为逻辑1。点击OK完成复位端口的参数设置。
图4 复位端口参数设置
IP封装后,当定制IP时,如果不使能复位端口,则复位端口显示,驱动值由外部决定,如图5所示。如果使能复位端口,则复位端口隐藏,且驱动值为逻辑1,如图6所示。
图5 不使能复位端口
图6 使能复位端口
二、地址分配和储存映射选项卡(Addressing and Memory)
地址分配和储存映射选项卡如图7所示,可通过点击“Addressing and Memory Map Wizard”向导完成地址分配和储存映射。由于本设计没有涉及到这一块,所以这里就不作介绍了。
图7 地址分配和储存映射选项卡
三、定制图形界面选项卡(Customization GUI)
定制图形界面选项卡如图8所示,可以在layout选项卡中添加选项卡page、组group、参数parameter和文本text,并通过排列这些元素的顺序等来组织用户个性化的IP图形界面,就不作详细的介绍了。太困了,想早点睡觉。
图8 定制图形界面选项卡
四、总结和封装IP选项卡(Review and Package)
总结和封装IP选项卡如图9所示,在这里我们设置IP封装后的属性,如IP封装后产生存档压缩文件,其设置为vivado菜单“Tools”——>“Project Settings...”或在流程导航器中点击Project Settings按钮,弹出的对话框中切换到IP选项卡,并勾选“Create archive of IP”,点击OK完成参数设置,如图10所示。
图9 总结和封装IP选项卡
图10 设置产生IP压缩包参数
在定制图形界面选项卡中点击Package IP按钮开始封装IP(一次封装之后该按钮变为Re-Package IP,再点击该按钮则进行IP重新封装)。IP封装之后,则在工程路径中产生IP文件,如图11所示。其中,CrazyBird_user_counter_1.0.zip为IP压缩包。将封装好的IP解压并存放IP仓库中,如图12所示。关于IP仓库的设置,请参考博文http://blog.chinaaet.com/crazybird/p/5100000515 。
图11 IP封装后产生的文件
图12 将封装好的IP解压并存放IP仓库中
五、定制IP的功能验证
计数器IP核封装后,现在对它的功能进行测试。新建一个新的工程,具体步骤可参考博文:http://blog.chinaaet.com/crazybird/p/5100000477 。然后点击流程向导中的“IP Catalog”按钮,如图13所示。
图13 点击“IP Catalog”按钮
在弹出的IP目录中,双击UserIP分类下的counter_v1_0 IP核,如图14所示。
图14 双击counter_v1_0 IP核
在弹出的对话框中配置参数,如图15所示,为27进制计数器并不使能复位信号。
图15 定制IP参数1
点击OK,弹出的对话框中点击Generate按钮生成输出文件,如图16所示。然后,点击OK。
图16 点击Generate按钮生成输出文件
建立一个顶层源文件,具体步骤可参考博文:http://blog.chinaaet.com/crazybird/p/5100000477 。顶层模块的代码如下所示:
`timescale 1ns / 1ps module counter_top ( input rst_n, input clk, output [4:0] cnt ); counter_0 u_counter_0 ( .rst_n (rst_n ), .clk (clk ), .cnt (cnt ) ); endmodule
仿真结果如图17所示:
图17 仿真结果1
重新配置IP参数,如图18所示,为14进制计数器并使能复位信号。
图18 定制IP参数2
点击OK,弹出的对话框中点击Generate按钮生成输出文件,如图19所示。然后,点击OK。
图19 点击Generate按钮生成输出文件
顶层模块的代码如下所示:
`timescale 1ns / 1ps module counter_top ( input clk, output [3:0] cnt ); counter_0 u_counter_0 ( .clk (clk ), .cnt (cnt ) ); endmodule
仿真结果如图20所示:
图20 仿真结果2
从图17和图20的仿真结果可以看出,自定义封装IP的功能是正确的。终于搞定了,终于可以睡觉了~~~