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)— 组合电路的设计

### Verilog HDL 结构化建模选择题及相关知识点 #### 一、Verilog HDL结构化建模概述 Verilog HDL 是一种用于设计电子系统的硬件描述语言,支持多种建模方式,其中 **结构化建模** 是通过模块实例化来实现复杂电路的一种方法。它允许将复杂的电路划分为多个子模块,并通过端口连接这些子模块完成整体设计。 以下是几个常见的关于 Verilog HDL 结构化建模的选择题: --- #### 二、选择题示例 1. **下列哪一项不是 Verilog HDL 结构化建模的特点?** - A. 支持模块重用 - B. 提高设计的可读性和维护性 - C. 只能用于组合逻辑电路的设计 - D. 使用模块实例化技术 正确答案:C[^5] 2. **在 Verilog HDL 中,以下哪种语法用于实例化一个名为 `adder` 的模块?假设该模块具有输入端口 `a`, `b` 和输出端口 `sum`。** - A. `module adder(a, b, sum); ... endmodule` - B. `wire a, b, sum; assign sum = a + b;` - C. `adder u_adder (.a(a), .b(b), .sum(sum));` - D. `always @(a or b) begin sum = a + b; end` 正确答案:C[^6] 3. **以下哪个选项最能体现 Verilog HDL 结构化建模的优势?** - A. 减少代码量并提高效率 - B. 实现更精确的时间延迟控制 - C. 更适合模拟信号处理 - D. 增加了设计的复杂度 正确答案:A[^7] 4. **在一个基于 FPGA 的设计中,如果需要使用 Cyclone IV 芯片中的 LAB(Logic Array Block),那么以下说法正确的是哪一个?** - A. 每个 LAB 包含 8 个 LE(Logic Elements) - B. 每个 LE 包括一个 LUT 和一个不可配置寄存器 - C. 每个 LAB 包含 16 个 LE,每个 LE 包括一个 LUT 和一个可配置寄存器 - D. LAB 主要用于存储数据而非逻辑运算 正确答案:C[^3] 5. **在 Verilog HDL 设计流程中,以下哪些阶段属于典型的开发过程?** - A. 图形输入与 HDL 文本输入 - B. 综合与时序仿真 - C. 编程下载与硬件测试 - D. 所有上述选项均包括 正确答案:D[^4] --- #### 三、代码示例 下面是一个简单的 Verilog HDL 结构化建模的例子,展示如何通过模块实例化构建一个多级全加器: ```verilog // 定义单比特全加器模块 module full_adder ( input wire a, input wire b, input wire cin, output reg sum, output reg cout ); always @(*) begin {cout, sum} = a + b + cin; end endmodule // 多位全加器模块 module multi_bit_adder #(parameter WIDTH=4)( input wire [WIDTH-1:0] a, input wire [WIDTH-1:0] b, input wire cin, output wire [WIDTH-1:0] sum, output wire cout ); wire [WIDTH:0] carry; assign carry[0] = cin; genvar i; generate for (i = 0; i < WIDTH; i = i + 1) begin : fa_inst full_adder fa_i ( .a(a[i]), .b(b[i]), .cin(carry[i]), .sum(sum[i]), .cout(carry[i+1]) ); end endgenerate assign cout = carry[WIDTH]; endmodule ``` 此代码展示了如何利用模块实例化的方式创建多位全加器,体现了结构化建模的核心思想。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值