module homework_1(
clk,rst_n,a,b,sum
);
input clk;
input rst_n;
input[7:0] a;
input[7:0] b;
output reg[8:0] sum;
always@(posedge clk or negedge rst_n)
if(!rst_n)begin
sum <= 9'b0;
end else begin
sum <= {a[7],a} + {b[7],b};
end
endmodule
/*
犯的错误
if(a[7] == 0 && b[7] == 0)begin
sum <= {1'b0,{1'b0,a[6:0]} + {1'b0,b[6:0]}};
end
if(a[7] == 1 && b[7] == 1)begin
sum <= {1'b1,{1'b0,a[6:0]} + {1'b0,b[6:0]}};
end
if(a[7] == 1 && b[7] == 0)begin
if(a[6:0] > b[6:0])
sum <= {1'b0,~{{1'b0,a[6:0]} + {1'b0,b[6:0]}} + 1};
else
sum <= {0'b0,{1'b0,b[6:0]} + {1'b0,~a[6:0]+1}};
end
if(a[7] == 0 && b[7] == 1)begin
if(a[6:0] > b[6:0])
else
sum <= {0'b0,{1'b0,a[6:0]} + {1'b0,~b[6:0]+1}};
sum <= {1'b0,{1'b0,~b[6:0]+1} + {1'b0,a[6:0]}};
end
其实直接扩张一个符号位就行
*/
module tb_homework_1;
reg clk;
reg rst_n;
reg[7:0]a;
reg[7:0]b;
wire[8:0]sum;
homework_1 t1(
.clk(clk),
.rst_n(rst_n),
.a(a),
.b(b),
.sum(sum)
);
initial clk = 1;
always #(`clock_period/2) clk = ~clk;
initial begin
rst_n = 1'b0;
#(`clock_period * 20);
rst_n = 1'b1;
repeat(20) #(`clock_period * 20)begin
a = $random;
b = $random;
end
$stop;
end
endmodule