结构化的建模方式就是通过对电路的层次和组成结构进行描述来建模,即通过对器件的调用(HDL概念称为例化),并使用线网来连接各器件来描述一个模块的结构。这里的器件包括Verilog HDL的内置门如与门and,异或门xor等,也可以是用户自定义的一个模块,还可以是FPGA厂商的提供的一个基本逻辑单元或者宏。结构化的描述方式反映了一个设计的层次结构。
[例1]
图1.一位全加器的结构图
代码:
module FA_struct (A, B, Cin, Sum, Cout);
input A;
input B;
input Cin;
output Sum;
output Cout;
wire S1, T1, T2, T3;
// -- statements -- //
xor x1 (S1, A, B);
xor x2 (Sum, S1, Cin);
and A1 (T1, A, B );
and A2 (T2, B, Cin);
and A3 (T3, A, Cin);
or O1 (Cout, T1, T2, T3 );
endmodule
该实例显示了一个全加器由两个异或门、三个与门、一个或门构成。S1、T1、T2、T3则是门与门之间的连线。代码显示了用纯结构的建模方式,其中xor 、and、or 是Verilog HDL 内置的门器件。以 xor x1 (S1, A, B) 该例化语句为例:xor 表明调用一个内置的异或门,器件名称xor ,代码实例化名x1(类似原理图输入方式)。括号内的S1,A,B 表明该器件管脚的实际连接线(信号)的名称,其中 A、B是输入,S1是输出。其他同。
[例2]
图2.两位全加器的结构图
代码:
module Four_bit_FA (FA, FB, FCin, FSum, FCout ) ; parameter SIZE = 2;
input [SIZE-1:0] FA;
input [SIZE-1:0] FB;
input FCin;
output [SIZE-1:0] FSum;
output FCout;
wire FTemp; FA_struct FA1(
.A (FA[0]),
.B (FB[0]),
.Cin (FCin) ,
.Sum (FSum[0]),
.Cout (FTemp)
); FA_struct FA2(
.A (FA[1]),
.B (FB[1]),
.Cin (FTemp) ,
.Sum (FSum[1]),
.Cout (FCount )
); endmodule 该实例用结构化建模方式进行一个两位的全加器的设计,顶层模块Four_bit_FA 调用了两个一位的全加器 FA_struct 。在这里,以前的设计模块FA_struct 对顶层而言是一个现成的器件,顶层模块只要进行例化就可以了。注意这里的例化中,端口映射(管脚的连线)采用名字关联,如 .A (FA[2]) ,其中.A 表示调用器件的管脚A,括号中的信号表示接到该管脚A的电路中的具体信号。wire 保留字表明信号Ftemp 是属线网类型(下面有具体描述)。另外,在设计中,尽量考虑参数化的问题。器件的端口映射必须采用名字关联。
文中的代码可以直接用于综合,文中图片即为Synplify综合后的RTL View做过简单修改后的图像。为了获得和博文中一样的RTL View,必须将Synplify的Implementation Option->Disable I/O Insertion选中。 |