File tree Expand file tree Collapse file tree 2 files changed +71
-0
lines changed
Expand file tree Collapse file tree 2 files changed +71
-0
lines changed Original file line number Diff line number Diff line change 1+ module dual_port_sram # (
2+ parameter int WIDTH = 32 ,
3+ parameter int DEPTH = 256 ,
4+ parameter int ADDR_WIDTH = $clog2(DEPTH )
5+ )(
6+ input logic clk,
7+ input logic wen,
8+ input logic [ADDR_WIDTH - 1 : 0 ] waddr,
9+ input logic [WIDTH - 1 : 0 ] din,
10+ input logic ren,
11+ input logic [ADDR_WIDTH - 1 : 0 ] raddr,
12+ output logic [WIDTH - 1 : 0 ] dout
13+ );
14+ logic [WIDTH - 1 : 0 ] mem [0 : DEPTH - 1 ];
15+
16+ always_ff @ (posedge clk) begin
17+ if (wen) mem[waddr] <= din;
18+ if (ren) dout <= mem[raddr];
19+ end
20+ endmodule
Original file line number Diff line number Diff line change 1+ `timescale 1ns / 1ps
2+
3+ module asym_ram_sdp_read_wider2 # (
4+ parameter int WIDTHA = 4 ,
5+ parameter int SIZEA = 1024 ,
6+ parameter int ADDRWIDTHA = 10 ,
7+ parameter int WIDTHB = 16 ,
8+ parameter int SIZEB = 256 ,
9+ parameter int ADDRWIDTHB = 8
10+ )(
11+ input logic clkA,
12+ input logic clkB, // unused, must be same clk
13+ input logic enaA,
14+ input logic weA,
15+ input logic enaB,
16+ input logic [ADDRWIDTHA - 1 : 0 ] addrA, // narrow write addr
17+ input logic [ADDRWIDTHB - 1 : 0 ] addrB, // wide read addr
18+ input logic [WIDTHA - 1 : 0 ] diA,
19+ output logic [WIDTHB - 1 : 0 ] doB
20+ );
21+ localparam int RATIO = WIDTHB / WIDTHA ; // assume power-of-2
22+ localparam int LOGR = $clog2 (RATIO );
23+
24+ logic [WIDTHA - 1 : 0 ] q [RATIO ];
25+
26+ wire [LOGR - 1 : 0 ] idx = addrA[LOGR - 1 : 0 ];
27+ wire [ADDRWIDTHB - 1 : 0 ] row = addrA[ADDRWIDTHA - 1 : LOGR ];
28+
29+ genvar i;
30+ generate
31+ for (i = 0 ; i < RATIO ; i++ ) begin : g
32+ dual_port_sram # (
33+ .WIDTH (WIDTHA ),
34+ .DEPTH (SIZEB )
35+ ) ram_i (
36+ .clk (clkA),
37+ .wen (enaA && weA && (idx == LOGR '(i))),
38+ .waddr (row),
39+ .din (diA),
40+ .ren (enaB),
41+ .raddr (addrB),
42+ .dout (q[i])
43+ );
44+ end
45+ endgenerate
46+
47+ always_comb
48+ for (int j = 0 ; j < RATIO ; j++ )
49+ doB[j* WIDTHA + : WIDTHA ] = q[j];
50+
51+ endmodule
You can’t perform that action at this time.
0 commit comments