puts("fw..");
#if 1
+#if 0
// print out configuration parameters for QSPI
volatile uint32_t *qspi_cfg = (uint32_t*)0xc0003000;
for (int k=0; k < 10; k++) {
uart_writeuint32(tmp);
puts("\n");
}
-
+#endif
volatile uint32_t *qspi = (uint32_t*)0x10000000;
// let's not, eh? writel(0xDEAF0123, (unsigned long)&(qspi[0]));
// tmp = readl((unsigned long)&(qspi[0]));
-* download micron n25q model:
-https://media-www.micron.com/-/media/client/global/documents/products/sim-model/nor-flash/serial/bfm/n25q/n25q_256mb_18v_micronxip_vg15,-d-,tar.gz?rev=20813bd927aa4890863866045fd77241
-* at line 2039 and 2065 change "fork : CP_sendToBus" and "join"
- to "begin : CP_sendToBus" and "end"
- (see n25q.patch)
-
-the micron n25q model contains the following copyright notice:
-Copyright 2013 Micron Technology, Inc. All rights reserved.
-(no license given, disclaimer noted)
-
-* download cyperss model:
+* download cypress model:
https://community.infineon.com/gfawx74859/attachments/gfawx74859/NonVolatileRAM/994/1/Cy15b104qs.zip
+* unzip
+
+Copyright notices in cy15b104qs.v:
+Copyright (C) 2014 Spansion, LLC.
+(no explicit license given)
HYPERRAM_DIR=./hyperram_model/s27kl0641/model
-QSPI_DIR=./qspi_model/N25Q256A11E_VG15/
+QSPI_DIR=./qspi_model/Cy15b104qs/model/
# create the build_simsoc/top.il file with firmware baked-in
-#python3 src/ls2.py isim ./coldboot/coldboot.bin
+python3 src/ls2.py isim ./coldboot/coldboot.bin
# do some voodoo magic to get icarus to be happy with the ilang file
-#yosys simsoc.ys
+yosys simsoc.ys
# fix a bug in Lattice ECP5 models
cp ${LIB_DIR}/DDRDLLA.v DDRDLLA.v
${LIB_DIR}/ODDRX2DQSB.v ${LIB_DIR}/IDDRX2DQA.v \
DDRDLLA.v \
-I ${QSPI_DIR} -DN25Q128A13E \
- ${QSPI_DIR}/code/N25Qxxx.v \
+ ${QSPI_DIR}/cy15b104qs.v \
${LIB_DIR}/CLKDIVF.v
vvp -n simsoc -fst-speed
Resource("spi_0", 0,
Subsignal("dq", Pins("W2 V2 Y2 W1", dir="io")),
Subsignal("cs_n", Pins("R2", dir="o")),
- Attrs(PULLMODE="NONE", DRIVE="4", IO_TYPE="LVCMOS33"))
+ Attrs(PULLMODE="NONE", DRIVE="8", SLEWRATE="FAST",
+ IO_TYPE="LVCMOS33"))
]
platform.add_resources(spi_0_ios)
spi_0_pins = platform.request("spi_0", 0, dir={"dq":"io", "cs_n":"o"},
`timescale 1 ns / 1 ns
-`include "include/DevParam.h"
-
module simsoc_hyperram_tb;
// GSR & PUR init requires for Lattice models
GSR GSR_INST (
wire io_rwds;
// SPI
- wire spi_clk;
wire spi_cs_n;
wire spi_rst_n;
wire [3:0] io_spi_dq;
.RESETNeg(o_resetn)
);
- N25Qxxx N25Qxxx
- (
- .S(spi_cs_n),
- .C_(spi_clk),
- .HOLD_DQ3(io_spi_dq[3]),
- .DQ0(io_spi_dq[0]),
- .DQ1(io_spi_dq[1]),
- .Vcc(VCC_3V),
- .Vpp_W_DQ2(io_spi_dq[2])
- );
-
// uart, LEDs, switches
wire uart_tx ;
reg uart_rx = 0;
.hyperram_0__ck__io(o_clk),
.hyperram_0__dq__io(io_dq),
// Quad SPI
- .spi_flash_4x_0__dq__io(io_spi_dq),
- .spi_flash_4x_0__cs__io(spi_cs_n),
+ //.spi_flash_4x_0__dq__io(io_spi_dq),
+ //.spi_flash_4x_0__cs__io(spi_cs_n),
+ .spi_0_0__dq__io(io_spi_dq),
+ .spi_0_0__cs_n__io(spi_cs_n),
// uart
.uart_0__rx__io(uart_rx),
.rst_0__io(1'b0)
);
+ cy15b104qs cy15b104qs
+ (
+ .CSNeg(spi_cs_n),
+ .SCK(simsoctop.spi0.spi_clk),
+ .RESETNeg(io_spi_dq[3]),
+ .SO(io_spi_dq[0]),
+ .SI(io_spi_dq[1]),
+ .WPNeg(io_spi_dq[2])
+ );
+
initial
begin
$dumpfile("simsoc_hyperram.fst");
initial
begin
- spi_clk = top.spi0.spi_clk;
-
// run for a set time period then exit
#120000000;