verilog 4位16位任意位超前进位加法器
module add_4 (
input [3:0]a,
input [3:0]b,
input c_in,
output [3:0] sum,
output c_out
);
wire [3:0] c_tmp; full_adder i0 ( a[0], b[0], c_in, sum[0], c_tmp[0]);
full_adder i1 ( a[1], b[1], c_tmp[0], sum[1], c_tmp[1] );
full_adder i2 ( a[2], b[2], c_tmp[1], sum[2], c_tmp[2] );
full_adder i3 ( a[3], b[3], c_tmp[2], sum[3], c_tmp[3] );
assign c_out = c_tmp[3];
endmodule
Ci = AiBi + AiCi-1 + BiCi-1=AiBi + (Ai+Bi)Ci-1
令 Gi=Ai*Bi ; Pi=Ai+Bi 代入Ci =AiBi + (Ai+Bi)Ci-1
得 Ci=Gi+Gi*Ci-1
C1=G0 + P0·C0
C2=G1 + P1·C1 = G1 + P1·G0 + P1·P0 ▪C0
C3=G2 + P2·C2 = G2 + P2·G1 + P2·P1·G0 + P2·P1·P0·C0
C4=G3 + P3·C3 = G3 + P3·G2 + P3·P2·G1 + P3·P2·P1·G0 + P3·P2·P1·P0·C0
C_out=C4
module ahead_adder4
(
input cin,
input [3:0]A,
input [3:0]B,
input [3:0]G,
input [3:0]P,
output [3:0]S,
output cout
);wire [3:0]C;assign C[0]= G[0] | (cin&P[0]);
assign C[1]= G[1] | (P[1]&G[0]) | (P[1]&P[0]&cin);
assign C[2]= G[2] | (P[2]&G[1]) | (P[2]&P[1]&G[0]) | (P[2]&P[1]&P[0]&cin);
assign C[3]= G[3] | (P[3]&G[2]) | (P[3]&P[2]&G[1]) | (P[3]&P[2]&P[1]&G[0]) | (P[3]&P[2]&P[1]&P[0]&cin);assign S[0]=A[0]^B[0]^cin;
assign S[1]=A[1]^B[1]^C[0];
assign S[2]=A[2]^B[2]^C[1];
assign S[3]=A[3]^B[3]^C[2];
assign cout=C[3];endmodule
module ahead_adder
(
input [15:0]A,
input [15:0]B,
input CIN,
output reg [15:0]S,
output reg cout
);wire [15:0]G=A&B;
wire [15:0]P=A|B;
reg [3:0]cin;
wire cout1;task ahead_adder4;input cin;
input [3:0]A;
input [3:0]B;
input [3:0]G;
input [3:0]P;
output reg [3:0]S;
output reg cout;
reg [3:0]C;
begin
C[0]= G[0] | (cin&P[0]);
C[1]= G[1] | (P[1]&G[0]) | (P[1]&P[0]&cin);
C[2]= G[2] | (P[2]&G[1]) | (P[2]&P[1]&G[0]) | (P[2]&P[1]&P[0]&cin);
C[3]= G[3] | (P[3]&G[2]) | (P[3]&P[2]&G[1]) | (P[3]&P[2]&P[1]&G[0]) | (P[3]&P[2]&P[1]&P[0]&cin);S[0]=A[0]^B[0]^cin;
S[1]=A[1]^B[1]^C[0];
S[2]=A[2]^B[2]^C[1];
S[3]=A[3]^B[3]^C[2];
cout=C[3];
end
endtask
task ahead_carry;input cin;
input [15:0]G;
input [15:0]P;
output reg [3:0]cout;
reg [3:0]G2;
reg [3:0]P2;
beginG2[0]=G[3] | P[3]&G[2] | P[3]&P[2]&G[1] | P[3]&P[2]&P[1]&G[0];
G2[1]=G[7] | P[7]&G[6] | P[7]&P[6]&G[5] | P[7]&P[6]&P[5]&G[4];
G2[2]=G[11] | P[11]&G[10] | P[11]&P[10]&G[9] | P[11]&P[10]&P[9]&G[8];
G2[3]=G[15] | P[15]&G[14] | P[15]&P[14]&G[13] | P[15]&P[14]&P[13]&G[12];P2[0]=P[3]&P[2]&P[1]&P[0];
P2[1]=P[7]&P[6]&P[5]&P[4];
P2[2]=P[11]&P[10]&P[9]&P[8];
P2[3]=P[15]&P[14]&P[13]&P[12];cout[0]=G2[0] | (cin&P2[0]);
cout[1]=G2[1] | (P2[1]&G2[0]) | (P2[1]&P2[0]&cin);
cout[2]=G2[2] | (P2[2]&G2[1]) | (P2[2]&P2[1]&G2[0]) | (P2[2]&P2[1]&P2[0]&cin);
cout[3]=G2[3] | (P2[3]&G2[2]) | (P2[3]&P2[2]&G2[1]) | (P2[3]&P2[2]&P2[1]&G2[0]) | (P2[3]&P2[2]&P2[1]&P2[0]&cin);
end
endtaskalways@(*)
beginahead_carry(CIN,G[15:0],P[15:0],cin[3:0]);ahead_adder4 (CIN,A[3:0],B[3:0],G[3:0],P[3:0],S[3:0],cout1);//因为进位值实际上已经被算出来了,所以这个cout1就没有实际意义ahead_adder4 (cin[0],A[7:4],B[7:4],G[7:4],P[7:4],S[7:4],cout1);ahead_adder4 (cin[1],A[11:8],B[11:8],G[11:8],P[11:8],S[11:8],cout1);ahead_adder4 (cin[2],A[15:12],B[15:12],G[15:12],P[15:12],S[15:12],cout);//但是这个cout有实际意义,因为超前进位算出的是四个adder的低位进位值,没有算最后一个的高位进位,所以要保留
end
endmodule
verilog 4位16位任意位超前进位加法器相关推荐
- Verilog快速入门(8)—— 4bit超前进位加法器电路
Verilog快速入门 (1) 四选一多路器 (2)异步复位的串联T触发器 (3)奇偶校验 (4)移位运算与乘法 (5)位拆分与运算 (6)使用子模块实现三输入数的大小比较 (7)4位数值比较器电路 ...
- Verilog实现超前进位加法器
在CPU等对性能要求较高的电路中,一般都会采用超前进位加法器,因为超前进位加法器的延时相对来说比较小.下面讲述超前进位加法器的原理: 我们知道,一个三输入,二输出的全加器,其逻辑关系为 S=A⊕B⊕C ...
- 串行进位加法器与超前进位加法器 verilog
文章目录 串行进位加法器 半加器 全加器 任意位数串行进位加法器 tb 4bit超前进位加法器 Reference 串行进位加法器 半加器 module half_adder (input in1,i ...
- 超前进位加法器实验报告_16位超前进位加法器实验报告
一.实验目的 设计.验证并优化 16 位超前进位加法器的逻辑功能. 二.实验原理 1 . 1 位全加器原理 全加器的求和输出信号和进位信号,定义为输入变量 A . B . C 的两种组合布尔函 数: ...
- 32位进位选择加法器_超前进位加法器amp;行波进位加法器
超前进位加法器&行波进位加法器 八位超前进位加法器 原理 设计文件 综合电路 测试文件 仿真波形 八位行波进位加法器 原理 设计文件 测试文件 仿真波形 总结 八位超前进位加法器 原理 有学弟 ...
- 4位先行进位加法器_行波进位/超前进位加法器详解
行波进位加法器是串行执行的,其高位的运算要依赖低位的进位,所以当输入数据的位数较多时,会形成很大的延迟并可能成为芯片的关键路径. 采用超前进位加法器(也叫先行进位加法器)可以有效减小这种延迟.下面介绍 ...
- 原码一位乘法器设计_数字IC校招基础知识点复习(七)——超前进位加法器、Wallace树、Booth乘法器...
1.超前进位加法器 看了一些面经,提到会让你用基础的门搭加法器,因此首先得熟悉半加器,全加器等最基础的加法器才能理解之后的超前进位加法器,树型加法器等复杂的加法器. 半加器的输入为a,b,输出为结果s ...
- 串行进位加法器和超前进位加法器代码实现及性能对比
写在前面:要了解超前进位加法器的实现机制,参考超前进位加法器-郭天祥 代码实现 串行进位加法器 代码 adder_4bits.v module adder_4bits(a,b,cin,cout,sum ...
- 超前进位加法器 verilog代码
超前进位加法器(Carry LookAhead Adder) 设计思想 由于行波进位加法器具有明显的延迟,从图中可以看出延迟主要是由进位传播链引起的,因此如何可以快速得到每一位的进位信号是加速计算的关 ...
最新文章
- 哈哈,我的博客开通啦,欢迎光临~~~~~~~~~~~~
- java方法里执行两条sql_Java如何在数据库上执行多个SQL命令?
- 【python3的学习之路七】函数
- Asp.net使用代码修改配置文件的节点值
- 大创idea2018-03-30
- Bootstrap 环境安装
- Booting Android: bootloaders, fastboot and boot images
- mysql空洞数据,Mysql 表空间和 数据页空洞
- 深入理解DOM节点关系
- 二叉树相关知识及求深度的代码实现
- vivo手机系统升级后没有服务器,为什么安卓手机升级到了12GB还没有iPhone 4GB运行快呢?...
- 安全中心登录_放心使用instagram需要做到的5个信息安全设置
- c#定时备份mysql数据库_C# 定时备份数据库工具源码下载
- Unix 下获得 root权限
- Nugine: Rust 性能调优
- Floyd-Warshall算法过程中矩阵计算方法—十字交叉法
- 出现—passwd:Authentication token manipulation error—错误的解决办法
- js对象嵌套数组_使用角管过滤嵌套数组和对象的数组并突出显示结果
- 一个好强的mm写给男朋友的绝交信
- 论文画图——eps格式的图
热门文章
- Neo4j 操作与 py2neo 用法
- 派森python教程_Python系列教程一Python入门(一)
- 计算机类说课优秀模板,全国“xx杯”计算机类教师说课大赛一等奖作品说课精品模板(一).ppt...
- c语言中extem的作用,extern是什么意思?C语言中extern用法全解
- linux 查看网页命令行,命令行浏览网页命令
- 数据收集-抓包与反爬
- 首都电子商务平台和软件环境的建设
- 贝叶斯方法的思想基础
- 机器人学笔记(改进)
- 从整车控制器VCU模型入门simulink(4)