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

Subversion Repositories hive

[/] [hive/] [trunk/] [v04.05/] [dq_ram_infer.v] - Blame information for rev 4

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 4 ericw
/*
2
--------------------------------------------------------------------------------
3
 
4
Module: dq_ram_infer.v
5
 
6
Function:
7
- Infers a parameterized simple DQ synchronous RAM.
8
 
9
Instantiates:
10
- Nothing (block RAM will most likely be synthesized).
11
 
12
Notes:
13
- Writes accept data after the address & write enable on the clock.
14
- Reads present data after the address on the clock.
15
- Configurable read-during-write mode.
16
- Optional output data registering (likely an internal BRAM resource).
17
 
18
--------------------------------------------------------------------------------
19
*/
20
 
21
module dq_ram_infer
22
        #(
23
        parameter               integer                                         REG_OUT                 = 1,  // 1=enable output registering
24
        parameter               integer                                         DATA_W                  = 16,
25
        parameter               integer                                         ADDR_W                  = 8,
26
        parameter                                                                               MODE                            = "RAW"  // options here are "WAR" and "RAW"
27
        )
28
        (
29
        input                   wire                                                            clk_i,                  // clock
30
        input                   wire    [ADDR_W-1:0]                     addr_i,                 // address
31
        input                   wire                                                            wr_i,                           // write enable, active high
32
        input                   wire    [DATA_W-1:0]                     data_i,                 // write data
33
        output          wire    [DATA_W-1:0]                     data_o                  // read data
34
        );
35
 
36
        /*
37
        ----------------------
38
        -- internal signals --
39
        ----------------------
40
        */
41
        localparam              integer                                         CAPACITY                        = 2**ADDR_W;  // total words possible to store
42
        reg                                     [DATA_W-1:0]                     ram[0:CAPACITY-1];  // memory
43
        reg                                     [DATA_W-1:0]                     data;
44
 
45
 
46
 
47
        /*
48
        ================
49
        == code start ==
50
        ================
51
        */
52
 
53
 
54
 
55
        // write
56
        always @ ( posedge clk_i ) begin
57
                if ( wr_i ) begin
58
                        ram[addr_i] <= data_i;
59
                end
60
        end
61
 
62
        // read
63
        always @ ( posedge clk_i ) begin
64
                if ( wr_i & MODE == "RAW" ) begin
65
                        data <= data_i;  // read after write
66
                end else begin
67
                        data <= ram[addr_i];  // write after read
68
                end
69
        end
70
 
71
        // optional output reg
72
        generate
73
                if ( REG_OUT == 1 ) begin
74
                        reg [DATA_W-1:0] data_r;
75
                        always @ ( posedge clk_i ) begin
76
                                data_r <= data;
77
                        end
78
                        assign data_o = data_r;
79
                end else begin
80
                        assign data_o = data;
81
                end
82
        endgenerate
83
 
84
 
85
endmodule

powered by: WebSVN 2.1.0

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