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

2015年11月12日 10:15    发布者:mdykj33
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.        <端口列表>
端口列表是输入、输出和双向端口的列表,这些端口用来与其他模块进行连接。这里只需要列出信号名,不需要指出端口方向和位宽。
http://www.mdy-edu.com/ueditor/php/upload/image/20151015/1444903538528923.png

上面代码,指出了模块名是mul_module,同时该模块的接口有clk,rst_n,mul_a,mul_b和mul_result。
3.        <参数声明>
用parameter定义参数,例如位宽、长度、状态机命名等参数。
http://www.mdy-edu.com/ueditor/php/upload/image/20151015/1444903549359294.png
4.        <端口声明>
端口声明指出端口方向和位宽。端口方向可以是输入、输出和双向。
http://www.mdy-edu.com/ueditor/php/upload/image/20151015/1444903559306181.png
       上面代码指出,clk,rst_n是输入信号并且是1位位宽;mul_a是输入信号并且是4位位宽;mul_b是输入信号并且是3位位宽;mul_result是输出信号并且是7位位宽。
5.        <定义>
定义是一段程序,用来指定数据对象的类型和位宽。类型一般为寄存器型、线型;
http://www.mdy-edu.com/ueditor/php/upload/image/20151015/1444903570111976.png
上面代码指出,clk、rst_n、mul_a、mul_b都是wire型;mul_result_tmp和mul_result都是reg型。
至于是用reg型还是wire型,请看后面的reg和wire一节。
6.        <模块条目>
模块条目也是一段程序,将上面<定义>和<端口>组合起来,是说明这个模块要做什么的语句。其形式如下:
http://www.mdy-edu.com/ueditor/php/upload/image/20151015/1444903581931355.png
FPGA电路一般分两种:组合逻辑和时序逻辑。组合逻辑是不受时钟影响,输入变化输出立刻变化的电路。时序逻辑是在时钟边沿变化(常用上升沿),只有在时钟边沿时,输出才会根据输入变化的电路。
关于组合逻辑详细内容,请看后面的组合逻辑一节。
关于时序逻辑详细内容,请看后面的时序逻辑一节。
提示:用GVIM打开.v文件后,输入“Module”并回车,即可得到模块的设计文件,非常方便。
5.3.3 reg和wire区别
设计代码中所有的信号定义,只能用reg和wire两种。
设计代码中,如果是本模块always产生的信号,都用reg;其他都用wire。
测试文件中,initial内赋值的代码也用reg。
注意:reg虽然是寄存器的缩写,但用reg定义的信号不一定生成寄存器。既然这样,就没必要认为reg是寄存器类型,就当它是一个名称。
练习1:eoc_cnt是用reg还是wire型
http://www.mdy-edu.com/ueditor/php/upload/image/20151016/1444957032490622.png
答案:很明显,eoc_cnt由always产生的,因此用reg类型。
练习2:row1_data和row2_data是用reg还是wire型
http://www.mdy-edu.com/ueditor/php/upload/image/20151015/1444903594327733.png
答案:连接到例化模块的输出信号,都用wire型。
练习3:rdreq_cfg是用reg还是wire型
http://www.mdy-edu.com/ueditor/php/upload/image/20151015/1444903603568960.png
答案:虽然本always是组合逻辑电路,不会生成寄存器,但rdreq_cfg是always产生的,因此仍然是用reg型。
练习4:sdata是用reg还是wire型
http://www.mdy-edu.com/ueditor/php/upload/image/20151015/1444903619722382.png
答案:用assign产生的信号,都用wire型。
以上文章出自明德扬点拨FPGA高手进阶,版权归明德扬所有,如需转载,请注明明德扬,谢谢!

网友评论

mdykj33 2015年11月12日
后续会慢慢更新,敬请期待!
gjlkgln4534 2015年11月13日
关注!
chunfen26341612 2015年11月14日
谢谢楼主分享!