数字电路课程设计之超前进位加法器
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Pi=Ai○+ Bi;
可以得到输出与进位表达
Gi=AiBi;
Si=Pi○+ Ci;
Ci+1=Gi+PiCi; Gi 为进位产生,不管输入进位 Ci 为什么,只要 Ai 与 Bi 为 1 时,它将产生进位。Pi 称为进位传输,因为它 与从 Ci 到 Ci+1 的进位传输有关
C0 = 输入进位
C1 = G0 + P0C0
# MACRO ./mul_run_msim_rtl_verilog.do PAUSED at line 14
通过查阅资料将 Verilog 测试文件
Timsbench 文件没有实例化,修改为
修改后仿真 OK 参考文献: 1.数字设计与 Verilog 实现 M.Morris Mano 著 第五版
3.3 超前进位产生电路程序设计
module carry_look (C0,P0,G0,P1,G1,P2,G2,P3,G3,C1,C2,C3,C4);
input C0,P0,G0,P1,G1,P2,G2,P3,G3;
output C1,C2,C3,C4;
assign C1=G0|(P0&C0);
assign C2=G1|(P1&G0)|(P1&P0&C0);
C2 = G1 + P1C1 = G1 + P1(G0 + P0C0 ) = G1 + P1G0 + P1P0C0
C3 = G2 + P2C2 = G2 + P2 (G1 + P1C1) = G2 + P2G1 + P2P1G0 + P2P1P0C0
C4 = G3 + P3C3 = G3 + P3G2 + P3P2G1 + P3P2P1G0 + P3P2P1P0C0
input cin,a,b;
output s,cout;
wire
w1,w2,w3;
Half_Add U1 ( .s(w1),.c(w2),.a(a),.b(b));
Half_Add U2 ( .s(s),.c(w3),.a(w1),.b(cin));
or
U3 (cout,w3,w2);
endmodule
xor (S[0],Cin,v2);
xor (S[1],o1,v4);
xor (S[2],o2,v6);
xor (S[3],o3,v8);
endmodule
3.5 Verilog 测试平台语言编写
`timescale 1ns/1ps
module carry_look_add_tb();
reg [3:0] A,B;
instance name in instantiation of 'carry_look_add'.
#
#
Region: /carry_look_add_tb
# Error loading design
# Error: Error loading design
#
Pausing macro execution
四、RTL_view
4.1 整体结构
4.2 超前进位产生电路结构 4.3 半加器程序结构
五、仿真结果
对比仿真结果与理论计算,此实验成功
六、仿真问题解答
Modelsim 初次仿真错误提示为:
# Loading work.carry_look_add_tb
# ** Error: (vsim-3037) D:/fpga/mul_carry look ahead adder/prj/../rtl/carry_look_add_tb.v(8): Missing
input [3:0] A,B;
input
Cin;
output [3:0] S;
output
Cout;
wire v1,v2,v3,v4,v5,v6,v7,v8;
wire o1,o2,o3;
Half_Add H1(.a(A[0]),.b(B[0]),.s(v2),.c(v1));
Half_Add H2(.a(A[1]),.b(B[1]),.s(v4),.c(v3));
G1 P0 G0
生 电
C1
C0 路 C0
14 13 12 11 10
C4 C3 C2 C1 C0
CLA
Leabharlann Baidu
P3
1
C3
2
P2
1
C2
2
P1
1
C1
2
P0
1
C0
2
3
S3
3
S2
3
S1
3
S0
三、程序结构
3.1 半加器程序设计 module Half_Add (a,b,s,c); input a,b; output s,c; assign s=a ^ b; assign c=a & b; endmodule
C2
4
1
3
P0
2
G0 C0
带超前进位的四位加法器
B3
1
3
P3
A3
2
1
3
G3
2
B2
1
3
P2
A2
2
P3
1
G3
3
G2
P2
2
G2
P1
G1
B1
1
P0
3
P1
G0
A1
2
C0
1
3
G1
2
B0
1
3
P0
A0
2
1
3
G0
2
1
3
C1
2
U?
1 2 3 4 5 6 7 8 9
P3 G3
超 前
C4
P2 进 C3
G2 位
P1 产 C2
Half_Add H3(.a(A[2]),.b(B[2]),.s(v6),.c(v5));
Half_Add H4(.a(A[3]),.b(B[3]),.s(v8),.c(v7));
carry_look
CL1(.C0(Cin),.P0(v2),.G0(v1),.P1(v4),.G1(v3),.P2(v6),.G2(v5),.P3(v8),.G3(v7),.C1(o1),.C2(o2),.C3(o3),.C4(Cout));
3.2 全加器程序设计
//module Fall_Add (cin,a,b,s,cout);
// input cin,a,b;
// output s,cout;
// assign {cout,s}=a+b+cin;
//endmodule
//调用半加器实现全加器
module Fall_Add (cin,a,b,s,cout);
assign C3=G2|(P2&G1)|(P2&P1&G0)|(P2&P1&P0&C0);
assign C4=G3|(P3&G2)|(P3&P2&G1)|(P3&P2&P1&G0)|(P3&P2&P1&P0&C0);
endmodule
3.4 超前进位全加器程序设计
module carry_look_add(A,B,Cin,Cout,S);
一、设计目标
基于 Verilog 的四位超前进位加法器设计
使用 Verilog 语言实现四位超前进位加法器设计,并使用 Quartes 编写程序,使用 modelsin 进行仿真
验证设计
二、原理介绍
超前进位加法器(图为全加器)
Ai
1
3
Pi
Bi
2
1
3
Si
2
1 3 Gi
2
Ci
1
3
2
1
3
Ci +1
2
从上图可以得到以下表达式
reg
Cin;
wire[3:0] S;
wire
Cout;
carry_look_add CAL (.A(A),.B(B),.Cin(Cin),.Cout(Cout),.S(S)); initial begin
#10 A=4'd0;B=4'd0;Cin=0; #10 A=4'd11;B=4'd1;Cin=0; #10 A=4'd10;B=4'd12;Cin=0; #10 A=4'd11;B=4'd4;Cin=0; #100 $stop; end endmodule
注意 C4 并不需要等待 C3,实际上 C4,C3,C2,C1 同时传输 超前进位产生的电路逻辑图
guan
2019/5/27
tian liang
P3 G3
P2 G2
2
3
4
1
5
6
2 3
1 4 5
2
3
1
4
1 3
2
2 3
1 4 5
2
3
1
4
1 3
2
2
3
4
1
C4
5
6
2
3
1
C3
4
5
2
3
1
4
1
3
P1
2
G1
2
3
1