Verilog HDL 中三种建模方式
发布时间:2008/5/29 0:00:00 访问次数:1415
3.3 三种建模方式
在hdl的建模中,主要有结构化描述方式、数据流描述方式和行为描述方式,下面分别举例
说明三者之间的区别。
3.3.1 结构化描述方式
结构化的建模方式就是通过对电路结构的描述来建模,即通过对器件的调用(hdl概念称为
例化),并使用线网来连接各器件的描述方式。这里的器件包括verilog hdl 的内置门如与门and
,异或门xor等,也可以是用户的一个设计。结构化的描述方式反映了一个设计的层次结构。
例[1]:一位全加器
图4 一位全加器的结构图
代码:
module fa_struct (a, b, cin, sum, count);
input a;
input b;
input cin;
2004-08-16 第12页,共41页
版权所有,侵权必究
绝密
verilog hdl 入门教程请输入文档编号
output sum;
output count;
wire s1, t1, t2, t3;
// -- statements -- //
xor x1 (s1, a, b);
xor x2 (sum, s1, cin);
and a1 (t3, a, b );
and a2 (t2, b, cin);
and a3 (t1, 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]:两位的全加器
两位的全加器可通过调用两个一位的全加器来实现。该设计的设计层次示意图和结构图如
下:
four_bit_fa
fa_struct fa_struct
a
b
cin
sum
countfa
a
b
cin
sum
countfa
four_bit_fa
fa
_struct
_struct
fcin
fb
fsum
fcount
图5 两位全加器的结构示意图
代码:
module four_bit_fa (fa, fb, fcin, fsum, fcout ) ;
parameter size = 2;
input [size:1] fa;
2004-08-16 第13页,共41页
版权所有,侵权必究
绝密
verilog hdl 入门教程请输入文档编号
input [size:1] fb;
input fcin;
output [size:1] fsum;
output fcout;
wire ftemp;
fa_struct fa1(
.a (fa[1]),
.b (fb[1]),
.cin (fcin) ,
.sum (fsum[1]),
.cout (ftemp)
);
fa_struct fa2(
.a (fa[2]),
.b (fb[2]),
.cin (ftemp) ,
.sum (fsum[2]),
.cout (fcount )
);
endmodule
该实例用结构化建模方式进行一个两位的全加器的设计,顶层模块four_bit_fa 调用了两个一
位的全加器 fa_struct 。在这里,以前的设计模块fa_struct 对顶层而言是一个现成的器件,顶层模
块只要进行例化就可以了。
注意这里的例化中,端口映射(管脚的连线)采用名字关联,如 .a (fa[2] ) ,其中.a 表示
调用器件的管脚a,括号中的信号表示接到该管脚a的电路中的具体信号。
wire 保留字表明信号ftemp 是属线网类型(下面有具体描述)。
另外,在设计中,尽量考虑参数化的问题。
器件的端口映射必须采用名字关联。
3.3.2 数据流描述方式
数据流的建模方式就是通过对数据流在设计中的具体行为的描述的来建模。最基本的机制就
是用连续赋值语句。在连续赋值语句中,某个值被赋给某个线网变量(信号),语法如下:
assign [delay] net_name = expression;
如:assign #2 a = b;
2004-08-16 第14页,共41页
版权所有,侵权必究
绝密
verilog hdl 入门教程请输入文档编号
在数据流描述方式中,还必须借助于hdl提供的一些运算符,如按位逻辑运算符:逻辑与
(&),逻辑或()等。
以上面的全加器为例,可用如下的建模方式:
图6 一位全加器的结构图
`timescale 1ns/100ps
module fa_flow(a,b,cin,sum,count)
input a,b,cin;
output sum, count;
wire s1,t1,t2,t3;
assign # 2 s1 = a ^ b;
assign # 2 sum = s1 ^ cin;
assign #2 t3 = a & b;
assign #2 t1 = a & cin;
assign #2 t2 = b & cin ;
endmodule
注意在各assign 语句之间,是并行执行的,即各语句的执行与语句之间的顺序无关。如上,当
a有个变化时,s1、t3、t1 将同时变化,s1的变化又会造成sum的变化。
3.3.3 行为描述方式
行为方式的建
3.3 三种建模方式
在hdl的建模中,主要有结构化描述方式、数据流描述方式和行为描述方式,下面分别举例
说明三者之间的区别。
3.3.1 结构化描述方式
结构化的建模方式就是通过对电路结构的描述来建模,即通过对器件的调用(hdl概念称为
例化),并使用线网来连接各器件的描述方式。这里的器件包括verilog hdl 的内置门如与门and
,异或门xor等,也可以是用户的一个设计。结构化的描述方式反映了一个设计的层次结构。
例[1]:一位全加器
图4 一位全加器的结构图
代码:
module fa_struct (a, b, cin, sum, count);
input a;
input b;
input cin;
2004-08-16 第12页,共41页
版权所有,侵权必究
绝密
verilog hdl 入门教程请输入文档编号
output sum;
output count;
wire s1, t1, t2, t3;
// -- statements -- //
xor x1 (s1, a, b);
xor x2 (sum, s1, cin);
and a1 (t3, a, b );
and a2 (t2, b, cin);
and a3 (t1, 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]:两位的全加器
两位的全加器可通过调用两个一位的全加器来实现。该设计的设计层次示意图和结构图如
下:
four_bit_fa
fa_struct fa_struct
a
b
cin
sum
countfa
a
b
cin
sum
countfa
four_bit_fa
fa
_struct
_struct
fcin
fb
fsum
fcount
图5 两位全加器的结构示意图
代码:
module four_bit_fa (fa, fb, fcin, fsum, fcout ) ;
parameter size = 2;
input [size:1] fa;
2004-08-16 第13页,共41页
版权所有,侵权必究
绝密
verilog hdl 入门教程请输入文档编号
input [size:1] fb;
input fcin;
output [size:1] fsum;
output fcout;
wire ftemp;
fa_struct fa1(
.a (fa[1]),
.b (fb[1]),
.cin (fcin) ,
.sum (fsum[1]),
.cout (ftemp)
);
fa_struct fa2(
.a (fa[2]),
.b (fb[2]),
.cin (ftemp) ,
.sum (fsum[2]),
.cout (fcount )
);
endmodule
该实例用结构化建模方式进行一个两位的全加器的设计,顶层模块four_bit_fa 调用了两个一
位的全加器 fa_struct 。在这里,以前的设计模块fa_struct 对顶层而言是一个现成的器件,顶层模
块只要进行例化就可以了。
注意这里的例化中,端口映射(管脚的连线)采用名字关联,如 .a (fa[2] ) ,其中.a 表示
调用器件的管脚a,括号中的信号表示接到该管脚a的电路中的具体信号。
wire 保留字表明信号ftemp 是属线网类型(下面有具体描述)。
另外,在设计中,尽量考虑参数化的问题。
器件的端口映射必须采用名字关联。
3.3.2 数据流描述方式
数据流的建模方式就是通过对数据流在设计中的具体行为的描述的来建模。最基本的机制就
是用连续赋值语句。在连续赋值语句中,某个值被赋给某个线网变量(信号),语法如下:
assign [delay] net_name = expression;
如:assign #2 a = b;
2004-08-16 第14页,共41页
版权所有,侵权必究
绝密
verilog hdl 入门教程请输入文档编号
在数据流描述方式中,还必须借助于hdl提供的一些运算符,如按位逻辑运算符:逻辑与
(&),逻辑或()等。
以上面的全加器为例,可用如下的建模方式:
图6 一位全加器的结构图
`timescale 1ns/100ps
module fa_flow(a,b,cin,sum,count)
input a,b,cin;
output sum, count;
wire s1,t1,t2,t3;
assign # 2 s1 = a ^ b;
assign # 2 sum = s1 ^ cin;
assign #2 t3 = a & b;
assign #2 t1 = a & cin;
assign #2 t2 = b & cin ;
endmodule
注意在各assign 语句之间,是并行执行的,即各语句的执行与语句之间的顺序无关。如上,当
a有个变化时,s1、t3、t1 将同时变化,s1的变化又会造成sum的变化。
3.3.3 行为描述方式
行为方式的建