1位全加法器单位延时

该实验详细介绍了使用Verilog HDL设计和仿真1位全加法器的过程,通过单位延时展示信号动作的时间顺序。实验涉及Add_full_unit_delay和Add_half_unit_delay两个模块,以及相应的测试代码。在Modelsim软件中完成编译和仿真,观察并理解信号的变化。

一,实验内容
Verilog HDL高级数字设计(第二版)P80页例题4.8实验1位全加法器单位延时的仿真
在这里插入图片描述

二,实验目的
能够采用单位延时能够显示信号动作的时间顺序

三,实验代码
module Add_full_unit_delay(output c_out,sum,input a,b,c_in);
wire w1,w2,w3;
Add_half_unit_delay M1(w2,w1,a,b);
Add_half_unit_delay M2(w3,sum,w1,c_in);
or #1 M3(c_out,w2,w3);
endmodule
module Add_half_unit_delay (output c_out,sum,input a,b);
xor #1 M1(sum,a,b);
and #1 M2(c_out,a,b);
endmodule

module Add_half_unit_delay (output c_out,sum,input a,b);
xor #1 M1(sum,a,b);
and #1 M2(c_out,a,b);
endmodule

测试代码
module tb_Add_full_unit_delay();
reg a, b, c_in;
wire sum, c_out;

Add_full_unit_delay fulladd(.c_out(c_out),.sum(sum),.a(a),.b(b),.c_in(c_in));

initial
begin
a=1’b0;b=1’b0;c_in=1’b0;
#5 a=1’b0;b=1’b0;c_in=1’b0;
#5 a=1’b0;b=1’b1;c_in=1’b0;
#5 a=1’b1;b=1’b1;c_in=1’b0;
#5 a=1’b1;b=1’b0;c_in=1’b0;
#5 a=1’b0;b=1’b0;c_in=1’b1;
#5 a=1’b0;b=1’b1;c_in=1’b1;
#5 a=1’b1;b=1’b1;c_in=1’b1;
#5 a=1’b1;b=1’b0;c_in=1’b1;
#20 $stop;
end

endmodule

四,实验过程
1.打开modelsim软件
2.选择文件file,新建new,工程project,如图
在这里插入图片描述

3.接着会弹出这个对话框,命名为“work”,点击“OK”,如图
在这里插入图片描述

4.选择创造一个新文件(Create New File)把文件名输入到对话框中“Add_full_unit_delay”,选择仿真途径为Verilog,点击“OK”,关闭对话框,如图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.双击文件,输入代码,剩余的两个文件进行一样的操作,如图
在这里插入图片描述

6.保存代码后,开始进行编译,看代码是否错误,点击菜单栏中的编译按钮“compile”,如图
在这里插入图片描述

7.编译后,如果代码正确,左下角就会出现绿色的提示;反之,就会是红色的警告,接着就开始仿真,点击菜单栏中的仿真按钮“simulate”,如图
在这里插入图片描述在这里插入图片描述

8.点击仿真后,会出现如下对话框,找到创建的文件work,选择要编译的文件Add_full_unit_delay,点击OK,如图
在这里插入图片描述

9.编译成功后,选择测试文件,点击右键,选择添加波形Add Wave,如图
在这里插入图片描述

10.点击Run-ALL,点击OK,如图
在这里插入图片描述
在这里插入图片描述
11.实验截屏
在这里插入图片描述

五,实验视频
链接:https://www.bilibili.com/video/BV1eb4y1C7Kr?share_source=copy_web

欢迎前往哔哩哔哩观看视频讲解

### 32加法器的时间延迟特性和计算方法 在数字电路设计中,时间延迟一个非常重要的参数,它直接影响到系统的性能和运行速度。对于一个32加法器而言,其时间延迟主要由以下几个因素决定: #### 1. 加法器结构的影响 不同的加法器架构会对时间延迟产生显著影响。常见的加法器类型包括串行进加法器(Ripple Carry Adder)、超前进加法器(Carry Lookahead Adder),以及条件求和加法器(Conditional Sum Adder)。 - **串行进加法器**:由于每一的输出都依赖于前一的进信号,因此总传播延迟为 \(n \times t_{pd}\),其中 \(t_{pd}\) 是单个全加器单元的传播延迟[^2]。 - **超前进加法器**:通过减少进链路中的逻辑级数来降低整体延迟。这种架构可以大幅缩短关键路径上的延迟。 #### 2. 关键路径分析 在一个典型的32加法器中,最长的关键路径通常是进链路。如果采用的是串行进方式,则每一级都需要等待上一级完成才能继续处理下一级的数据。这会导致较高的累积延迟。然而,在更先进的架构中,比如超前进加法器,可以通过并行化的方式提前计算部分进值,从而有效减小延时[^3]。 #### 3. 技术实现细节 实际的技术实现也会对时间延迟造成一定影响。例如: - 使用更快的晶体管技术或者优化后的门电路能够进一步改善性能; - 工艺节点越先进(如7nm相比28nm),单位面积内的电容负载更低,开关速度更快,因而整个加法器的工作频率得以提升。 以下是基于上述理论的一个简单Python模拟程序用于估算不同类型的加法器可能产生的最大时间延迟情况: ```python def calculate_delay(add_type='ripple', num_bits=32, gate_delay=0.1): """ Estimate the maximum propagation delay of an n-bit adder. Parameters: add_type (str): Type of adder ('ripple' or 'lookahead'). num_bits (int): Number of bits in the adder. gate_delay (float): Delay per logic gate in nanoseconds. Returns: float: Maximum estimated propagation delay in nanoseconds. """ if add_type == 'ripple': total_delay = num_bits * gate_delay elif add_type == 'lookahead': levels = int((num_bits / 4).bit_length()) # Log base 2 approximation total_delay = levels * gate_delay + 2 * gate_delay # Additional terms account for sum generation etc. else: raise ValueError("Unsupported adder type") return round(total_delay, 2) print(f'Ripple carry adder delay: {calculate_delay("ripple", 32)} ns') print(f'Look-ahead carry adder delay: {calculate_delay("lookahead", 32)} ns') ``` 此脚本定义了一个函数`calculate_delay()`用来根据不同种类的加法器估计它们的最大传播延迟,并分别打印出了两种常见形式的结果作为对比参考。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值