91 lines
1.3 KiB
Verilog
91 lines
1.3 KiB
Verilog
////////////////////////////////////////
|
|
// //
|
|
// Synchronized adder benchmark //
|
|
// //
|
|
////////////////////////////////////////
|
|
|
|
module sync_4bits_add(
|
|
clk,
|
|
rst,
|
|
a0,
|
|
a1,
|
|
a2,
|
|
a3,
|
|
b0,
|
|
b1,
|
|
b2,
|
|
b3,
|
|
cin,
|
|
sumout0,
|
|
sumout1,
|
|
sumout2,
|
|
sumout3,
|
|
cout);
|
|
|
|
input clk;
|
|
input rst;
|
|
input a0;
|
|
input a1;
|
|
input a2;
|
|
input a3;
|
|
input b0;
|
|
input b1;
|
|
input b2;
|
|
input b3;
|
|
input cin;
|
|
output sumout0;
|
|
output sumout1;
|
|
output sumout2;
|
|
output sumout3;
|
|
output reg cout;
|
|
|
|
wire[3:0] a;
|
|
wire[3:0] b;
|
|
reg[3:0] sumout;
|
|
|
|
reg[3:0] reg_a;
|
|
reg[3:0] reg_b;
|
|
reg reg_cin;
|
|
wire[4:0] int_sum;
|
|
|
|
assign a[3] = a3;
|
|
assign a[2] = a2;
|
|
assign a[1] = a1;
|
|
assign a[0] = a0;
|
|
assign b[3] = b3;
|
|
assign b[2] = b2;
|
|
assign b[1] = b1;
|
|
assign b[0] = b0;
|
|
assign sumout3 = sumout[3];
|
|
assign sumout2 = sumout[2];
|
|
assign sumout1 = sumout[1];
|
|
assign sumout0 = sumout[0];
|
|
|
|
assign int_sum = reg_a + reg_b + reg_cin;
|
|
|
|
always@(posedge clk or posedge rst) begin
|
|
if(rst) begin
|
|
reg_a <= 4'h0;
|
|
reg_b <= 4'h0;
|
|
reg_cin <= 1'h0;
|
|
end
|
|
else begin
|
|
reg_a <= a;
|
|
reg_b <= b;
|
|
reg_cin <= cin;
|
|
end
|
|
end
|
|
|
|
always@(posedge clk or posedge rst) begin
|
|
if(rst) begin
|
|
sumout <= 4'h0;
|
|
cout <= 1'h0;
|
|
end
|
|
else begin
|
|
sumout <= int_sum[3:0];
|
|
cout <= int_sum[4];
|
|
end
|
|
end
|
|
|
|
endmodule
|