From e64c18d0e30c33fe4609c881620fa937da7b8ce3 Mon Sep 17 00:00:00 2001 From: Michael Abed Date: Sun, 2 Dec 2012 12:13:10 -0500 Subject: make git repo --- verilog/S2.v | 116 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100755 verilog/S2.v (limited to 'verilog/S2.v') diff --git a/verilog/S2.v b/verilog/S2.v new file mode 100755 index 0000000..5c142b3 --- /dev/null +++ b/verilog/S2.v @@ -0,0 +1,116 @@ +`timescale 1ns / 1ps +////////////////////////////////////////////////////////////////////////////////// +// Company: +// Engineer: +// +// Create Date: 23:49:19 10/21/2012 +// Design Name: +// Module Name: Stage2 +// Project Name: +// Target Devices: +// Tool versions: +// Description: +// +// Dependencies: +// +// Revision: +// Revision 0.01 - File Created +// Additional Comments: +// +////////////////////////////////////////////////////////////////////////////////// +module Stage2( + operand1, + operand2, + wout, + alu_op_out, + op_type, // R or I instruction + alu_op_in, + data1, + data2, + immediate, + win, + clk, + reset +); + +parameter BITS=32; +parameter RSELW=5; + +output [BITS-1:0] operand1, operand2; +output [2:0] alu_op_out; +output [RSELW-1:0] wout; +input op_type; +input [2:0] alu_op_in; +input [BITS-1:0] data1, data2; +input [15:0] immediate; +input [RSELW-1:0] win; +input clk, reset; + + +wire [BITS-1:16] sign_extend = immediate[15] ? ~0 : 0; +wire [BITS-1:0] immw; +assign immw = {sign_extend,immediate}; + +wire [BITS-1:0] op2w; + +nbit_reg #(BITS) o1reg( + .nD(data1), + .nQ(operand1), + .Write(1'b1), + .Clk(clk), + .Reset(reset) +); + +wire [BITS-1:0] d2wo, imw0; +nbit_reg #(BITS) o2reg( + .nD(data2), + .nQ(d2wo), + .Write(1'b1), + .Clk(clk), + .Reset(reset) +); + +nbit_reg #(BITS) imreg( + .nD(immw), + .nQ(imw0), + .Write(1'b1), + .Clk(clk), + .Reset(reset) +); + +nbit_reg #(3) opreg( + .nD(alu_op_in), + .nQ(alu_op_out), + .Write(1'b1), + .Clk(clk), + .Reset(reset) +); + +nbit_reg #(RSELW) wreg( + .nD(win), + .nQ(wout), + .Write(1'b1), + .Clk(clk), + .Reset(reset) +); + +nbit_reg #(1) treg( + .nD(op_type), + .nQ(op_typew), + .Write(1'b1), + .Clk(clk), + .Reset(reset) +); + +generate +genvar i; +for (i = 0; i < BITS; i = i + 1) begin:mux + nbit_mux#(1) mux( + .MuxIn({imw0[i],d2wo[i]}), + .MuxOut(operand2[i]), + .MuxSel(op_typew) + ); +end +endgenerate + +endmodule -- cgit v1.2.3