资源描述:
《第1章verilog层次化设计》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、VerilogHDL数字系统设计及实践第1章Verilog层次化设计学习指南【知识目标】(1)了解Verilog设计中的模块的概念;(2)了解层次化设计的概念;(3)了解Testbench的概念。【技能目标】(1)能够描述一个完整的简单模块;(2)能够通过模块实例化完成层次化的设计。【重点难点】(1)模块实例化的理解;(2)Testbench的概念。1.1一个简单的例子——四位全加器的设计【例1.1】利用VerilogHDL语言和层次化设计方法来设计一个四位全加器电路。//example_1_1:fulladder//四位的全加器由四个一位的全加器构成。modulefadder_4(i
2、_A,i_B,i_Cin,o_S,o_Cout);input[3:0]i_A,i_B;//输入端口i_A,i_Binputi_Cin;//输出端口i_Cinoutput[3:0]o_S;//输出端口o_Soutputo_Cout;//输出端口o_CoutwireCout_1,Cout_2,Cout_3;//wire型数据Cout_1,Cout_2,Cout_31.1一个简单的例子——四位全加器的设计//实例化四个1位的全加器fadder_1u_fadder_1_1(.i_A(i_A[0]),.i_B(i_B[0]),.i_Cin(i_Cin),.o_S(o_S[0]),.o_Cout(
3、Cout_1));fadder_1u_fadder_1_2(.i_A(i_A[1]),.i_B(i_B[1]),.i_Cin(Cout_1),.o_S(o_S[1]),.o_Cout(Cout_2));1.1一个简单的例子——四位全加器的设计fadder_1u_fadder_1_3(.i_A(i_A[2]),.i_B(i_B[2]),.i_Cin(Cout_2),.o_S(o_S[2]),.o_Cout(Cout_3));fadder_1u_fadder_1_4(.i_A(i_A[3]),.i_B(i_B[3]),.i_Cin(Cout_3),.o_S(o_S[3]),.o_Cout(
4、o_Cout));endmodule1.1一个简单的例子——四位全加器的设计//定义一个一位的全加器modulefadder_1(i_A,i_B,i_Cin,o_S,o_Cout);inputi_A,i_B;//输入端口i_A,i_Binputi_Cin;//输入端口i_Cinoutputo_S,o_Cout;//输出端口o_S,o_Cout//计算结果值:o_S=i_A⊕i_B⊕i_Cinassigno_S=i_A^i_B^i_Cin;//计算进位值:o_Cout=(i_A⊕i_B)i_Cin+(i_A)(i_B)assigno_Cout=(i_A^i_B)&i_Cin
5、i_A&i_
6、B;endmodule1.1一个简单的例子——四位全加器的设计图1.1四位全加器结构图利用VerilogHDL进行层次化设计,其描述的电路结构与真实的电路结构很相近,因此通常可以直接画出电路的结构图。用结构图来表示这个四位全加器,如图1.1所示。1.2模块和端口一个模块通常就是一个电路单元器件图1.2模块和端口一个模块的代码主要由下面几个部分构成:模块名定义、端口描述和内部功能逻辑描述。1.2模块和端口1.2.1模块定义定义模块要使用关键字“module”和“endmodule”,其语法格式为:module模块名(端口声明列表);端口定义......endmodule1.2.2端口定义
7、在Verilog中定义端口有两种风格:普通风格和ANSIC风格。普通风格:Module模块名(端口名1,端口名2,….);然后接下来需要对输入输出端口进行定义,如:input[位宽-1:0]端口名1,端口名2;output[位宽-1:0]端口3;inout[位宽-1:0]端口名4;1.2模块和端口module模块名(input[位宽-1:0]端口名1,端口名2;output[位宽-1:0]端口3;inout[位宽-1:0]端口名4;);利用ANSIC风格,可以一次性的完成模块名和端口的定义,使得代码更为紧凑,减少了出错的几率,因此推荐使用这种风格进行端口定义。本书中给出的所有例子都采用
8、ANSIC风格来定义端口。modulefadder_4(input[3:0]i_A,i_B;inputi_Cin;output[3:0]o_S;outputo_Cout;);1.2模块和端口2.3模块实例化图1.3模块实例化示意图通过多次实例化相同模块,我们实际上在电路中设计了4个相同的一位加法器,只是它们在电路中的名字和连接关系各不相同。1.2模块和端口对已定义好的模块进行实例化引用的语法格式如下:模块名实例名(端口连接关系列表);在实例化时