代码:
module RegisteredAdder(a,b,A,B,COUT,S,CLK,RST);
input[3:0] A,B;
input CLK,RST;
output COUT;
output[3:0] S,a,b;
reg[3:0] Q1,Q2,S;
reg COUT;
wire Q4;
wire[3:0] Q3;
wire[4:0] DATA;
assign a=A;
assign b=B;
assign DATA=Q1+Q2;
assign Q3=DATA[3:0];
assign Q4=DATA[4];
always@(posedge CLK or negedge RST)
begin
if(!RST) Q1<=0;
else Q1<=A[3:0]; end
always@(posedge CLK or negedge RST)
begin
if(!RST) Q2<=0;
else Q2<=B[3:0]; end
always@(posedge CLK or negedge RST)
begin
if(!RST) S<=0;
else S<=Q3[3:0]; end
always@(posedge CLK or negedge RST)
begin
if(!RST) COUT<=0;
else COUT<=Q4; end
endmodule
RTL:
仿真及硬件测试都通过