HierarchyFilesModulesSignalsTasksFunctionsHelp

/******************************************************************************/ 
/*                                                                            */ 
/* Copyright (c) 1999 Sun Microsystems, Inc. All rights reserved.             */ 
/*                                                                            */ 
/* The contents of this file are subject to the current version of the Sun    */ 
/* Community Source License, microSPARCII ("the License"). You may not use    */ 
/* this file except in compliance with the License.  You may obtain a copy    */ 
/* of the License by searching for "Sun Community Source License" on the      */ 
/* World Wide Web at http://www.sun.com. See the License for the rights,      */ 
/* obligations, and limitations governing use of the contents of this file.   */ 
/*                                                                            */ 
/* Sun Microsystems, Inc. has intellectual property rights relating to the    */ 
/* technology embodied in these files. In particular, and without limitation, */ 
/* these intellectual property rights may include one or more U.S. patents,   */ 
/* foreign patents, or pending applications.                                  */ 
/*                                                                            */ 
/* Sun, Sun Microsystems, the Sun logo, all Sun-based trademarks and logos,   */ 
/* Solaris, Java and all Java-based trademarks and logos are trademarks or    */ 
/* registered trademarks of Sun Microsystems, Inc. in the United States and   */ 
/* other countries. microSPARC is a trademark or registered trademark of      */ 
/* SPARC International, Inc. All SPARC trademarks are used under license and  */ 
/* are trademarks or registered trademarks of SPARC International, Inc. in    */ 
/* the United States and other countries. Products bearing SPARC trademarks   */ 
/* are based upon an architecture developed by Sun Microsystems, Inc.         */ 
/*                                                                            */ 
/******************************************************************************/ 
/***************************************************************************
****************************************************************************
***
***  Program File:  @(#)rfxlate.v
***
***
****************************************************************************
****************************************************************************/

// @(#)rfxlate.v	1.3 5/26/92
//-----------------------------------------------------------------------------
// REGISTER FILE LOGICAL TO PHYSICAL TRANSLATION MODULE
// Mrf_xlate


// m4 doesn't work on the rest of this file with the usual quotes
// because these are used by verilog defines.
// change the quotes to very unlikely characters.
// also have to  .



[Up: Mdata_byp1_2 rd_xlate][Up: Mregfile rs1_xlate][Up: Mregfile rs2_xlate][Up: Mir rs_st_xlate][Up: Mir rd_xlate][Up: Mdata_rf rs1_xlate][Up: Mdata_rf rs2_xlate]
module Mrf_xlate(phys_reg_no, log_reg_no, cwp_);
output [7:0] phys_reg_no;	// physical register number 0 to 127
input [4:0] log_reg_no;		// logical register number 0 to 31
input [2:0] cwp_;		// current window pointer 0 to 6 (active low)

/*
 * old for 120 registers
	// cwp active low, -1, modulo 7
	wire [2:0] cwpp1_ =
		// synopsys translate_off
		((cwp_==3'b001 || cwp_==3'b000)===1'bx) ? 'bx :
		// synopsys translate_on
		(cwp_==3'b001 || cwp_==3'b000) ? 3'b111 : cwp_ - 3'b001;

	// new for 120 registers
	wire [2:0] cwpmm1 = cwp_ - 3'b001;

	wire [3:0] in_blk =
		// synopsys translate_off
		((cwp_==3'b001)===1'bx) ? 'bx :
		// synopsys translate_on
		(cwp_==3'b001) ? 4'b1110 : {cwpp1_,1'b0};
	wire [3:0] local_blk = {cwpmm1, 1'b1};
	wire [3:0] out_blk = {cwp_, 1'b0};
 */

	wire [3:0] cwpp1_ = ({1'b0,cwp_}) + 4'b0001;
	wire high_in = ~cwp_[0] & ~cwp_[1] & ~cwp_[2];

	wire [4:0] in_blk = {high_in,cwp_,1'b0};
	wire [4:0] local_blk = {1'b0,cwp_,1'b1};
	wire [4:0] out_blk = {cwpp1_,1'b0};


	// the GLOBAL block is block 0.

	wire [4:0] global_blk = 0;

	// Physical register number is determined by selecting
	// 1 of the 4 possible blocks, and 1 register of 8 within
	// the block

	wire [4:0] mux_out;
    // Expanded macro begin.
    // cmux4(mux, 5,  mux_out, 		global_blk,  out_blk,  local_blk,  in_blk, 		({log_reg_no[4], log_reg_no[3]}))
    function [5:1] mux ;
        input [5:1] in0_fn ;
        input [5:1] in1_fn ;
        input [5:1] in2_fn ;
        input [5:1] in3_fn ;
        input [1:0] select_fn ;
        reg [5:1] out_fn ;
        begin
            case (select_fn) 
                2'b00:  out_fn = in0_fn ;
                2'b01: out_fn = in1_fn ;
                2'b10:  out_fn = in2_fn ;
                2'b11: out_fn = in3_fn ;
                default: out_fn = 65'hx;
            endcase
            mux = out_fn ;
        end
    endfunction
    assign  mux_out = mux(		global_blk,  out_blk,  local_blk,  in_blk, 		({log_reg_no[4], log_reg_no[3]})) ;
    // Expanded macro end.


	wire [7:0] phys_reg_no = {mux_out, log_reg_no[2:0]};


endmodule
HierarchyFilesModulesSignalsTasksFunctionsHelp

This page: Created:Thu Aug 19 12:02:29 1999
From: ../../../sparc_v8/ssparc/iu/rtl/rfxlate.v

Verilog converted to html by v2html 5.0 (written by Costas Calamvokis).Help