资源描述:
《Verilog HDL简明教程(2).doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、VerilogHDL简明教程(2)第二章HDL指南模块 模块是Verilog的基本描述单位,用于描述某个设计的功能或结构及其与其他模块通信的外部端口。一个设计的结构可使用开关级原语、门级原语和用户定义的原语方式描述;设计的数据流行为使用连续赋值语句进行描述;时序行为使用过程结构描述。一个模块可以在另一个模块中使用。 一个模块的基本语法如下:modulemodule_name(port_list);DeclaraTIons:reg,wire,parameter,input,output,inout,funcTIon,tas
2、k,...Statements:IniTIalstatementAlwaysstatementModuleinstanTIationGateinstantiationUDPinstantiationContinuousassignmentendmodule说明部分用于定义不同的项,例如模块描述中使用的寄存器和参数。语句定义设计的功能和结构。说明部分和语句可以散布在模块中模块的名字是HalfAdder。模块有4个端口:两个输入端口A和B,两个输出端口Sum和Carry。由于没有定义端口的位数,所有端口大小都为1位;同时,由于没
3、有各端口的数据类型说明,这四个端口都是线网数据类型。模块包含两条描述半加器数据流行为的连续赋值语句。从这种意义上讲,这些语句在模块中出现的顺序无关紧要,这些语句是并发的。每条语句的执行顺序依赖于发生在变量A和B上的事件。在模块中,可用下述方式描述一个设计:1)数据流方式;2)行为方式;3)并且时间精度为100ps(时间精度是指所有的时延必须被限定在0.1ns内)。如果此编译器指令所在的模块包含上面的连续赋值语句,#2代表2ns。如果没有这样的编译器指令,VerilogHDL模拟器会指定一个缺省时间单位。IEEEVerilog
4、HDL标准中没有规定缺省时间单位。 数据流描述方式用数据流描述方式对一个设计建模的最基本的机制就是使用连续赋值语句。在连续赋值语句中,某个值被指派给线网变量。连续赋值语句的语法为:assign[delay]LHS_net=RHS_expression;右边表达式使用的操作数无论何时发生变化,右边表达式都重新计算,并且在指定的时延后变化值被赋予左边表达式的线网变量。时延定义了右边表达式操作数变化与赋值给左边表达式之间的持续时间。如果没有定义时延值,缺省时延为0。下面的例子显示了使用数据流描述方式对2-4解码器电路的建模的实例
5、模型。`timescale1ns/1nsmoduleDecoder2x4(A,B,EN,Z);inputA,B,EN;output[0:3]Z;wireAbar,Bbar;assign#1Abar=~A;//语句1。assign#1Bbar=~B;//语句2。assign#2Z[0]=~(Abar&Bbar&EN);//语句3。assign#2Z[1]=~(Abar&B&EN);//语句4。assign#2Z[2]=~(A&Bbar&EN);//语句5。assign#2Z[3]=~(A&B&EN);//语句6。endmodu
6、le以反引号“`”开始的第一条语句是编译器指令,编译器指令`timescale将模块中所有时延的单位设置为1ns,时间精度为1ns。例如,在连续赋值语句中时延值#1和#2分别对应时延1ns和2ns。模块Decoder2x4有3个输入端口和1个4位输出端口。线网类型说明了两个连线型变量Abar和Bbar(连线类型是线网类型的一种)。此外,模块包含6个连续赋值语句。当EN在第5ns变化时,语句3、4、5和6执行。这是因为EN是这些连续赋值语句中右边表达式的操作数。Z[0]在第7ns时被赋予新值0。当A在第15ns变化时,语句1、
7、5和6执行。执行语句5和6不影响Z[0]和Z[1]的取值。执行语句5导致Z[2]值在第17ns变为0。执行语句1导致Abar在第16ns被重新赋值。由于Abar的改变,反过来又导致Z[0]值在第18ns变为1。请注意连续赋值语句是如何对电路的数据流行为建模的;这种建模方式是隐式而非显式的建模方式。此外,连续赋值语句是并发执行的,也就是说各语句的执行顺序与其在描述中出现的顺序无关。行为描述方式 设计的行为功能使用下述过程语句结构描述:1)initial语句:此语句只执行一次。2)always语句:此语句总是循环执行,或者说此
8、语句重复执行。只有寄存器类型数据能够在这两种语句中被赋值。寄存器类型数据在被赋新值前保持原有值不变。所有的初始化语句和always语句在0时刻并发执行。下例为always语句对1位全加器电路建endmodule模块FA_Seq有三个输入和两个输出。由于Sum、Cout、T1、T2和T3在a