OpenCores
URL https://opencores.org/ocsvn/oks8/oks8/trunk

Subversion Repositories oks8

[/] [oks8/] [trunk/] [rtl/] [verilog/] [oks8_regf.v] - Rev 7

Go to most recent revision | Compare with Previous | Blame | View Log

//                              -*- Mode: Verilog -*-
// Filename        : oks8_regf.v
// Description     : OKS8 General Purpose Register Area
// Author          : Jian Li
// Created On      : Sat Jan 07 09:09:49 2006
// Last Modified By: .
// Last Modified On: .
// Update Count    : 0
// Status          : Unknown, Use with caution!
 
/*
 * Copyright (C) 2006 to Jian Li
 * Contact: kongzilee@yahoo.com.cn
 * 
 * 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 works contain the original copyright notice
 * and the associated disclaimer.
 * 
 * THIS SOFTWARE IS PROVIDE "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTIBILITY 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.
 */
 
`include "oks8_defines.v"
 
// =====================================================================
// REGISTER FILE BANK
// The bank of the register file
// =====================================================================
module regf ( clk, address, en, we, din, dout );
 
parameter width = 7;
parameter depth = 128;
 
input					clk;
input [width-1:0]		address;
input					en;
input					we;
input [7:0]				din;
output [7:0]			dout;
 
reg [width-1:0]	addr_r;
reg [7:0]	mem[0:depth-1];
 
// synopsys translate_off
integer i;
 
initial begin
  for ( i = 0; i < depth; i = i + 1 )
	mem[i] <= 8'h00;
end
// synopsys translate_on
 
always @(posedge clk)
   addr_r <= address;
 
assign dout = (en) ? mem[addr_r] : `DAT_Z;
 
always @(posedge clk)
   if (en && we) mem[address] <= din;
 
endmodule
 
// =====================================================================
// REGISTER FILE
// The register file from 00h to CFh
// =====================================================================
module oks8_regf ( clk, address, en, we, din, dout );
 
input			clk;
input [7:0]		address;
input			en;
input			we;
input [7:0]		din;
output [7:0]	dout;
 
wire en_f1, en_f2, en_f3;
 
assign en_f1 = en && (!address[7]);
assign en_f2 = en && (!en_f1) && (!address[6]);
assign en_f3 = en && (!en_f1) && (!en_f2) && (!(address[5] || address[4]));
 
//
// 00h ~ 7Fh
//
regf #(7, 128) f1 (
  .clk		( clk ),
  .address	( address[6:0] ),
  .en		( en_f1 ),
  .we		( we ),
  .din		( din ),
  .dout		( dout )
  );
 
//
// 80h ~ BFh
//
regf #(6, 64) f2 (
  .clk		( clk ),
  .address	( address[5:0] ),
  .en		( en_f2 ),
  .we		( we ),
  .din		( din ),
  .dout		( dout )
  );
 
//
// C0h ~ CFh (R0 ~ R15)
//
regf #(4, 16) f3 (
  .clk		( clk ),
  .address	( address[3:0] ),
  .en		( en_f3 ),
  .we		( we ),
  .din		( din ),
  .dout		( dout )
  );
 
endmodule
 

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.