diff options
author | Clifford Wolf <clifford@clifford.at> | 2018-09-10 11:57:24 +0200 |
---|---|---|
committer | Clifford Wolf <clifford@clifford.at> | 2018-09-10 11:57:24 +0200 |
commit | 51f1bbeeb08020a9b739d2bd0cf4d79ca6e62015 (patch) | |
tree | 8ef78b8e2e7d931c8ecf33bd73871b67cb227b4b /techlibs | |
parent | 12440fcc8f705c117b5f91fae24b7e5c4fbf8560 (diff) | |
download | yosys-51f1bbeeb08020a9b739d2bd0cf4d79ca6e62015.tar.gz yosys-51f1bbeeb08020a9b739d2bd0cf4d79ca6e62015.tar.bz2 yosys-51f1bbeeb08020a9b739d2bd0cf4d79ca6e62015.zip |
Add iCE40 SB_SPRAM256KA simulation model
Signed-off-by: Clifford Wolf <clifford@clifford.at>
Diffstat (limited to 'techlibs')
-rw-r--r-- | techlibs/ice40/cells_sim.v | 39 |
1 files changed, 30 insertions, 9 deletions
diff --git a/techlibs/ice40/cells_sim.v b/techlibs/ice40/cells_sim.v index 9f73aeb07..e0a07af32 100644 --- a/techlibs/ice40/cells_sim.v +++ b/techlibs/ice40/cells_sim.v @@ -920,19 +920,40 @@ parameter A_SIGNED = 1'b0; parameter B_SIGNED = 1'b0; endmodule -(* blackbox *) -module SB_SPRAM256KA( +module SB_SPRAM256KA ( input [13:0] ADDRESS, input [15:0] DATAIN, input [3:0] MASKWREN, - input WREN, - input CHIPSELECT, - input CLOCK, - input STANDBY, - input SLEEP, - input POWEROFF, - output [15:0] DATAOUT + input WREN, CHIPSELECT, CLOCK, STANDBY, SLEEP, POWEROFF, + output reg [15:0] DATAOUT ); +`ifndef BLACKBOX + reg [15:0] mem [0:16383]; + wire off = SLEEP || !POWEROFF; + integer i; + + always @(negedge POWEROFF) begin + for (i = 0; i <= 16383; i = i+1) + mem[i] = 'bx; + end + + always @(posedge CLOCK, posedge off) begin + if (off) begin + DATAOUT <= 0; + end else + if (CHIPSELECT && !STANDBY && !WREN) begin + DATAOUT <= mem[ADDRESS]; + end else begin + if (CHIPSELECT && !STANDBY && WREN) begin + if (MASKWREN[0]) mem[ADDRESS][ 3: 0] = DATAIN[ 3: 0]; + if (MASKWREN[1]) mem[ADDRESS][ 7: 4] = DATAIN[ 7: 4]; + if (MASKWREN[2]) mem[ADDRESS][11: 8] = DATAIN[11: 8]; + if (MASKWREN[3]) mem[ADDRESS][15:12] = DATAIN[15:12]; + end + DATAOUT <= 'bx; + end + end +`endif endmodule (* blackbox *) |