102 lines
2.4 KiB
Verilog
102 lines
2.4 KiB
Verilog
//`define FPGA_XIL
|
|
|
|
//`define SMIC_IC
|
|
|
|
|
|
`define BEHAVIOUR_SIM
|
|
|
|
|
|
module spram #(
|
|
parameter width =16,
|
|
parameter depth =1024
|
|
|
|
)(
|
|
clka,
|
|
ena,
|
|
dina,
|
|
addra,
|
|
|
|
clkb,
|
|
enb,
|
|
doutb,
|
|
addrb
|
|
);
|
|
///////////////////////////////////////////////////////
|
|
//Function
|
|
///////////////////////////////////////////////////////
|
|
function integer clog2(input integer depth);
|
|
begin
|
|
for(clog2=0;depth>0;clog2=clog2+1)
|
|
depth =depth>>1;
|
|
end
|
|
endfunction
|
|
|
|
localparam aw = clog2(depth-1);
|
|
|
|
///////////////////////////////////////////////////////
|
|
//Input declaration
|
|
///////////////////////////////////////////////////////
|
|
input clka;
|
|
input ena;
|
|
input [width-1:0] dina;
|
|
input [aw-1:0] addra;
|
|
|
|
input clkb;
|
|
input enb;
|
|
output [width-1:0] doutb;
|
|
input [aw-1:0] addrb;
|
|
|
|
///////////////////////////////////////////////////////
|
|
//SRAM
|
|
///////////////////////////////////////////////////////
|
|
`ifdef BEHAVIOUR_SIM
|
|
bhv_spram #(
|
|
.width (width ),
|
|
.depth (depth )
|
|
)bhv_spram(
|
|
.clka (clka ),
|
|
.ena (ena ),
|
|
.dina (dina ),
|
|
.addra (addra ),
|
|
.clkb (clkb ),
|
|
.enb (enb ),
|
|
.doutb (doutb ),
|
|
.addrb (addrb )
|
|
);
|
|
|
|
`elsif XINLINX_FPGA
|
|
xil_spram #(
|
|
.dw (width ),
|
|
.depth (depth )
|
|
)xil_spram(
|
|
.wrclk (clka ),
|
|
.wren (ena ),
|
|
.wrdata (dina ),
|
|
.wraddr (addra ),
|
|
.rdclk (clkb ),
|
|
.rden (enb ),
|
|
.rddata (doutb ),
|
|
.rdaddr (addrb )
|
|
);
|
|
`elsif SMIC_IC
|
|
smic_spram #(
|
|
.width (width),
|
|
.depth (depth)
|
|
)smic_spram(
|
|
.CLKB (clka ),
|
|
.CENB (ena ),
|
|
.AB (addra ),
|
|
.DB (dina ),
|
|
|
|
.CLKA (clkb ),
|
|
.CENA (enb ),
|
|
.AA (addrb ),
|
|
.QA (doutb )
|
|
);
|
|
`endif
|
|
endmodule
|
|
|
|
//`undef FPGA_XIL
|
|
|
|
|