verilog HDL 结构化建模具体实例
发布时间:2008/5/28 0:00:00 访问次数:652
5.4 结构化建模具体实例
对一个数字系统的设计,我们采用的是自顶向下的设计方式。可把系统划分成几个功能模
块,每个功能模块再划分成下一层的子模块。每个模块的设计对应一个module ,一个module 设计
成一个verilog hdl 程序文件。因此,对一个系统的顶层模块,我们采用结构化的设计,即顶层模
块分别调用了各个功能模块。下面以一个实例(一个频率计数器系统)说明如何用hdl进行系统
设计。
在该系统中,我们划分成如下三个部分:2输入与门模块,led显示模块,4位计数器模块。系
统的层次描述如下:
top cnt_bcd (cnt_bcd.v)
sub and2 cnt_4b hex2led
(and2.v) (cnt_4b.v) (hex2led.v)
图9 系统层次描述
顶层模块cnt_bcd,文件名cnt_bcd.v,该模块调用了低层模块 and2、cnt_4b 和
hex2led 。
系统的电路结构图如下:
图10 系统电路框图
2004-08-16 第31页,共41页
版权所有,侵权必究
绝密
verilog hdl 入门教程请输入文档编号
顶层模块cnt_bcd对应的设计文件 cnt_bcd.v 内容为:
module cnt_bcd (bcd_a,bcd_b,bcd_c,bcd_d,clk,gate,reset) ;
// ------------ port declarations --------- //
input clk;
input gate;
input reset;
output [3:0] bcd_a;
output [3:0] bcd_b;
output [3:0] bcd_c;
output [3:0] bcd_d;
wire clk;
wire gate;
wire reset;
wire [3:0] bcd_a;
wire [3:0] bcd_b;
wire [3:0] bcd_c;
wire [3:0] bcd_d;
// ----------- signal declarations -------- //
wire net104;
wire net116;
wire net124;
wire net132;
wire net80;
wire net92;
// -------- component instantiations -------//
cnt_4b u0(
.clk(clk),
.enable(gate),
.full(net80),
.q(bcd_a),
.reset(reset)
);
cnt_4b u1(
.clk(clk),
.enable(net116),
2004-08-16 第32页,共41页
版权所有,侵权必究
绝密
verilog hdl 入门教程请输入文档编号
.full(net92),
.q(bcd_b),
.reset(reset)
);
cnt_4b u2(
.clk(clk),
.enable(net124),
.full(net104),
.q(bcd_c),
.reset(reset)
);
cnt_4b u3(
.clk(clk),
.enable(net132),
.q(bcd_d),
.reset(reset)
);
and2 u4(
.a0(net80),
.a1(gate),
.y(net116)
);
and2 u5(
.a0(net92),
.a1(net116),
.y(net124)
);
and2 u6(
.a0(net104),
.a1(net124),
.y(net132)
);
endmodule
2004-08-16 第33页,共41页
版权所有,侵权必究
绝密
verilog hdl 入门教程请输入文档编号
注意:这里的and2是为了举例说明,在实际设计中,对门级不要重新设计成一个模块,同时
对涉及保留字的(不管大小写)相类似的标识符最好不用。
5.4 结构化建模具体实例
对一个数字系统的设计,我们采用的是自顶向下的设计方式。可把系统划分成几个功能模
块,每个功能模块再划分成下一层的子模块。每个模块的设计对应一个module ,一个module 设计
成一个verilog hdl 程序文件。因此,对一个系统的顶层模块,我们采用结构化的设计,即顶层模
块分别调用了各个功能模块。下面以一个实例(一个频率计数器系统)说明如何用hdl进行系统
设计。
在该系统中,我们划分成如下三个部分:2输入与门模块,led显示模块,4位计数器模块。系
统的层次描述如下:
top cnt_bcd (cnt_bcd.v)
sub and2 cnt_4b hex2led
(and2.v) (cnt_4b.v) (hex2led.v)
图9 系统层次描述
顶层模块cnt_bcd,文件名cnt_bcd.v,该模块调用了低层模块 and2、cnt_4b 和
hex2led 。
系统的电路结构图如下:
图10 系统电路框图
2004-08-16 第31页,共41页
版权所有,侵权必究
绝密
verilog hdl 入门教程请输入文档编号
顶层模块cnt_bcd对应的设计文件 cnt_bcd.v 内容为:
module cnt_bcd (bcd_a,bcd_b,bcd_c,bcd_d,clk,gate,reset) ;
// ------------ port declarations --------- //
input clk;
input gate;
input reset;
output [3:0] bcd_a;
output [3:0] bcd_b;
output [3:0] bcd_c;
output [3:0] bcd_d;
wire clk;
wire gate;
wire reset;
wire [3:0] bcd_a;
wire [3:0] bcd_b;
wire [3:0] bcd_c;
wire [3:0] bcd_d;
// ----------- signal declarations -------- //
wire net104;
wire net116;
wire net124;
wire net132;
wire net80;
wire net92;
// -------- component instantiations -------//
cnt_4b u0(
.clk(clk),
.enable(gate),
.full(net80),
.q(bcd_a),
.reset(reset)
);
cnt_4b u1(
.clk(clk),
.enable(net116),
2004-08-16 第32页,共41页
版权所有,侵权必究
绝密
verilog hdl 入门教程请输入文档编号
.full(net92),
.q(bcd_b),
.reset(reset)
);
cnt_4b u2(
.clk(clk),
.enable(net124),
.full(net104),
.q(bcd_c),
.reset(reset)
);
cnt_4b u3(
.clk(clk),
.enable(net132),
.q(bcd_d),
.reset(reset)
);
and2 u4(
.a0(net80),
.a1(gate),
.y(net116)
);
and2 u5(
.a0(net92),
.a1(net116),
.y(net124)
);
and2 u6(
.a0(net104),
.a1(net124),
.y(net132)
);
endmodule
2004-08-16 第33页,共41页
版权所有,侵权必究
绝密
verilog hdl 入门教程请输入文档编号
注意:这里的and2是为了举例说明,在实际设计中,对门级不要重新设计成一个模块,同时
对涉及保留字的(不管大小写)相类似的标识符最好不用。