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

Subversion Repositories versatile_fifo

[/] [versatile_fifo/] [trunk/] [rtl/] [verilog/] [versatile_fifo_dual_port_ram.v] - Blame information for rev 2

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

Line No. Rev Author Line
1 2 unneback
// true dual port RAM, sync
2
module versatile_fifo_dual_port_ram_dc_2w
3
  (
4
   // A side
5
   d_a,
6
`ifdef DW
7
   q_a,
8
`endif
9
   adr_a,
10
   we_a,
11
`ifdef DC
12
   clk_a,
13
`endif
14
   // B side
15
   q_b
16
   adr_b,
17
`ifdef DW
18
   d_b,
19
   we_b,
20
`endif
21
`ifdef DC
22
   clk_b
23
`else
24
   clk
25
`endif
26
   );
27
 
28
   parameter DATA_WIDTH = 8;
29
   parameter ADDR_WIDTH = 9;
30
 
31
   input [(DATA_WIDTH-1):0]      data_a;
32
   input [(ADDR_WIDTH-1):0]       addr_a;
33
   input [(ADDR_WIDTH-1):0]       addr_b;
34
   input                         we_a;
35
   output reg [(DATA_WIDTH-1):0] q_b;
36
`ifdef DW
37
   input [(DATA_WIDTH-1):0]       data_b;
38
   output reg [(DATA_WIDTH-1):0] q_a;
39
   input                         we_b;
40
`endif
41
`ifdef DC
42
   input                         clk_a, clk_b;
43
`else
44
   input                         clk;
45
`endif
46
 
47
   // Declare the RAM variable
48
   reg [DATA_WIDTH-1:0] ram [2**ADDR_WIDTH-1:0] /*synthesis syn_ramstyle = "no_rw_check"*/;
49
 
50
`ifdef DC
51
   always @ (posedge clk_a)
52
`else
53
   always @ (posedge clk)
54
`endif
55
`ifdef DW
56
     begin // Port A
57
        if (we_a)
58
          begin
59
             ram[addr_a] <= data_a;
60
             q_a <= data_a;
61
          end
62
        else
63
          q_a <= ram[addr_a];
64
     end
65
`else
66
   if (we_a)
67
     ram[addr_a] <= data_a;
68
`endif
69
 
70
`ifdef DC
71
   always @ (posedge clk_a)
72
`else
73
   always @ (posedge clk)
74
`endif
75
`ifdef DW
76
     begin // Port b
77
        if (we_b)
78
          begin
79
             ram[addr_b] <= data_b;
80
             q_b <= data_b;
81
          end
82
        else
83
          q_b <= ram[addr_b];
84
     end
85
`else // !`ifdef DW
86
   q_b <= ram[addr_b];
87
`endif // !`ifdef DW
88
 
89
endmodule // true_dual_port_ram_sync

powered by: WebSVN 2.1.0

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