任务
实现74HC138的程序设计与仿真
思路
如果只描述全加器的作用结果是比较容易的,难点在于将超前进位的特性描述出来.根据课本中的电路图,可以分两步进行:
- 描述超前进位电路carry-lookahead circuit
- 超前进位加法器调用超前进位电路
超前进位电路
程序设计
//filename:carry_lookahead.v
module carry_lookahead(
input [3:0] P,G,
input C_1,
output reg [3:0] C
);
/*功能描述
超前进位电路
*/
/*端口描述
P,G:中间变量
P:A xor B
G:A and B
C_1:上一级的进位
C:进位
*/
always@(*)begin
C[0]=G[0]|(P[0]&C_1);
C[1]=G[1]|(P[1]&C[0]);
C[2]=G[2]|(P[2]&C[1]);
C[3]=G[3]|(P[3]&C[2]);
end
endmodule
仿真
//filename:tb_carry_lookahead.v
`timescale 1ns/1ns
module tb_carry_lookahead;
reg [3:0] P,G;
reg C_1;
wire [3:0] C;
//实例化 carry_lookahead
carry_lookahead carry_lookahead_inst(
.P(P),
.G(G),
.C_1(C_1),
.C(C)
);
initial begin
P=4'b0000;G=4'b0000;C_1=0;
#1
P=4'b0000;G=4'b0000;C_1=1;
#1
P=4'b0001;G=4'b0000;C_1=1;
#1
P=4'b0001;G=4'b0001;C_1=1;
#1
P=4'b0011;G=4'b0001;C_1=1;
#1
P=4'b0011;G=4'b0011;C_1=1;
#1
P=4'b0111;G=4'b0011;C_1=1;
#1
P=4'b0111;G=4'b0111;C_1=1;
#1
P=4'b0111;G=4'b0111;C_1=1;
#1
P=4'b1111;G=4'b0111;C_1=1;
#1
P=4'b1111;G=4'b1111;C_1=1;
#1
;
end
endmodule
74HC238
程序设计
//filename:74HC283.v
module full_adder74HC283(
input [3:0] A,B,
input C_1,
output reg[3:0] S,
output reg CO
);
/*功能描述
超前进位全加器74HC283
*/
/*端口描述
A,B:待相加变量
C_1:上一级的进位
S:相加结果
CO:进位
*/
reg [3:0] P,G;
wire [3:0] C;
//实例化超前进位电路
carry_lookahead carry_lookahead_part(
.P(P),
.G(G),
.C_1(C_1),
.C(C)
);
always@(*)begin
P=A^B;
G=A&B;
CO=C[3];
S[3]=P[3]^C[2];
S[2]=P[2]^C[1];
S[1]=P[1]^C[0];
S[0]=P[0]^C_1;
end
endmodule
仿真
//filename:tb_74HC283.v
`timescale 1ns/1ns
module tb_74HC283;
reg [3:0] A,B;
reg C_1;
wire [3:0] S;
wire CO;
//实例化超前进位全加器74HC283
full_adder74HC283 full_adder74HC283_inst(
.A(A),
.B(B),
.C_1(C_1),
.S(S),
.CO(CO)
);
initial
$monitor($time,":\tC_1+A+B=%b+%h+%h\t CO=%b\tS=%h",C_1,A,B,CO,S);
initial begin
A=4'h0;B=4'h0;C_1=0;
#1
A=4'h0;B=4'h0;C_1=1;
#1
A=4'h1;B=4'h0;C_1=1;
#1
A=4'h1;B=4'h1;C_1=1;
#1
A=4'h5;B=4'ha;C_1=1;
#1
A=4'ha;B=4'ha;C_1=0;
#1
A=4'hf;B=4'ha;C_1=0;
#1
A=4'hf;B=4'hf;C_1=0;
#1
;
end
endmodule
Useful information. Lucky me I discovered your site
accidentally, and I am surprised why this accident didn’t took place earlier!
I bookmarked it.