OpenRAM/compiler/sram/multibank_template.v

74 lines
1.3 KiB
Coq
Raw Normal View History

2022-01-12 20:59:44 +01:00
module multibank # (
DATA_WIDTH = 32,
2022-01-26 16:47:37 +01:00
ADDR_WIDTH= 8,
NUM_BANKS=2
2022-01-12 20:59:44 +01:00
)(
#<RW_PORTS
2022-01-26 16:47:37 +01:00
clk,
addr,
din,
csb,
web,
2022-01-26 19:52:10 +01:00
dout
2022-01-12 20:59:44 +01:00
#>RW_PORTS
#<R_PORTS
2022-01-26 16:47:37 +01:00
clk,
addr,
csb,
web,
2022-01-26 19:52:10 +01:00
dout
2022-01-12 20:59:44 +01:00
#>R_PORTS
);
2022-01-26 19:52:10 +01:00
parameter RAM_DEPTH = 1 << ADDR_WIDTH;
2022-01-26 16:47:37 +01:00
parameter BANK_SEL = (NUM_BANKS <= 2)? 1 :
(NUM_BANKS <= 4)? 2 :
(NUM_BANKS <= 8)? 3 :
(NUM_BANKS <= 16)? 4 : 5;
input clk;
input [ADDR_WIDTH -1 : 0] addr;
input [DATA_WIDTH - 1: 0] din;
input csb;
input web;
2022-01-26 19:52:10 +01:00
output reg [DATA_WIDTH - 1 : 0] dout;
2022-01-26 16:47:37 +01:00
2022-01-26 19:52:10 +01:00
#!PORT_NUM!0#
2022-01-26 16:47:37 +01:00
#<BANK_DEFS
reg csb#$PORT_NUM$#;
reg web#$PORT_NUM$#;
2022-01-26 19:52:10 +01:00
reg [DATA_WIDTH - 1 : 0] dout#$PORT_NUM$#;
#!PORT_NUM!PORT_NUM+1#
2022-01-26 16:47:37 +01:00
#>BANK_DEFS
2022-01-26 19:52:10 +01:00
#!PORT_NUM!0#
2022-01-12 20:59:44 +01:00
#<BANK_INIT
2022-01-26 19:52:10 +01:00
bank #(DATA_WIDTH, ADDR_WIDTH) bank#$PORT_NUM$# (
2022-01-12 20:59:44 +01:00
#<BANK_RW_PORTS
2022-01-26 16:47:37 +01:00
.clk(clk),
2022-01-26 19:52:10 +01:00
.addr(addr[ADDR_WIDTH - BANK_SEL - 1 : 0]),
2022-01-26 16:47:37 +01:00
.din(din),
.csb(csb#$PORT_NUM$#),
.web(web#$PORT_NUM$#),
2022-01-26 19:52:10 +01:00
.dout(dout#$PORT_NUM$#)
#!PORT_NUM!PORT_NUM+1#
2022-01-26 16:47:37 +01:00
#>BANK_RW_PORTS
2022-01-26 19:52:10 +01:00
);
2022-01-12 20:59:44 +01:00
#>BANK_INIT
2022-01-26 16:47:37 +01:00
always @(posedge clk) begin
case (addr[ADDR_WIDTH - 1 : ADDR_WIDTH - BANK_SEL])
2022-01-26 19:52:10 +01:00
#!PORT_NUM!0#
2022-01-26 16:47:37 +01:00
#<BANK_CASE
#$PORT_NUM$#: begin
dout <= dout#$PORT_NUM$#;
web#$PORT_NUM$# <= web;
end
2022-01-26 19:52:10 +01:00
#!PORT_NUM!PORT_NUM+1#
2022-01-26 16:47:37 +01:00
#>BANK_CASE
endcase
end
2022-01-26 19:52:10 +01:00
endmodule