173 lines
12 KiB
Coq
173 lines
12 KiB
Coq
|
|
|
||
|
|
|
||
|
|
module tsmc_dpram #(
|
||
|
|
parameter DATAWIDTH = 32
|
||
|
|
,parameter ADDRWIDTH = 14
|
||
|
|
)(
|
||
|
|
input PortClk
|
||
|
|
,input [ADDRWIDTH-1 :0] PortAAddr
|
||
|
|
,input [DATAWIDTH-1 :0] PortADataIn
|
||
|
|
,input PortAWriteEnable //active low
|
||
|
|
,input PortAChipEnable //active low
|
||
|
|
,input [(DATAWIDTH/8)-1 :0] PortAByteWriteEnable //active low
|
||
|
|
,output [DATAWIDTH-1 :0] PortADataOut
|
||
|
|
|
||
|
|
,input [ADDRWIDTH-1 :0] PortBAddr
|
||
|
|
,input [DATAWIDTH-1 :0] PortBDataIn
|
||
|
|
,input PortBWriteEnable //active low
|
||
|
|
,input PortBChipEnable //active low
|
||
|
|
,input [(DATAWIDTH/8)-1 :0] PortBByteWriteEnable //active low
|
||
|
|
,output [DATAWIDTH-1 :0] PortBDataOut
|
||
|
|
);
|
||
|
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
|
//Function
|
||
|
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
|
function integer clog2(input integer bit_depth);
|
||
|
|
begin
|
||
|
|
for(clog2=0;bit_depth>0;clog2=clog2+1)
|
||
|
|
bit_depth =bit_depth>>1;
|
||
|
|
end
|
||
|
|
endfunction
|
||
|
|
|
||
|
|
localparam LSB = clog2(DATAWIDTH/8 -1);
|
||
|
|
|
||
|
|
generate
|
||
|
|
if((DATAWIDTH == 512) && (ADDRWIDTH == 19)) begin:spram_512X8192_generation
|
||
|
|
genvar i;
|
||
|
|
wire [DATAWIDTH-1:0] BWEBA ;
|
||
|
|
wire [DATAWIDTH-1:0] BWEBB ;
|
||
|
|
for(i = 0; i < DATAWIDTH/8; i = i + 1) begin
|
||
|
|
assign BWEBA[8*i +: 8] = {8{PortAByteWriteEnable[i]}};
|
||
|
|
assign BWEBB[8*i +: 8] = {8{PortBByteWriteEnable[i]}};
|
||
|
|
end
|
||
|
|
genvar k;
|
||
|
|
wire [1 :0] U_CEBA;
|
||
|
|
wire [1 :0] U_CEBB;
|
||
|
|
wire [DATAWIDTH-1:0] U_QA[1 :0];
|
||
|
|
wire [DATAWIDTH-1:0] U_QB[1 :0];
|
||
|
|
reg [1 :0] AA_1D_MSB;
|
||
|
|
reg [1 :0] AB_1D_MSB;
|
||
|
|
for(k = 0; k < 2; k = k + 1) begin
|
||
|
|
assign U_CEBA[k] = ~(PortAAddr[ADDRWIDTH-1] == k) | PortAChipEnable;
|
||
|
|
assign U_CEBB[k] = ~(PortBAddr[ADDRWIDTH-1] == k) | PortBChipEnable;
|
||
|
|
tsdn28hpcpuhdb4096x128m4mw_170a U0_tsdn28hpcpuhdb4096x128m4mw_170a (
|
||
|
|
.CLK ( PortClk )
|
||
|
|
,.CEBA ( U_CEBA[k] )
|
||
|
|
,.WEBA ( PortAWriteEnable )
|
||
|
|
,.BWEBA ( BWEBA[127:0] )
|
||
|
|
,.AA ( PortAAddr[ADDRWIDTH-2:LSB] )
|
||
|
|
,.DA ( PortADataIn[127:0] )
|
||
|
|
,.QA ( U_QA[k][127:0] )
|
||
|
|
,.CEBB ( U_CEBB[k] )
|
||
|
|
,.WEBB ( PortBWriteEnable )
|
||
|
|
,.BWEBB ( BWEBB[127:0] )
|
||
|
|
,.AB ( PortBAddr[ADDRWIDTH-2:LSB] )
|
||
|
|
,.DB ( PortBDataIn[127:0] )
|
||
|
|
,.QB ( U_QB[k][127:0] )
|
||
|
|
,.RTSEL ( 2'b00 )
|
||
|
|
,.WTSEL ( 2'b00 )
|
||
|
|
,.PTSEL ( 2'b00 )
|
||
|
|
);
|
||
|
|
tsdn28hpcpuhdb4096x128m4mw_170a U1_tsdn28hpcpuhdb4096x128m4mw_170a (
|
||
|
|
.CLK ( PortClk )
|
||
|
|
,.CEBA ( U_CEBA[k] )
|
||
|
|
,.WEBA ( PortAWriteEnable )
|
||
|
|
,.BWEBA ( BWEBA[255:128] )
|
||
|
|
,.AA ( PortAAddr[ADDRWIDTH-2:LSB] )
|
||
|
|
,.DA ( PortADataIn[255:128] )
|
||
|
|
,.QA ( U_QA[k][255:128] )
|
||
|
|
,.CEBB ( U_CEBB[k] )
|
||
|
|
,.WEBB ( PortBWriteEnable )
|
||
|
|
,.BWEBB ( BWEBB[255:128] )
|
||
|
|
,.AB ( PortBAddr[ADDRWIDTH-2:LSB] )
|
||
|
|
,.DB ( PortBDataIn[255:128] )
|
||
|
|
,.QB ( U_QB[k][255:128] )
|
||
|
|
,.RTSEL ( 2'b00 )
|
||
|
|
,.WTSEL ( 2'b00 )
|
||
|
|
,.PTSEL ( 2'b00 )
|
||
|
|
);
|
||
|
|
tsdn28hpcpuhdb4096x128m4mw_170a U2_tsdn28hpcpuhdb4096x128m4mw_170a (
|
||
|
|
.CLK ( PortClk )
|
||
|
|
,.CEBA ( U_CEBA[k] )
|
||
|
|
,.WEBA ( PortAWriteEnable )
|
||
|
|
,.BWEBA ( BWEBA[383:256] )
|
||
|
|
,.AA ( PortAAddr[ADDRWIDTH-2:LSB] )
|
||
|
|
,.DA ( PortADataIn[383:256] )
|
||
|
|
,.QA ( U_QA[k][383:256] )
|
||
|
|
,.CEBB ( U_CEBB[k] )
|
||
|
|
,.WEBB ( PortBWriteEnable )
|
||
|
|
,.BWEBB ( BWEBB[383:256] )
|
||
|
|
,.AB ( PortBAddr[ADDRWIDTH-2:LSB] )
|
||
|
|
,.DB ( PortBDataIn[383:256] )
|
||
|
|
,.QB ( U_QB[k][383:256] )
|
||
|
|
,.RTSEL ( 2'b00 )
|
||
|
|
,.WTSEL ( 2'b00 )
|
||
|
|
,.PTSEL ( 2'b00 )
|
||
|
|
);
|
||
|
|
tsdn28hpcpuhdb4096x128m4mw_170a U3_tsdn28hpcpuhdb4096x128m4mw_170a (
|
||
|
|
.CLK ( PortClk )
|
||
|
|
,.CEBA ( U_CEBA[k] )
|
||
|
|
,.WEBA ( PortAWriteEnable )
|
||
|
|
,.BWEBA ( BWEBA[511:384] )
|
||
|
|
,.AA ( PortAAddr[ADDRWIDTH-2:LSB] )
|
||
|
|
,.DA ( PortADataIn[511:384] )
|
||
|
|
,.QA ( U_QA[k][511:384] )
|
||
|
|
,.CEBB ( U_CEBB[k] )
|
||
|
|
,.WEBB ( PortBWriteEnable )
|
||
|
|
,.BWEBB ( BWEBB[511:384] )
|
||
|
|
,.AB ( PortBAddr[ADDRWIDTH-2:LSB] )
|
||
|
|
,.DB ( PortBDataIn[511:384] )
|
||
|
|
,.QB ( U_QB[k][511:384] )
|
||
|
|
,.RTSEL ( 2'b00 )
|
||
|
|
,.WTSEL ( 2'b00 )
|
||
|
|
,.PTSEL ( 2'b00 )
|
||
|
|
);
|
||
|
|
end
|
||
|
|
always @(posedge PortClk) begin
|
||
|
|
if(PortAWriteEnable == 1'b1) begin
|
||
|
|
AA_1D_MSB <= PortAAddr[ADDRWIDTH-1];
|
||
|
|
end
|
||
|
|
else begin
|
||
|
|
AA_1D_MSB <= AA_1D_MSB;
|
||
|
|
end
|
||
|
|
end
|
||
|
|
always @(posedge PortClk) begin
|
||
|
|
if(PortBWriteEnable == 1'b1) begin
|
||
|
|
AB_1D_MSB <= PortBAddr[ADDRWIDTH-1];
|
||
|
|
end
|
||
|
|
else begin
|
||
|
|
AB_1D_MSB <= AB_1D_MSB;
|
||
|
|
end
|
||
|
|
end
|
||
|
|
assign PortADataOut = {DATAWIDTH{AA_1D_MSB == 1'h0}} & U_QA[0]
|
||
|
|
| {DATAWIDTH{AA_1D_MSB == 1'h1}} & U_QA[1]
|
||
|
|
;
|
||
|
|
assign PortBDataOut = {DATAWIDTH{AB_1D_MSB == 1'h0}} & U_QB[0]
|
||
|
|
| {DATAWIDTH{AB_1D_MSB == 1'h1}} & U_QB[1]
|
||
|
|
;
|
||
|
|
end
|
||
|
|
else begin:dpram_model_generation
|
||
|
|
dpram_model #(
|
||
|
|
.DATAWIDTH ( DATAWIDTH )
|
||
|
|
,.ADDRWIDTH ( ADDRWIDTH-LSB )
|
||
|
|
) U_dpram_model (
|
||
|
|
.PortClk ( PortClk )
|
||
|
|
,.PortAWriteEnable ( PortAWriteEnable )
|
||
|
|
,.PortAChipEnable ( PortAChipEnable )
|
||
|
|
,.PortAByteWriteEnable ( PortAByteWriteEnable )
|
||
|
|
,.PortAAddr ( PortAAddr[ADDRWIDTH-1:LSB] )
|
||
|
|
,.PortADataIn ( PortADataIn )
|
||
|
|
,.PortADataOut ( PortADataOut )
|
||
|
|
,.PortBWriteEnable ( PortBWriteEnable )
|
||
|
|
,.PortBChipEnable ( PortBChipEnable )
|
||
|
|
,.PortBByteWriteEnable ( PortBByteWriteEnable )
|
||
|
|
,.PortBAddr ( PortBAddr[ADDRWIDTH-1:LSB] )
|
||
|
|
,.PortBDataIn ( PortBDataIn )
|
||
|
|
,.PortBDataOut ( PortBDataOut )
|
||
|
|
);
|
||
|
|
end
|
||
|
|
endgenerate
|
||
|
|
endmodule
|
||
|
|
|
||
|
|
|