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

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

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
明德扬点拨FPG高手进阶 第五章 verilog快速掌握 5.5 模块例化

5.5 模块例化 5.5.1 例化的概念 在做模块划分时,通常会出现这种情形:某个大的模块中包含了一个或多个功能 子模块。verilog 是通过模块调用或称为模块实例化的方式来实现这些子模块与高层模 块的连接的。 完成一个模块的设计,该模块就可以被其他代码通过例化的方式使用。例如,假 设我们完成一个 USB 模块的设计,该模块实现了 USB 接口功能,并定义好了输入和输 出接口。 如果其他代码需要使用到 USB 接口的功能,例如模块 1 ,它需要用到两个USB 接 口,则可以对USB 模块例化两份,从而模块 1 就包含了两个 USB 接口。 同样的道理,模块 1 也可以被其他代码例化。假设顶模块包括了模块 1 的功能和 其他模块通过,则可以通过例化模块 1 ,从而使用该模块。 通过例化,就可以通过一个个简单的小模块,搭建起复杂、功能强大的系统。 注意,例化时,电路上是有真正的电路对应的。例化多少份,就有多少个对应的 电路。例如上图中,对 USB 模块例化了两份,那么就表示有两套 USB 硬件电路。 5.5.2 例化方法 一个模块的设计文件,外界可以看到的是其模块名和输入输出接口。如下图所 示。模块名为 uart ,其输入输出接口分别有clk ,rst_n ,vld_n 等信号。 其他模块例化该模块时,只按需要按如下方式例化即可。 1 是指被例化模块的模块名,uart 就是被例化的模块名; 2 是例化名,相当于标识。例如当例化多个相同模块时,可以通过例化名来识别哪 一个例化。 3.是被调用模块的输入输出接口。注意例化时,前面有“.”号。 4.括号内本模块的信号名称。如上图中,将本模块的 clk_100m 信号连接到被例化 模块的 clk 接口;将本模块信号bt_data_out_vld 连接到被例化模块的 vld_in 接口等。 5.5.3 参数传递 在例化模块时,可以不修改被例化模块代码,就可以改变被例化模块内部的参数。 而且例化之间不受影响。 例如假充 uart 模块内部定义了一个参数: parameter DATA_W=8 ; 在例化时,按以下写法,就将 DATA_W 变成 16。其中“#”表示要传递参数, “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 ,该模块一共有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 位位宽。因此端口声明可写成: 接下来是描述出图中的电路,可以将电路划分成以下几部分,并且将未命名的信 号命名(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。需要注意,由于输入位宽改 变,例化时就要传递合适的参

文档评论(0)

jyf123 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:6153235235000003

1亿VIP精品文档

相关文档