明德扬点拨FPGA高手进阶 第五章 verilog快速掌握 5.5 模块例化

明德扬点拨FPGA高手进阶 第五章 verilog快速掌握 5.5 模块例化

ID:37730077

大小:540.88 KB

页数:9页

时间:2019-05-29

明德扬点拨FPGA高手进阶 第五章 verilog快速掌握 5.5 模块例化_第1页
明德扬点拨FPGA高手进阶 第五章 verilog快速掌握 5.5 模块例化_第2页
明德扬点拨FPGA高手进阶 第五章 verilog快速掌握 5.5 模块例化_第3页
明德扬点拨FPGA高手进阶 第五章 verilog快速掌握 5.5 模块例化_第4页
明德扬点拨FPGA高手进阶 第五章 verilog快速掌握 5.5 模块例化_第5页
资源描述:

《明德扬点拨FPGA高手进阶 第五章 verilog快速掌握 5.5 模块例化》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、5.5模块例化5.5.1例化的概念在做模块划分时,通常会出现这种情形:某个大的模块中包含了一个或多个功能子模块。verilog是通过模块调用或称为模块实例化的方式来实现这些子模块与高层模块的连接的。完成一个模块的设计,该模块就可以被其他代码通过例化的方式使用。例如,假设我们完成一个USB模块的设计,该模块实现了USB接口功能,并定义好了输入和输出接口。如果其他代码需要使用到USB接口的功能,例如模块1,它需要用到两个USB接口,则可以对USB模块例化两份,从而模块1就包含了两个USB接口。同样的道理,模块1也可以被其他代码例化。假设顶模块包括了模块1的功

2、能和其他模块通过,则可以通过例化模块1,从而使用该模块。通过例化,就可以通过一个个简单的小模块,搭建起复杂、功能强大的系统。注意,例化时,电路上是有真正的电路对应的。例化多少份,就有多少个对应的电路。例如上图中,对USB模块例化了两份,那么就表示有两套USB硬件电路。5.5.2例化方法一个模块的设计文件,外界可以看到的是其模块名和输入输出接口。如下图所示。模块名为uart,其输入输出接口分别有clk,rst_n,vld_n等信号。其他模块例化该模块时,只按需要按如下方式例化即可。1是指被例化模块的模块名,uart就是被例化的模块名;2是例化名,相当于标识

3、。例如当例化多个相同模块时,可以通过例化名来识别哪一个例化。3.是被调用模块的输入输出接口。注意例化时,前面有“.”号。4.括号内本模块的信号名称。如上图中,将本模块的clk_100m信号连接到被例化模块的clk接口;将本模块信号bt_data_out_vld连接到被例化模块的vld_in接口等。5.5.3参数传递在例化模块时,可以不修改被例化模块代码,就可以改变被例化模块内部的参数。而且例化之间不受影响。例如假充uart模块内部定义了一个参数:parameterDATA_W=8;在例化时,按以下写法,就将DATA_W变成16。其中“#”表示要传递参数,

4、“DATA_W”就是uart模块内部的DATA_W参数,其值为8。“(16)”表示将uart里DATA_W值改为16。同样支持多个参数的修改,例如改为uart#(.DATA_W(16),.DATA_LEN(8))。注意,这里所说的传递,只是本例化模块起作用。即u_uart这个例化模块的DATA_W才变成16。下图中,u_uart_0里的DATA_W仍然为8,而u_uart_1里的DATA_W为16。5.5.4例化举例练习:将下面模块用verilog描述出来,其中mul_module是5.4.3设计的模块。首先为该模块起一个名称,如mul_2port,该模

5、块一共有clk,rst_n,sel_a,sel_b,din_a,din_b,din_c,din_d,result_a和result_b信号。因此模块名和端口列表可以写成:接下来是端口声明,指出端口方向和位宽。由图中可知clk,rst_n,sel_a和sel_b是输入信号并且是1位位宽;din_a是输入信号并且是3位位宽;din_b是输入信号并且是2位位宽;din_c和din_d是输入信号并且是4位位宽;result_a是输出信号并且是7位位宽;result_b是输出信号并且是6位位宽。因此端口声明可写成:接下来是描述出图中的电路,可以将电路划分成以下几部

6、分,并且将未命名的信号命名(result_a_tmp,result_b_tmp,sel_dout和sel)。第1部分是7位的D触发器,时钟为clk,复位为rst_n,输入是result_a_tmp,输出为result_a。因此该电路代码为:第2部分是6位的D触发器,时钟为clk,复位为rst_n,输入是result_b_tmp,输出为result_b。因此该电路代码为:第3部分是例化mul_module,该例化名为mul_4_3。需要注意,由于输入位宽改变,例化时就要传递合适的参数。本部分mul_a的位宽是3,mul_b的位宽是4。因此代码如下(注意左边

7、第一个A_W是指mul_moudle的A_W参数,第二个A_W是本mul2port模块定义的参数,值为3):第4部分同样是例化mul_module,该例化名为mul_4_2。需要注意,由于输入位宽改变,例化时就要传递合适的参数。本部分mul_a的位宽是2,mul_b的位宽是4。因此代码如下:第5部分是1个选择器。该选择器的选择端为sel,选择项有din_c和din_d,结果是sel_dout。因此该选择器的代码如下:第6总合是1个与门和1个D触发器。sel_a和sel_b相与后,作为触发器的输入,输出为sel。因此代码如下:我们还要对信号的类型进行定义,

8、由于端口声明时已经定义了输入信号位宽,并且不定义类型默认是wire型,因此输入信

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。