超前进位加法器求问
超前进位加法器(没有cin),为什么这样设计结果有些正确有些错误?
module carry_adder(
input [8:1] x,
input [8:1] y,
output reg [8:1] s,
output reg carry_out
);
reg [4:0] i;
reg [8:1] p;
reg [8:1] G;
reg [8:0] c;
assign carry_out=c[8];
always @(*)
begin
c[0]=0;
for(i=1;i<=8;i=i+1)
begin
p=x^y;
G=x&y;
c=(p&c[i-1])|G;
s=p^c;
end
end
endmodule
仿真结果:
0X= 14 Y= 12 S= 14 carry_out=0
50X= 1 Y= 8 S= 9 carry_out=0
100X= 6 Y= 2 S= 2 carry_out=0
150X= 5 Y= 19 S= 17 carry_out=0
200X= 9 Y= 16 S= 25 carry_out=0
250X= 0 Y= 17 S= 17 carry_out=0
300X= 0 Y= 7 S= 7 carry_out=0
350X= 19 Y= 0 S= 19 carry_out=0
400X= 10 Y= 15 S= 11 carry_out=0
450X= 15 Y= 6 S= 7 carry_out=0
500X= 5 Y= 15 S= 5 carry_out=0
550X= 18 Y= 6 S= 18 carry_out=0
600X= 19 Y= 19 S= 19 carry_out=0
650X= 11 Y= 8 S= 11 carry_out=0
700X= 7 Y= 16 S= 23 carry_out=0
750X= 19 Y= 1 S= 17 carry_out=0
800X= 14 Y= 16 S= 30 carry_out=0
850X= 15 Y= 12 S= 15 carry_out=0
900X= 0 Y= 6 S= 6 carry_out=0
950X= 19 Y= 0 S= 19 carry_out=0
$finish called from file "carry_outtb.v", line 41.
$finish at simulation time 1101000
V C S S i m u l a t i o n R e p o r t
Time: 1101000 ps
CPU Time: 0.540 seconds; Data structure size: 0.0Mb
