verilog仿真——超前进位全加器74HC283

任务

实现74HC138的程序设计与仿真

思路

如果只描述全加器的作用结果是比较容易的,难点在于将超前进位的特性描述出来.根据课本中的电路图,可以分两步进行:

  • 描述超前进位电路carry-lookahead circuit
  • 超前进位加法器调用超前进位电路
《数电》康华光P194

超前进位电路

程序设计

//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

波形图
打印结果

1 comment

  1. Useful information. Lucky me I discovered your site
    accidentally, and I am surprised why this accident didn’t took place earlier!
    I bookmarked it.

Leave a comment

Your email address will not be published. Required fields are marked *