⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wb_conmax_rf.v

📁 这是一个MIPS架构的开发的CPU软核OR2000
💻 V
字号:
/////////////////////////////////////////////////////////////////////////                                                             ////////  WISHBONE Connection Matrix Register File                   ////////                                                             ////////                                                             ////////  Author: Rudolf Usselmann                                   ////////          rudi@asics.ws                                      ////////                                                             ////////                                                             ////////  Downloaded from: http://www.opencores.org/cores/wb_conmax/ ////////                                                             /////////////////////////////////////////////////////////////////////////////                                                             //////// Copyright (C) 2000-2002 Rudolf Usselmann                    ////////                         www.asics.ws                        ////////                         rudi@asics.ws                       ////////                                                             //////// This source file may be used and distributed without        //////// restriction provided that this copyright statement is not   //////// removed from the file and that any derivative work contains //////// the original copyright notice and the associated disclaimer.////////                                                             ////////     THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY     //////// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED   //////// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS   //////// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR      //////// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,         //////// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES    //////// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE   //////// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR        //////// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF  //////// LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT  //////// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT  //////// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE         //////// POSSIBILITY OF SUCH DAMAGE.                                 ////////                                                             ///////////////////////////////////////////////////////////////////////////  CVS Log////  $Id: wb_conmax_rf.v,v 1.1.1.1 2008/01/13 13:20:39 ameziti Exp $////  $Date: 2008/01/13 13:20:39 $//  $Revision: 1.1.1.1 $//  $Author: ameziti $//  $Locker:  $//  $State: Exp $//// Change History://               $Log: wb_conmax_rf.v,v $//               Revision 1.1.1.1  2008/01/13 13:20:39  ameziti//               First Import the project on the opencores.org CVS server////               Revision 1.2  2002/10/03 05:40:07  rudi//               Fixed a minor bug in parameter passing, updated headers and specification.////               Revision 1.1.1.1  2001/10/19 11:01:42  rudi//               WISHBONE CONMAX IP Core//////////`include "wb_conmax_defines.v"module wb_conmax_rf(		clk_i, rst_i,		// Internal Wishbone Interface		i_wb_data_i, i_wb_data_o, i_wb_addr_i, i_wb_sel_i, i_wb_we_i, i_wb_cyc_i,		i_wb_stb_i, i_wb_ack_o, i_wb_err_o, i_wb_rty_o,		// External Wishbone Interface		e_wb_data_i, e_wb_data_o, e_wb_addr_o, e_wb_sel_o, e_wb_we_o, e_wb_cyc_o,		e_wb_stb_o, e_wb_ack_i, e_wb_err_i, e_wb_rty_i,		// Configuration Registers		conf0, conf1, conf2, conf3, conf4, conf5, conf6, conf7,		conf8, conf9, conf10, conf11, conf12, conf13, conf14, conf15		);//////////////////////////////////////////////////////////////////////// Module Parameters//parameter	[3:0]	rf_addr	= 4'hf;parameter		dw	= 32;		// Data bus Widthparameter		aw	= 32;		// Address bus Widthparameter		sw	= dw / 8;	// Number of Select Lines//////////////////////////////////////////////////////////////////////// Module IOs//input		clk_i, rst_i;// Internal Wishbone Interfaceinput	[dw-1:0]	i_wb_data_i;output	[dw-1:0]	i_wb_data_o;input	[aw-1:0]	i_wb_addr_i;input	[sw-1:0]	i_wb_sel_i;input			i_wb_we_i;input			i_wb_cyc_i;input			i_wb_stb_i;output			i_wb_ack_o;output			i_wb_err_o;output			i_wb_rty_o;// External Wishbone Interfaceinput	[dw-1:0]	e_wb_data_i;output	[dw-1:0]	e_wb_data_o;output	[aw-1:0]	e_wb_addr_o;output	[sw-1:0]	e_wb_sel_o;output			e_wb_we_o;output			e_wb_cyc_o;output			e_wb_stb_o;input			e_wb_ack_i;input			e_wb_err_i;input			e_wb_rty_i;// Configuration Registersoutput	[15:0]		conf0;output	[15:0]		conf1;output	[15:0]		conf2;output	[15:0]		conf3;output	[15:0]		conf4;output	[15:0]		conf5;output	[15:0]		conf6;output	[15:0]		conf7;output	[15:0]		conf8;output	[15:0]		conf9;output	[15:0]		conf10;output	[15:0]		conf11;output	[15:0]		conf12;output	[15:0]		conf13;output	[15:0]		conf14;output	[15:0]		conf15;//////////////////////////////////////////////////////////////////////// Local Wires//reg	[15:0]	conf0, conf1, conf2, conf3, conf4, conf5;reg	[15:0]	conf6, conf7, conf8, conf9, conf10, conf11;reg	[15:0]	conf12, conf13, conf14, conf15;//synopsys infer_multibit "conf0"//synopsys infer_multibit "conf1"//synopsys infer_multibit "conf2"//synopsys infer_multibit "conf3"//synopsys infer_multibit "conf4"//synopsys infer_multibit "conf5"//synopsys infer_multibit "conf6"//synopsys infer_multibit "conf7"//synopsys infer_multibit "conf8"//synopsys infer_multibit "conf9"//synopsys infer_multibit "conf10"//synopsys infer_multibit "conf11"//synopsys infer_multibit "conf12"//synopsys infer_multibit "conf13"//synopsys infer_multibit "conf14"//synopsys infer_multibit "conf15"wire		rf_sel;reg	[15:0]	rf_dout;reg		rf_ack;reg		rf_we;//////////////////////////////////////////////////////////////////////// Register File Select Logic//assign rf_sel = i_wb_cyc_i & i_wb_stb_i & (i_wb_addr_i[aw-5:aw-8] == rf_addr);//////////////////////////////////////////////////////////////////////// Register File Logic//always @(posedge clk_i)	rf_we <= #1 rf_sel & i_wb_we_i & !rf_we;always @(posedge clk_i)	rf_ack <= #1 rf_sel & !rf_ack;// Writre Logicalways @(posedge clk_i or posedge rst_i)	if(rst_i)					conf0 <= #1 16'h0;	else	if(rf_we & (i_wb_addr_i[5:2] == 4'd0) )		conf0 <= #1 i_wb_data_i[15:0];always @(posedge clk_i or posedge rst_i)	if(rst_i)					conf1 <= #1 16'h0;	else	if(rf_we & (i_wb_addr_i[5:2] == 4'd1) )		conf1 <= #1 i_wb_data_i[15:0];always @(posedge clk_i or posedge rst_i)	if(rst_i)					conf2 <= #1 16'h0;	else	if(rf_we & (i_wb_addr_i[5:2] == 4'd2) )		conf2 <= #1 i_wb_data_i[15:0];always @(posedge clk_i or posedge rst_i)	if(rst_i)					conf3 <= #1 16'h0;	else	if(rf_we & (i_wb_addr_i[5:2] == 4'd3) )		conf3 <= #1 i_wb_data_i[15:0];always @(posedge clk_i or posedge rst_i)	if(rst_i)					conf4 <= #1 16'h0;	else	if(rf_we & (i_wb_addr_i[5:2] == 4'd4) )		conf4 <= #1 i_wb_data_i[15:0];always @(posedge clk_i or posedge rst_i)	if(rst_i)					conf5 <= #1 16'h0;	else	if(rf_we & (i_wb_addr_i[5:2] == 4'd5) )		conf5 <= #1 i_wb_data_i[15:0];always @(posedge clk_i or posedge rst_i)	if(rst_i)					conf6 <= #1 16'h0;	else	if(rf_we & (i_wb_addr_i[5:2] == 4'd6) )		conf6 <= #1 i_wb_data_i[15:0];always @(posedge clk_i or posedge rst_i)	if(rst_i)					conf7 <= #1 16'h0;	else	if(rf_we & (i_wb_addr_i[5:2] == 4'd7) )		conf7 <= #1 i_wb_data_i[15:0];always @(posedge clk_i or posedge rst_i)	if(rst_i)					conf8 <= #1 16'h0;	else	if(rf_we & (i_wb_addr_i[5:2] == 4'd8) )		conf8 <= #1 i_wb_data_i[15:0];always @(posedge clk_i or posedge rst_i)	if(rst_i)					conf9 <= #1 16'h0;	else	if(rf_we & (i_wb_addr_i[5:2] == 4'd9) )		conf9 <= #1 i_wb_data_i[15:0];always @(posedge clk_i or posedge rst_i)	if(rst_i)					conf10 <= #1 16'h0;	else	if(rf_we & (i_wb_addr_i[5:2] == 4'd10) )	conf10 <= #1 i_wb_data_i[15:0];always @(posedge clk_i or posedge rst_i)	if(rst_i)					conf11 <= #1 16'h0;	else	if(rf_we & (i_wb_addr_i[5:2] == 4'd11) )	conf11 <= #1 i_wb_data_i[15:0];always @(posedge clk_i or posedge rst_i)	if(rst_i)					conf12 <= #1 16'h0;	else	if(rf_we & (i_wb_addr_i[5:2] == 4'd12) )	conf12 <= #1 i_wb_data_i[15:0];always @(posedge clk_i or posedge rst_i)	if(rst_i)					conf13 <= #1 16'h0;	else	if(rf_we & (i_wb_addr_i[5:2] == 4'd13) )	conf13 <= #1 i_wb_data_i[15:0];always @(posedge clk_i or posedge rst_i)	if(rst_i)					conf14 <= #1 16'h0;	else	if(rf_we & (i_wb_addr_i[5:2] == 4'd14) )	conf14 <= #1 i_wb_data_i[15:0];always @(posedge clk_i or posedge rst_i)	if(rst_i)					conf15 <= #1 16'h0;	else	if(rf_we & (i_wb_addr_i[5:2] == 4'd15) )	conf15 <= #1 i_wb_data_i[15:0];// Read Logicalways @(posedge clk_i)	if(!rf_sel)	rf_dout <= #1 16'h0;	else	case(i_wb_addr_i[5:2])	   4'd0:	rf_dout <= #1 conf0;	   4'd1:	rf_dout <= #1 conf1;	   4'd2:	rf_dout <= #1 conf2;	   4'd3:	rf_dout <= #1 conf3;	   4'd4:	rf_dout <= #1 conf4;	   4'd5:	rf_dout <= #1 conf5;	   4'd6:	rf_dout <= #1 conf6;	   4'd7:	rf_dout <= #1 conf7;	   4'd8:	rf_dout <= #1 conf8;	   4'd9:	rf_dout <= #1 conf9;	   4'd10:	rf_dout <= #1 conf10;	   4'd11:	rf_dout <= #1 conf11;	   4'd12:	rf_dout <= #1 conf12;	   4'd13:	rf_dout <= #1 conf13;	   4'd14:	rf_dout <= #1 conf14;	   4'd15:	rf_dout <= #1 conf15;	endcase//////////////////////////////////////////////////////////////////////// Register File By-Pass Logic//assign e_wb_addr_o = i_wb_addr_i;assign e_wb_sel_o  = i_wb_sel_i;assign e_wb_data_o = i_wb_data_i;assign e_wb_cyc_o  = rf_sel ? 1'b0 : i_wb_cyc_i;assign e_wb_stb_o  = i_wb_stb_i;assign e_wb_we_o   = i_wb_we_i;assign i_wb_data_o = rf_sel ? { {aw-16{1'b0}}, rf_dout} : e_wb_data_i;assign i_wb_ack_o  = rf_sel ? rf_ack  : e_wb_ack_i;assign i_wb_err_o  = rf_sel ? 1'b0    : e_wb_err_i;assign i_wb_rty_o  = rf_sel ? 1'b0    : e_wb_rty_i;endmodule

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -