Verilog学习之路(5)— Verilog HDL的结构化建模

Verilog HDL的结构化建模

一、前言

结构描述方式就是将硬件电路描述成一个分级子模块系统,通过逐层调用这些模块构成功能复杂的数字逻辑电路和系统的一种描述方式。根据所调用子模块的不同抽象级别,可以将模块的结构描述方式分成如下三类:

  1. 模块级建模:通过调用由用户设计生成的低级子模块来对硬件电路结构进行说明,这种情况下由低级模块的实例组成。
  2. 门级建模:通过调用Verilog HDL内部的基本门级元件来对硬件电路的结构进行说明,这种情况下模块将由基本门级元件的实例组成。
  3. 开关级建模:通过调用Verilog HDL内部的基本开关元件来对硬件电路的结构进行说明,这种情况下模块将由基本开关级元件的实例组成。

二、 模块级建模

如下所示,我们可以先定义一个半加器模块,然后通过调用半加器来构成一个全加器

module halfadder(a, b, s, c);			// 半加器模块
	input a,b;
	output c,s;
	
	assign s = a ^ b;
	assign c = a & b;
	
endmodule

module fulladder(p, q, ci, co, sum);	// 全加器模块
	input p,q,ci;
	output co,sum;
	wire w1,w2,w3;
	
	halfadder u1(p, q, w1, w2);
	halfadder u2(ci, w1, sum, w3);
	
	assign co = w2 | w3;
	
endmodule

经过综合后得到的电路图如下所示
在这里插入图片描述

三、 门级建模

Verilog HDL常用的内置门级元件如下
在这里插入图片描述
多输入门元件调用的语法格式如下:

	元件名 <实例名> ( <输出端口>, <输入端口1>, <输入端口2>, ..., <输入端口n> )

例如:

	and and1(out, in1, in2);
	or  or2(out, a, b, c, d);
	xor x1(xout, p1, p2, p3, p4);

多输出门元件调用的语法格式如下:

	元件名 <实例名> ( <输出端口1>, <输出端口2>, ..., <输入端口n>, <输入端口> )

例如:

	not not1(out1, out2, in);
	buf buf1(out1, out2, out3, in);

三态门元件调用的语法格式如下:

	元件名 <实例名> ( <数据输出端口>, <数据输入端口>, <控制端口> )

例如:

	bufif1 bf1(bus, mem, enable);
	bufif0 bf0(out1, in1, ctrl);
	notif1 nt1(out, in, ctrl);
	notif0 nt0(addr, abus, select);

如下为调用门级单元实现的2-4线译码器

module decoder2_4(in0, in1, en, out0, out1, out2, out3);
	output out0, out1, out2, out3;
	input in0, in1, en;
	wire w1,w2;
	not u1(w1, in0),
		u2(w2, in1);
	nand u3(out0, en, w1, w2),
		 u4(out1, en, w1, in1),
		 u5(out2, en, in0, w2),
		 u6(out3, en, in0, in1);
endmodule

经过综合后得到的电路图如下所示
在这里插入图片描述

四、 开关级建模

如下为Verilog HDL提供的开关级元器件
在这里插入图片描述
2输入与非门的Verilog HDL程序代码如下所示

module nnand2(a, b, y);
	input a,b;
	output y;
	supply0 Gnd;	// supply0为内部参量,表示低电平
	supply1 Vdd;	// supply1为内部参量,表示高电平
	wire im1;

	pmos g1(y, Vdd, a);
	pmos g2(y, Vdd, b);
	nmos g3(y, im1, a);
	nmos g4(im1, Gnd, b);
endmodule

然后我们编写测试模块如下所示


module tb;
	reg a,b;
	wire out;
	
	nnand2 u1(a, b, out);

	initial begin
		a = 0; b = 0;
		#100;
		a = 0; b = 1;
		#100;
		a = 1; b = 0;
		#100;
		a = 1; b = 1;
		#100;
	end

endmodule

可得仿真波形如下所示,可以看出,其逻辑关系为与非门
在这里插入图片描述
其cmos电路如图所示
在这里插入图片描述

五、附录

上一篇:Verilog学习之路(4)— Verilog HDL的程序设计语句
下一篇:Verilog学习之路(6)— 组合电路的设计

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值