cuter

【Vivado】如何利用参数控制IP端口的可见性

0
阅读(6952)

如何利用参数控制IP端口的可见性

背景见上一篇博文

详细的实现方法:

1、资料准备:

需要被封装的HDL文件(替换为你自己的文件,参照之前的博文进行IP封装),为简单起见,这里只用一个文件,源码如下:

module timing( input iRst_n, input iClk, output oHsync, output oVsync, output oHblank, output oVblank, output oActive_video, output [31:0] oData ); ////////////////////参数,默认为VGA时序///////////////////// parameter SHOW_OR_NOT = 0; // Horizontal Parameter parameter H_RIGHT = 8; // H Right Border parameter H_FRONT = 8; // H Front Porch parameter H_SYNC = 96; // Hor Sync Time parameter H_BACK = 40; // H Back Porch + H Left Border parameter H_LEFT = 8; // H Left Border parameter H_ACT = 640; // Hor Addr Time parameter H_TOTAL = 800; // Vertical Parameter parameter V_BOTTOM = 8; parameter V_FRONT = 2; parameter V_SYNC = 2; parameter V_BACK = 25; parameter V_TOP = 8; parameter V_ACT = 480; parameter V_TOTAL = 525; parameter H_SYNC_START = H_ACT+H_RIGHT+H_FRONT; parameter H_SYNC_END = H_SYNC_START+H_SYNC; parameter H_SIZE = 799; parameter V_SYNC_START = V_ACT+V_BOTTOM+V_FRONT; parameter V_SYNC_END = V_SYNC_START+V_SYNC; parameter V_SIZE = 524; reg [11:0] hcount,vcount; assign oHsync = (hcount>=H_SYNC_START && hcount=V_SYNC_START && vcount=H_ACT)? 1'b1 : 1'b0; assign oVblank = (vcount>=V_ACT)? 1'b1 : 1'b0; assign oActive_video = (~oHblank) & (~oVblank); assign oData = (oActive_video == 1'b1)? 32'h00ff0000:32'h0; //--------------------------------------------- // 计数进程 always @(posedge iClk or negedge iRst_n) begin if(!iRst_n) begin hcount <= 12'b0; vcount <= 12'b0; end else begin if(hcount == H_SIZE) begin hcount <= 12'b0; if(vcount == V_SIZE) vcount <= 12'b0; else vcount <= vcount + 1'b1; end else hcount <= hcount + 1'b1; end end endmodule /*---------------end of file--------------*/

简单说明一下:

这个文件很简单,是VGA的时序,正如注释所说:

////////////////////参数,默认为VGA时序/////////////////////

parameter SHOW_OR_NOT = 0;

SHOW_OR_NOT参数是控制端口显示/隐藏的关键。


2、关键步骤

封装IP的方法就不多说了,参照之前的博文吧,按照向导进行完毕后,界面如图1所示:


1

红色方框内文字:“Enablement Dependency”,百度翻译结果是“启用依赖”,好吧,多少能看出来,这个和端口的可见性是有关联的,双击对应端口的Enablement Dependency,弹出图2所示的对话框。

2端口编辑对话框

如图2所示红色方框内的提示:该端口是否选择可见?,选择是,对话框界面变化为图3所示。

3选则Yes后,界面发生变化

选择Yes之后,图2所示的界面增加了图3红色方框内的内容。

在文本框内输入我们设定好的参数SHOW_OR_NOT,然后点击OK。同样的方法设置端口oVblank,设置完毕后,我们看一下GUI的界面效果,如图4所示。

4 GUI界面

IP Symbol可以看出,oHbalnkoVblank被隐藏掉了,这是由于我在写代码的时候给SHOW_OR_NOT定义了一个默认值0。到这里,功能实现还不是很完美,没有定义它的数据类型,端口的可见控制不能及时变化,下面我们更改一下SHOW_OR_NOT的属性,将他变为鼠标可勾选/取消的选项,端口也同时发生变化。

选择IP Customization Parameters,可以查看到所有参数,如图5所示。

5查看参数

选中SHOW_OR_NOT参数,右键选择Edit IP Parameter,弹出图6所示的对话框。

6编辑SHOW_OR_NOT属性

选择数据类型为booldefault value随意,我选的是false,结合上面的端口设置,意思就是端口默认不可见。编辑完毕的SHOW_OR_NOT属性如图7所示。

7 SHOW_OR_NOT属性

然后查看一下Symbol的效果,如图8所示。

8 Symbol效果图演示之端口可见

9 Symbol效果图演示之端口隐藏

实际测试:

以上都是在IP打包工程中的效果,下面我们建立工程实际测试一下:

建立一个新的Block Design,将我们做好的timing IP加入到BD中,效果图如图10所示:

10

双击timing_0,设置参数,如图11所示。

11勾选SHOW_OR_NOT

设置完毕后点击OK按钮,返回BD界面,timingsymbol发生变化,效果如图12所示。

12显示隐藏端口效果图

3、搞定,收工!


版权声明:

本文由博主“cuter”发布。欢迎转载,但不得擅自更改博文内容,也不得用于任何盈利目的。转载时不得删除作者简介和版权声明。如有盗用而不说明出处引起的版权纠纷,由盗用者自负。

博客官方地址:

ChinaAET:http://blog.chinaaet.com/cuter521

EDN China:http://bbs.ednchina.com/BLOG_cuter521_356737.HTM

Baidu
map