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

Subversion Repositories nova

[/] [nova/] [trunk/] [src/] [ram_sync_1r_sync_1w.v] - Diff between revs 2 and 11

Only display areas with differences | Details | Blame | View Log

Rev 2 Rev 11
//--------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------
// Design    : nova
// Design    : nova
// Author(s) : Ke Xu
// Author(s) : Ke Xu
// Email           : eexuke@yahoo.com
// Email           : eexuke@yahoo.com
// File      : ram_sync_1r_sync_1w.v
// File      : ram_sync_1r_sync_1w.v
// Generated : April 25,2005
// Generated : April 25,2005
// Copyright (C) 2008 Ke Xu                
// Copyright (C) 2008 Ke Xu                
//-------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------
// Description 
// Description 
// Synch Write, Synch Read RAM, NOT synthesizable
// Synch Write, Synch Read RAM, NOT synthesizable
// In real silicon, use customized RAM instead of DFF  
// In real silicon, use customized RAM instead of DFF  
// legal range:data_width   [ 1 to 256 ]
// legal range:data_width   [ 1 to 256 ]
// legal range:data_depth   [ 2 to 1024 ]
// legal range:data_depth   [ 2 to 1024 ]
// Input data :data_in[data_width-1:0]
// Input data :data_in[data_width-1:0]
// Output data:data_out[data_width-1:0]
// Output data:data_out[data_width-1:0]
// Read Address :rd_addr[addr_width-1:0]
// Read Address :rd_addr[addr_width-1:0]
// Write Address:wr_addr[addr_width-1:0]
// Write Address:wr_addr[addr_width-1:0]
// Write enable (active low): wr_n
// Write enable (active low): wr_n
// Chip select (active low): cs_n
// Chip select (active low): cs_n
// Reset (active low): rst_n
// Reset (active low): rst_n
// Clock:clk
// Clock:clk
//-------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------
 
 
// synopsys translate_off
// synopsys translate_off
`include "timescale.v"
`include "timescale.v"
// synopsys translate_on
// synopsys translate_on
`include "nova_defines.v"
`include "nova_defines.v"
 
 
module ram_sync_1r_sync_1w (clk, rst_n, wr_n, rd_n, wr_addr, rd_addr, data_in, data_out);
module ram_sync_1r_sync_1w (clk, rst_n, wr_n, rd_n, wr_addr, rd_addr, data_in, data_out);
 
 
  parameter data_width = 4;     //will be overrided during module instantiation
  parameter data_width = 4;     //will be overrided during module instantiation
  parameter data_depth = 8; //will be overrided during module instantiation
  parameter data_depth = 8; //will be overrided during module instantiation
 
 
  `define addr_width ((data_depth>32)?((data_depth>256)?((data_depth>512)?10:9):((data_depth>128)?8:((data_depth>64)?7:6))):((data_depth>8)  ?((data_depth>16) ?5:4) :((data_depth>4)  ?3:((data_depth>2) ?1:0))))
  `define addr_width ((data_depth>32)?((data_depth>256)?((data_depth>512)?10:9):((data_depth>128)?8:((data_depth>64)?7:6))):((data_depth>8)  ?((data_depth>16) ?5:4) :((data_depth>4)  ?3:((data_depth>2) ?1:0))))
 
 
  input clk;
  input clk;
  input rst_n;
  input rst_n;
  input wr_n;
  input wr_n;
  input rd_n;
  input rd_n;
  input [`addr_width-1:0] wr_addr;
  input [`addr_width-1:0] wr_addr;
  input [`addr_width-1:0] rd_addr;
  input [`addr_width-1:0] rd_addr;
  input  [data_width-1:0] data_in;
  input  [data_width-1:0] data_in;
  output [data_width-1:0] data_out;
  output [data_width-1:0] data_out;
 
 
  reg [data_width-1:0] data_out;
  reg [data_width-1:0] data_out;
  reg [data_width-1:0] ram [data_depth-1:0];
  reg [data_width-1:0] ram [data_depth-1:0];
 
 
  //data_width, data_depth, simultaneously read/write check
  //data_width, data_depth, simultaneously read/write check
  initial
  initial
        begin:parameter_check
        begin:parameter_check
        integer param_error_flag;
        integer param_error_flag;
        param_error_flag = 0;
        param_error_flag = 0;
 
 
      if ( (data_width < 1) || (data_width > 256) )
      if ( (data_width < 1) || (data_width > 256) )
                begin
                begin
                param_error_flag = 1;
                param_error_flag = 1;
                $display("Error: %m :\n  Invalid value (%d) for parameter data_width (legal range: 1 to 256)",data_width );
                $display("Error: %m :\n  Invalid value (%d) for parameter data_width (legal range: 1 to 256)",data_width );
                end
                end
 
 
        if ( (data_depth < 2) || (data_depth > 1024 ) )
        if ( (data_depth < 2) || (data_depth > 1024 ) )
                begin
                begin
                param_error_flag = 1;
                param_error_flag = 1;
                $display("Error: %m :\n  Invalid value (%d) for parameter data_depth (legal range: 2 to 1024 )",data_depth );
                $display("Error: %m :\n  Invalid value (%d) for parameter data_depth (legal range: 2 to 1024 )",data_depth );
                end
                end
 
 
        /*
        /*
        if ( (cs_n == 1'b0 && wr_n == 1'b0 && rd_n == 1'b0 ) )
        if ( (cs_n == 1'b0 && wr_n == 1'b0 && rd_n == 1'b0 ) )
                begin
                begin
                        param_error_flag = 1;
                        param_error_flag = 1;
                        $display("Error: %m :\n  Not allowed! RAM simultaneously read and write occur");
                        $display("Error: %m :\n  Not allowed! RAM simultaneously read and write occur");
                end
                end
      */
      */
        if ( param_error_flag == 1)
        if ( param_error_flag == 1)
                begin
                begin
                $display("%m :\n  Simulation aborted  due to invalid parameter value(s)");
                $display("%m :\n  Simulation aborted  due to invalid parameter value(s)");
                $finish;
                $finish;
                end
                end
 
 
        end // end data_width & data_depth check
        end // end data_width & data_depth check
 
 
  //read
  //read
  always @ (posedge clk or negedge rst_n)
  always @ (posedge clk or negedge rst_n)
        if (rst_n == 1'b0)
        if (rst_n == 1'b0)
                data_out <= 0;
                data_out <= 0;
        else if (!rd_n)
        else if (!rd_n)
                data_out <= ram[rd_addr];
                data_out <= ram[rd_addr];
 
 
        //write
        //write
        always @ (posedge clk)
        always @ (posedge clk)
                if (!wr_n)
                if (!wr_n)
                        ram[wr_addr] <= data_in;
                        ram[wr_addr] <= data_in;
 
 
endmodule
endmodule
 
 

powered by: WebSVN 2.1.0

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