// DEFINES | |
`define BITS 32 // Bit width of the operands | |
module mm3(clock, | |
reset, | |
a1, | |
a2, | |
a3, | |
b1, | |
b2, | |
b3, | |
out | |
); | |
// SIGNAL DECLARATIONS | |
input clock; | |
input reset; | |
input [`BITS-1:0] a1; | |
input [`BITS-1:0] a2; | |
input [`BITS-1:0] a3; | |
input [`BITS-1:0] b1; | |
input [`BITS-1:0] b2; | |
input [`BITS-1:0] b3; | |
output [`BITS-1:0] out; | |
wire [`BITS-1:0] x1; | |
wire [`BITS-1:0] x2; | |
wire [`BITS-1:0] x3; | |
wire [`BITS-1:0] add4; | |
wire [`BITS-1:0] add5; | |
reg [`BITS-1:0] x3_reg1; | |
reg [`BITS-1:0] x3_reg2; | |
reg [`BITS-1:0] x3_reg3; | |
reg [`BITS-1:0] x3_reg4; | |
reg [`BITS-1:0] x3_reg5; | |
reg [`BITS-1:0] x3_reg6; | |
wire [`BITS-1:0] out; | |
// ASSIGN STATEMENTS | |
//assign x1 = a1 * b1; | |
wire [7:0] x1_control; | |
fpu_mul x1_mul | |
( | |
.clk(clock), | |
.opa(a1), | |
.opb(b1), | |
.out(x1), | |
.control(x1_control) | |
); | |
//assign x2 = a2 * b2; | |
wire [7:0] x2_control; | |
fpu_mul x2_mul | |
( | |
.clk(clock), | |
.opa(a2), | |
.opb(b2), | |
.out(x2), | |
.control(x2_control) | |
); | |
//assign x3 = a3 * b3; | |
wire [7:0] x3_control; | |
fpu_mul x3_mul | |
( | |
.clk(clock), | |
.opa(a3), | |
.opb(b3), | |
.out(x3), | |
.control(x3_control) | |
); | |
//assign add4 = x1 + x2; | |
wire [7:0] add4_control; | |
fpu_add add4_add | |
( | |
.clk(clock), | |
.opa(x1), | |
.opb(x2), | |
.out(add4), | |
.control(add4_control) | |
); | |
//assign out = add4 + x3_reg5; | |
wire [7:0] out_control; | |
fpu_add out_add | |
( | |
.clk(clock), | |
.opa(add4), | |
.opb(x3_reg6), | |
.out(out), | |
.control(out_control) | |
); | |
always @(posedge clock) | |
begin | |
x3_reg1 <= x3; | |
x3_reg2 <= x3_reg1; | |
x3_reg3 <= x3_reg2; | |
x3_reg4 <= x3_reg3; | |
x3_reg5 <= x3_reg4; | |
x3_reg6 <= x3_reg5; | |
end | |
endmodule | |