samp/pipelined_alu/hw5_unit.v in ruby-vpi-16.0.1 vs samp/pipelined_alu/hw5_unit.v in ruby-vpi-17.0.0
- old
+ new
@@ -1,163 +1,133 @@
/*
Copyright 2006 Suraj N. Kurapati
See the file named LICENSE for details.
*/
-`define WIDTH 32
-`define DATABITS 7
-`define OP_NOP 0
-`define OP_ADD 1
-`define OP_SUB 2
-`define OP_MULT 3
+module hw5_unit
+#(parameter WIDTH = 32,
+ parameter DATABITS = 7,
+ parameter OP_NOP = 0,
+ parameter OP_ADD = 1,
+ parameter OP_SUB = 2,
+ parameter OP_MULT = 3)
+( input clk,
+ input reset,
-module hw5_unit(
- input clk
- , input reset
+ input [DATABITS-1:0] in_databits,
+ input [WIDTH-1:0] a,
+ input [WIDTH-1:0] b,
+ input [1:0] in_op,
- // inputs
- , input [`DATABITS-1:0] in_databits
- , input [`WIDTH-1:0] a
- , input [`WIDTH-1:0] b
- , input [1:0] in_op
-
- // outputs
- , output reg [`WIDTH-1:0] res
- , output reg [`DATABITS-1:0] out_databits
- , output reg [1:0] out_op
+ output reg [WIDTH-1:0] res,
+ output reg [DATABITS-1:0] out_databits,
+ output reg [1:0] out_op
);
/* PHASE 0: perform the ALU operations */
// operation ID
- reg [`DATABITS-1:0] in_databits_phase0;
- reg [1:0] in_op_phase0;
+ reg [DATABITS-1:0] in_databits_phase0;
+ reg [1:0] in_op_phase0;
always @(*) begin
- in_databits_phase0 = in_databits;
- in_op_phase0 = in_op;
+ in_databits_phase0 = in_databits;
+ in_op_phase0 = in_op;
end
// addition
- reg [`WIDTH-1:0] add_result_phase0;
+ reg [WIDTH-1:0] add_result_phase0;
always @(*) begin
add_result_phase0 = a + b;
end
// subtraction
- reg [`WIDTH-1:0] sub_result_phase0;
+ reg [WIDTH-1:0] sub_result_phase0;
always @(*) begin
sub_result_phase0 = a - b;
end
// multiplication
- reg [`WIDTH-1:0] mul_result_phase0;
+ reg [WIDTH-1:0] mul_result_phase0;
always @(*) begin
mul_result_phase0 = a * b;
end
- // always @(posedge clk) begin
- // $display("in_databits_phase0 => %d", in_databits_phase0);
- // $display("in_op_phase0 => %d", in_op_phase0);
- // $display("add_result_phase0 => %d", add_result_phase0);
- // $display("sub_result_phase0 => %d", sub_result_phase0);
- // $display("mul_result_phase0 => %d", mul_result_phase0);
- // end
-
-
/* PHASE 1: delay the ALU results */
- reg [`DATABITS-1:0] in_databits_phase1;
- reg [1:0] in_op_phase1;
+ reg [DATABITS-1:0] in_databits_phase1;
+ reg [1:0] in_op_phase1;
- reg [`WIDTH-1:0] add_result_phase1;
- reg [`WIDTH-1:0] sub_result_phase1;
- reg [`WIDTH-1:0] mul_result_phase1;
+ reg [WIDTH-1:0] add_result_phase1;
+ reg [WIDTH-1:0] sub_result_phase1;
+ reg [WIDTH-1:0] mul_result_phase1;
always @(posedge clk) begin
in_databits_phase1 <= in_databits_phase0;
- in_op_phase1 <= in_op_phase0;
+ in_op_phase1 <= in_op_phase0;
- add_result_phase1 <= add_result_phase0;
- sub_result_phase1 <= sub_result_phase0;
- mul_result_phase1 <= mul_result_phase0;
+ add_result_phase1 <= add_result_phase0;
+ sub_result_phase1 <= sub_result_phase0;
+ mul_result_phase1 <= mul_result_phase0;
end
- // always @(posedge clk) begin
- // $display("in_databits_phase1 => %d", in_databits_phase1);
- // $display("in_op_phase1 => %d", in_op_phase1);
- // $display("add_result_phase1 => %d", add_result_phase1);
- // $display("sub_result_phase1 => %d", sub_result_phase1);
- // $display("mul_result_phase1 => %d", mul_result_phase1);
- // end
-
/* PHASE 2: delay the ALU results */
- reg [`DATABITS-1:0] in_databits_phase2;
- reg [1:0] in_op_phase2;
+ reg [DATABITS-1:0] in_databits_phase2;
+ reg [1:0] in_op_phase2;
- reg [`WIDTH-1:0] add_result_phase2;
- reg [`WIDTH-1:0] sub_result_phase2;
- reg [`WIDTH-1:0] mul_result_phase2;
+ reg [WIDTH-1:0] add_result_phase2;
+ reg [WIDTH-1:0] sub_result_phase2;
+ reg [WIDTH-1:0] mul_result_phase2;
always @(posedge clk) begin
in_databits_phase2 <= in_databits_phase1;
- in_op_phase2 <= in_op_phase1;
+ in_op_phase2 <= in_op_phase1;
- add_result_phase2 <= add_result_phase1;
- sub_result_phase2 <= sub_result_phase1;
- mul_result_phase2 <= mul_result_phase1;
+ add_result_phase2 <= add_result_phase1;
+ sub_result_phase2 <= sub_result_phase1;
+ mul_result_phase2 <= mul_result_phase1;
end
- // always @(posedge clk) begin
- // $display("in_databits_phase2 => %d", in_databits_phase2);
- // $display("in_op_phase2 => %d", in_op_phase2);
- // $display("add_result_phase2 => %d", add_result_phase2);
- // $display("sub_result_phase2 => %d", sub_result_phase2);
- // $display("mul_result_phase2 => %d", mul_result_phase2);
- // end
-
/* PHASE 3: produce the outputs */
- reg [`DATABITS-1:0] out_databits_next;
- reg [1:0] out_op_next;
- reg [`WIDTH-1:0] res_next;
+ reg [DATABITS-1:0] out_databits_next;
+ reg [1:0] out_op_next;
+ reg [WIDTH-1:0] res_next;
always @(*) begin
- if (reset) begin
- out_op_next = `OP_NOP;
- end else begin
+ if (reset)
+ out_op_next = OP_NOP;
+ else
out_op_next = in_op_phase2;
- end
out_databits_next = in_databits_phase2;
case (in_op_phase2)
- `OP_NOP:
+ OP_NOP:
res_next = 0;
- `OP_ADD:
+ OP_ADD:
res_next = add_result_phase2;
- `OP_SUB:
+ OP_SUB:
res_next = sub_result_phase2;
- `OP_MULT:
+ OP_MULT:
res_next = mul_result_phase2;
endcase
end
always @(posedge clk) begin
- res <= res_next;
- out_op <= out_op_next;
+ res <= res_next;
+ out_op <= out_op_next;
out_databits <= out_databits_next;
end
endmodule
-