Verilog的结构化描述形式
在VerilogHDL中可使用如下方式描述结构:
1)内置门原语(在门级);
2)开关级原语(在晶体管级);
3)用户定义的原语(在门级);
4)模块实例(创建层次结构)。
在这一实例中,模块包含门的实例语句,也就是说包含内置门xor、and和or的实例语句。门实例由线网类型变量S1、T1、T2和T3互连。由于没有指定的顺序,门实例语句可以以任何顺序出现;图中显示了纯结构;xor、and和or是内置门原语;X1、X2、A1等是实例名称。紧跟在每个门后的信号列表是它的互连;列表中的第一个是门输出,余下的是输入。例如,S1与xor门实例X1的输出连接,而A和B与实例X1的输入连接。
4位全加器可以使用4个1位全加器模块描述。下面是4位全加器的结构描述形式。
moduleFourBitFA(FA,FB,FCin,FSum,FCout);
parameterSIZE=4;
input[SIZE:1]FA,FB;
output[SIZE:1]FSum
inputFCin;
inputFCout;
wire[1:SIZE-1]FTemp;
FA_Str
FA1(.A(FA[1]),.B(FB[1]),.Cin(FCin),
.Sum(FSum[1]),.Cout(FTemp[2])),
FA2(.A(FA[2]),.B(FB[2]),.Cin(FTemp[1]),
.Sum(FSum[2]),.Cout(FTemp[2])),
FA3(FA[3],FB[3],FTemp[2],FSum[3],FTemp[3],
FA4(FA[4],FB[4],FTemp[3],FSum[4],FCout);
endmodule
在这一实例中,模块实例用于建模4位全加器。在模块实例语句中,端口可以与名称或位置关联。前两个实例FA1和FA2使用命名关联方式,也就是说,端口的名称和它连接的线网被显式描述(每一个的形式都为“.port_name(net_name))。最后两个实例语句,实例FA3和FA4使用位置关联方式将端口与线网关联。这里关联的顺序很重要,例如,在实例FA4中,第一个FA[4]与FA_Str的端口A连接,第二个FB[4]与FA_Str的端口B连接,余下的由此类推。
Verilog-混合设计描述方式
在模块中,结构的和行为的结构可以自由混合。也就是说,模块描述中可以包含实例化的门、模块实例化语句、连续赋值语句以及always语句和initial语句的混合。它们之间可以相互包含。来自always语句和initial语句(切记只有寄存器类型数据可以在这两种语句中赋值)的值能够驱动门或开关,而来自于门或连续赋值语句(只能驱动线网)的值能够反过来用于触发always语句和initial语句。
下面是混合设计方式的1位全加器实例。
module FA_Mix (A, B, Cin, Sum, Cout);
input A,B, Cin;
output Sum, Cout;
reg Cout;
reg T1, T2, T3;
wire S1;
xor X1(S1, A, B); // 门实例语句。
always
@ ( A or B or Cin ) begin // always 语句。
T1 = A & Cin;
T2 = B & Cin;
T3 = A & B;
Cout = (T1| T2) | T3;
end
assign Sum = S1 ^ Cin; // 连续赋值语句。
endmodule
只要A或B上有事件发生,门实例语句即被执行。只要A、B或Cin上有事件发生,就执行always 语句,并且只要S 1或C i n上有事件发生,就执行连续赋值语句。