blob: 2dc2bb08112fecf3972c214403ea357e647619c2 [file] [log] [blame]
// DEFINES
`define BITS 32 // Bit width of the operands
module ode(clock,
reset,
select,
h,
half,
y_pi_in,
t_pi_in,
y_pi_out,
t_pi_out
);
// SIGNAL DECLARATIONS
input clock;
input reset;
input select;
input [`BITS-1:0] h;
input [`BITS-1:0] half;
input [`BITS-1:0] y_pi_in;
input [`BITS-1:0] t_pi_in;
output [`BITS-1:0] y_pi_out;
output [`BITS-1:0] t_pi_out;
output [7:0] x1_control;
wire [`BITS-1:0] x1;
wire [`BITS-1:0] sub2;
wire [`BITS-1:0] x3;
wire [`BITS-1:0] add4;
wire [`BITS-1:0] add5;
wire [`BITS-1:0] y_pi;
wire [`BITS-1:0] t_pi;
reg [`BITS-1:0] t_reg1;
reg [`BITS-1:0] t_reg2;
reg [`BITS-1:0] t_reg3;
reg [`BITS-1:0] t_reg4;
reg [`BITS-1:0] t_reg5;
reg [`BITS-1:0] t_reg6;
reg [`BITS-1:0] t_reg7;
reg [`BITS-1:0] t_reg8;
reg [`BITS-1:0] t_reg9;
reg [`BITS-1:0] t_reg10;
reg [`BITS-1:0] t_reg11;
reg [`BITS-1:0] t_reg12;
reg [`BITS-1:0] y_pi_reg1;
reg [`BITS-1:0] y_pi_reg2;
reg [`BITS-1:0] y_pi_reg3;
reg [`BITS-1:0] y_pi_reg4;
reg [`BITS-1:0] y_pi_reg5;
reg [`BITS-1:0] y_pi_reg6;
reg [`BITS-1:0] y_pi_reg7;
reg [`BITS-1:0] y_pi_reg8;
reg [`BITS-1:0] y_pi_reg9;
reg [`BITS-1:0] y_pi_reg10;
reg [`BITS-1:0] y_pi_reg11;
reg [`BITS-1:0] y_pi_reg12;
wire [`BITS-1:0] y_pi_out;
reg [`BITS-1:0] y_pi_out_reg;
wire [`BITS-1:0] t_pi_out;
// ASSIGN STATEMENTS
assign y_pi = select ? y_pi_in : add4;
assign t_pi = select ? t_pi_in : t_reg1;
//assign x1 = h * half;
wire [7:0] x1_control;
fpu_mul x1_mul
(
.clk(clock),
.opa(h),
.opb(half),
.out(x1),
.control(x1_control)
);
//assign sub2 = t_pi - y_pi;
wire [7:0] sub2_control;
fpu_add sub2_add
(
.clk(clock),
.opa(t_pi),
.opb(y_pi),
.out(sub2),
.control(sub2_control)
);
//assign x3 = x1 * sub2;
wire [7:0] x3_control;
fpu_mul x3_mul
(
.clk(clock),
.opa(x1),
.opb(sub2),
.out(x3),
.control(x3_control)
);
//assign add4 = y_pi_reg1 + x3;
wire [7:0] add4_control;
fpu_add add4_add
(
.clk(clock),
.opa(y_pi_reg12),
.opb(x3),
.out(add4),
.control(add4_control)
);
//assign add5 = h + t_pi;
wire [7:0] add5_control;
fpu_add add5_add
(
.clk(clock),
.opa(h),
.opb(t_pi),
.out(add5),
.control(add5_control)
);
//assign y_pi_out = add4;
assign y_pi_out = y_pi_out_reg;
assign t_pi_out = t_reg12;
always @(posedge clock)
begin
y_pi_out_reg <= add4;
t_reg1 <= add5;
t_reg2 <= t_reg1;
t_reg3 <= t_reg2;
t_reg4 <= t_reg3;
t_reg5 <= t_reg4;
t_reg6 <= t_reg5;
t_reg7 <= t_reg6;
t_reg8 <= t_reg7;
t_reg9 <= t_reg8;
t_reg10 <= t_reg9;
t_reg11 <= t_reg10;
t_reg12 <= t_reg11;
y_pi_reg1 <= y_pi;
y_pi_reg2 <= y_pi_reg1;
y_pi_reg3 <= y_pi_reg2;
y_pi_reg4 <= y_pi_reg3;
y_pi_reg5 <= y_pi_reg4;
y_pi_reg6 <= y_pi_reg5;
y_pi_reg7 <= y_pi_reg6;
y_pi_reg8 <= y_pi_reg7;
y_pi_reg9 <= y_pi_reg8;
y_pi_reg10 <= y_pi_reg9;
y_pi_reg11 <= y_pi_reg10;
y_pi_reg12 <= y_pi_reg11;
end
endmodule