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

Subversion Repositories nova

[/] [nova/] [trunk/] [src/] [ram_async_1r_sync_1w.v] - Blame information for rev 11

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 eexuke
//--------------------------------------------------------------------------------------------------
2
// Design    : nova
3
// Author(s) : Ke Xu
4
// Email           : eexuke@yahoo.com
5
// File      : ram_async_1r_sync_1w.v
6
// Generated : April 25,2005
7
// Copyright (C) 2008 Ke Xu                
8
//-------------------------------------------------------------------------------------------------
9
// Description 
10
// Synch Write, Asynch Read RAM, NOT synthesizable
11
// In real silicon, use register file (DFF) instead of RAM 
12
// legal range:data_width   [ 1 to 128 ]
13
// legal range:data_depth   [ 2 to 256 ]
14
// Input data :data_in[data_width-1:0]
15
// Output data:data_out[data_width-1:0]
16
// Read Address :rd_addr[addr_width-1:0]
17
// Write Address:wr_addr[addr_width-1:0]
18
// Write enable (active low): wr_n
19
// Chip select (active low): cs_n
20
// Reset (active low): rst_n
21
// Clock:clk
22
//-------------------------------------------------------------------------------------------------
23
 
24
// synopsys translate_off
25
`include "timescale.v"
26
// synopsys translate_on
27
`include "nova_defines.v"
28
module ram_async_1r_sync_1w (clk, rst_n, cs_n, wr_n, rd_addr, wr_addr, data_in, data_out);
29
 
30
  parameter data_width = 4;     //will be overrided during module instantiation
31
  parameter data_depth = 8; //will be overrided during module instantiation
32
 
33
  `define addr_width ((data_depth>16)?((data_depth>64)?((data_depth>128)?8:7):((data_depth>32)?6:5)):((data_depth>4)?((data_depth>8)?4:3):((data_depth>2)?2:1)))
34
 
35
  input clk;
36
  input rst_n;
37
  input cs_n;
38
  input wr_n;
39
  input [data_width-1:0] data_in;
40
  input [`addr_width-1:0] rd_addr;
41
  input [`addr_width-1:0] wr_addr;
42
  output [data_width-1:0] data_out;
43
 
44
  reg [data_width-1:0] ram [data_depth-1:0];
45
 
46
  //data_width & data_depth check
47
  initial
48
        begin:parameter_check
49
        integer param_error_flag;
50
        param_error_flag = 0;
51
 
52
      if ( (data_width < 1) || (data_width > 128) )
53
                begin
54
                param_error_flag = 1;
55
                $display("Error: %m :\n  Invalid value (%d) for parameter data_width (legal range: 1 to 128)",data_width );
56
                end
57
 
58
        if ( (data_depth < 2) || (data_depth > 256 ) )
59
                begin
60
                param_error_flag = 1;
61
                $display("Error: %m :\n  Invalid value (%d) for parameter data_depth (legal range: 2 to 256 )",data_depth );
62
                end
63
 
64
        if ( param_error_flag == 1)
65
                begin
66
                $display("%m :\n  Simulation aborted due to invalid parameter value(s)");
67
                $finish;
68
                end
69
 
70
        end // end data_width & data_depth check
71
 
72
  //read
73
  assign data_out = ((rd_addr ^ rd_addr) !== {`addr_width{1'b0}})? {data_width{1'bx}} : ((rd_addr >= data_depth)? {data_width{1'b0}} : ram[rd_addr] );
74
 
75
        //write
76
        always @ (posedge clk)
77
                if (!cs_n && !wr_n)
78
                        ram[wr_addr] <= data_in;
79
 
80
endmodule
81
 

powered by: WebSVN 2.1.0

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