设计4位CLA加法器电路,并仿真测试
使用Quartus+modelsim完成本次设计
分析
对于超前进位加法器 (CLA)加法器,它不同于普通加法器。如果对于两个1024位的数字进行相加,那么普通的串行加法器因为只有算出 C x C_{x} Cx才能继续计算 C x + 1 C_{x+1} Cx+1,这会导致整体的效率非常低。如果使用超前进位加法器,那么所有的 C x C_{x} Cx会同时计算得到,每级进位由附加的组合电路产生,高位的运算不需要等待低位运算完成,大大加快了整体的运行速度。对于每一个进位 C x C_{x} Cx的计算方法如图提示可以轻松得到。
题目中也给出了端口定义,及输入a[3:0],b[3:0],c0;输出s[3:0],c4
代码实现
//4bit CLA
module CLA4(
input [3:0] a,
input [3:0] b,
input c0,
output [3:0] s,
output c4
);
wire [4:0] g,p,c;
assign c[0] = c0;
assign p = a^b;
assign g = a&b;
assign c[1] = g[0]|(p[0]&c[0]);
assign c[2] = g[1]|(p[1]&(g[0]|(p[0]&c[0])));
assign c[3] = g[2]|(p[2]&(g[1]|(p[1]&(g[0]|(p[0]&c[0])))));
assign c[4] = g[3]|(p[3]&(g[2]|(p[2]&(g[1]|(p[1]&(g[0]|(p[0]&c[0])))))));
assign s = p[3:0]^c[3:0];
assign c4 = c[4];
endmodule
Testbench
编写testbench对CLA4进行验证,选取部分值进行测试。
`timescale 1 ns/ 1 ns
module CLA4_vlg_tst();
// constants
// general purpose registers
// test vector input registers
reg [3:0] a;
reg [3:0] b;
reg c0;
// wires
wire c4;
wire [3:0] s;
// assign statements (if any)
CLA4 i1 (
// port map - connection between master ports and signals/registers
.a(a),
.b(b),
.c0(c0),
.c4(c4),
.s(s)
);
initial
begin
a = 4'b1111;
b = 4'b1111;
c0 = 1'b0;
#10 a = 4'b1010;
#10 c0 = 1'b1;
#10 b = 4'b0100;
#10 b = 4'b0101;
#10 b = 4'b0110;
#10 b = 4'b0111;
#50 $stop;
end
initial
$monitor($time,": a+b+cin=%b+%b+%b=%b%b",a,b,c0,c4,s);
endmodule
结果
对代码进行编译,查看RTL Viewer,观察电路结构如下图所示,通过对比,与题目中的提示相同
在modelsim中观察波形以及monitor输出如下图所示,结果显示
a
+
b
+
c
0
=
{
c
4
,
s
}
a+b+c0=\{c4,s\}
a+b+c0={c4,s},及实现了目标功能
文章来源:https://www.toymoban.com/news/detail-441027.html
下图位monitor输出结果,均为2进制表示最右边结果为
{
c
4
,
s
}
\{c4,s\}
{c4,s},及进位加4bit结果
文章来源地址https://www.toymoban.com/news/detail-441027.html
到了这里,关于Verilog设计4位CLA加法器电路,并仿真测试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!