明德扬点拨FPGA高手进阶 第五节 verilog快速掌握 5.3模块概念.pdfVIP

  • 5
  • 0
  • 约1.91千字
  • 约 6页
  • 2017-06-05 发布于湖北
  • 举报

明德扬点拨FPGA高手进阶 第五节 verilog快速掌握 5.3模块概念.pdf

5.3 模块概念 5.3.1 模块概念 模块(module )是verilog 最基本的概念,是 v 设计中的基本单元,每个 v 设计的 系统中都由若干 module 组成。 1、模块在语言形式上是以关键词 module 开始,以关键词 endmodule 结束的一段 程序。 2、模块的实际意义是代表硬件电路上的逻辑实体。 3、每个模块都实现特定的功能。 4、模块之间是并行运行的。 5、模块是分层的,高层模块通过例化、连接低层模块的实例来实现复杂的功能。 7、各模块连接完成整个系统需要一个顶层模块(top-module )。 5.3.2 模块结构 module 模块名 (端口列表 ); 参数声明 端口声明 定义 模块条目 endmodule 其中: 1. 模块名 模块名是模块唯一的标识符。 2. 端口列表 端口列表是输入、输出和双向端口的列表,这些端口用来与其他模块进行连接。 这里只需要列出信号名,不需要指出端口方向和位宽。 上面代码,指出了模块名是 mul_module ,同时该模块的接口有clk ,rst_n , mul_a ,mul_b 和 mul_result。 3. 参数声明 用 parameter 定义参数,例如位宽、长度、状态机命名等参数。 4. 端口声明 端口声明指出端口方向和位宽。端口方向可以是输入、输出和双向。 上面代码指出,clk ,rst_n 是输入信号并且是 1 位位宽;mul_a 是输入信号并 且是 4 位位宽;mul_b 是输入信号并且是 3 位位宽;mul_result 是输出信号并且是 7 位位宽。 5. 定义 定义是一段程序,用来指定数据对象的类型和位宽。类型一般为寄存器型、线型; 上面代码指出,clk、rst_n、mul_a、mul_b 都是 wire 型;mul_result_tmp 和 mul_result 都是 reg 型。 至于是用 reg 型还是 wire 型,请看后面的 reg 和 wire 一节。 6. 模块条目 模块条目也是一段程序,将上面定义和端口组合起来,是说明这个模块要 做什么的语句。其形式如下: FPGA 电路一般分两种:组合逻辑和时序逻辑。组合逻辑是不受时钟影响,输入变 化输出立刻变化的电路。时序逻辑是在时钟边沿变化(常用上升沿),只有在时钟边 沿时,输出才会根据输入变化的电路。 关于组合逻辑详细内容,请看后面的组合逻辑一节。 关于时序逻辑详细内容,请看后面的时序逻辑一节。 提示:用 GVIM 打开.v 文件后,输入“Module”并回车,即可得到模块的设计文 件,非常方便。 5.3.3 reg 和wire 区别 设计代码中所有的信号定义,只能用 reg 和 wire 两种。 设计代码中,如果是本模块 always 产生的信号,都用 reg ;其他都用wire。 测试文件中,initial 内赋值的代码也用reg。 注意:reg 虽然是寄存器的缩写,但用 reg 定义的信号不一定生成寄存器。既然这 样,就没必要认为 reg 是寄存器类型,就当它是一个名称。 练习 1 :eoc_cnt 是用 reg 还是 wire 型 答案:很明显,eoc_cnt 由always 产生的,因此用 reg 类型。 练习 2 :row1_data 和 row2_data 是用 reg 还是 wire 型 答案:连接到例化模块的输出信号,都用 wire 型。 练习 3 :rdreq_cfg 是用 reg 还是 wire 型 答案:虽然本 always 是组合逻辑电路,不会生成寄存器,但 rdreq_cfg 是 always 产生的,因此仍然是用 reg 型。 练习 4 :sdata 是用 reg 还是 wire 型 答案:用 assign 产生的信号,都用 wire 型。 以上文章出自明德扬点拨FPGA 高手进阶,版权归明德扬所有,如需转载,请注明明德扬, 谢谢!

文档评论(0)

1亿VIP精品文档

相关文档