Академический Документы
Профессиональный Документы
Культура Документы
////////////////////////////////////////////////////////////////////////////////
//
// Company:
// Engineer:
//
// Create Date:
17:39:54 01/30/2014
// Design Name:
// Module Name:
rf
// Project Name:
// Target Devices:
// Tool versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
////////////////////////////////////////////////////////////////////////////////
//
module rf (
// Outputs
read1data, read2data, err,
// Inputs
clk, rst, read1regsel, read2regsel, writeregsel, writedata, write
);
input
input
input
input
input
input
clk, rst;
[2:0] read1regsel;
[2:0] read2regsel;
[2:0] writeregsel;
[15:0] writedata;
write;
rst));
// send writedata to every In port of registers
assign in0 = writedata;
assign in1 = writedata;
assign in2 = writedata;
assign in3 = writedata;
assign in4 = writedata;
assign in5 = writedata;
assign in6 = writedata;
assign in7 = writedata;
// 3-8 decoder to generate temp_en
decoder_3to8 decoder_in(.A(writeregsel), .Y(tmp_en));
assign en = tmp_en & {8{write}};
// 16-bit 8-to-1 mux to generate read1data and read2data
mux_8to1_16bit mux_read1(.In0(out0), .In1(out1), .In2(out2), .In3(out3),
.In4(out4), .In5(out5), .In6(out6), .In7(out7),
.Sel(read1regsel), .Out(read1data));
mux_8to1_16bit mux_read2(.In0(out0), .In1(out1), .In2(out2), .In3(out3),
.In4(out4), .In5(out5), .In6(out6), .In7(out7),
.Sel(read2regsel), .Out(read2data));
// error signal
assign err = ~ (^tmp_en);
endmodule
assign inner_d = en ? d : q;
// instantiate DFF with inner_d being sent to d
dff dff_with_en(.q(q), .d(inner_d), .clk(clk), .rst(rst));
endmodule
// D-flipflop
module dff (q, d, clk, rst);
output
input
input
input
q;
d;
clk;
rst;
reg
state;
// 3 to 8 decoder
module decoder_3to8(A, Y);
input [2:0] A;
output [7:0] Y;
assign
assign
assign
assign
assign
assign
assign
assign
Y[0]
Y[1]
Y[2]
Y[3]
Y[4]
Y[5]
Y[6]
Y[7]
=
=
=
=
=
=
=
=
(A
(A
(A
(A
(A
(A
(A
(A
==
==
==
==
==
==
==
==
3'd0)?
3'd1)?
3'd2)?
3'd3)?
3'd4)?
3'd5)?
3'd6)?
3'd7)?
1'b1
1'b1
1'b1
1'b1
1'b1
1'b1
1'b1
1'b1
:
:
:
:
:
:
:
:
1'b0;
1'b0;
1'b0;
1'b0;
1'b0;
1'b0;
1'b0;
1'b0;
endmodule
module mux_8to1_16bit(In0, In1, In2, In3, In4, In5, In6, In7, Sel, Out);
parameter BITWIDTH = 16;
input [BITWIDTH-1:0] In0, In1, In2, In3, In4, In5, In6, In7;
input [2:0] Sel;
output [BITWIDTH-1:0] Out;
// instantiate an array of 16 mux_8to1_1bit modules