Adds FPGA-exclusive access to the onboard W25Q128JV SPI NOR flash for weights/bias/network persistence, layered as spi_flash_master (raw SPI, USRMCLK-driven) -> flash_copy_engine (flash<->PSRAM streaming, erase- before-write, Page Program loop) -> flash_slot_manager (16-slot catalog with CRC32), exposed via 8 new SPI opcodes (0x40-0x47). Fixes two pre-existing bugs found during bring-up: a psram_controller.v request lost during power-up, and a one-cycle-pulse race in the PSRAM arbiter request handshake. Full simulation + real Yosys/nextpnr-ecp5 synthesis verification (0 errors, Fmax 66.68MHz) in WORKLOG.md and docs/FPGA-Neural-Flash-Subsystem-Verification.md. Also updates docs/pinout to reflect the 56-signal real .lpf (3 new flash pins) and documents the WRITE_RAM/READ_RAM host backpressure risk found while testing this subsystem. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013xXuuRUWZScuo1DeYJxs3v
171 lines
4.4 KiB
Plaintext
171 lines
4.4 KiB
Plaintext
BLOCK ASYNCPATHS;
|
|
BLOCK RESETPATHS;
|
|
|
|
LOCATE COMP "clk" SITE "H5";
|
|
IOBUF PORT "clk" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "cs_n" SITE "B3";
|
|
IOBUF PORT "cs_n" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "data_ready_n" SITE "C3";
|
|
IOBUF PORT "data_ready_n" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "flash_cs_n" SITE "E4";
|
|
IOBUF PORT "flash_cs_n" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "flash_miso" SITE "D5";
|
|
IOBUF PORT "flash_miso" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "flash_mosi" SITE "D3";
|
|
IOBUF PORT "flash_mosi" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "irq_n" SITE "C4";
|
|
IOBUF PORT "irq_n" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "miso" SITE "A3";
|
|
IOBUF PORT "miso" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "mosi" SITE "C5";
|
|
IOBUF PORT "mosi" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "psram_a[0]" SITE "E16";
|
|
IOBUF PORT "psram_a[0]" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "psram_a[10]" SITE "H17";
|
|
IOBUF PORT "psram_a[10]" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "psram_a[11]" SITE "H18";
|
|
IOBUF PORT "psram_a[11]" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "psram_a[12]" SITE "J16";
|
|
IOBUF PORT "psram_a[12]" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "psram_a[13]" SITE "J17";
|
|
IOBUF PORT "psram_a[13]" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "psram_a[14]" SITE "C20";
|
|
IOBUF PORT "psram_a[14]" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "psram_a[15]" SITE "D19";
|
|
IOBUF PORT "psram_a[15]" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "psram_a[16]" SITE "E19";
|
|
IOBUF PORT "psram_a[16]" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "psram_a[17]" SITE "E20";
|
|
IOBUF PORT "psram_a[17]" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "psram_a[18]" SITE "F19";
|
|
IOBUF PORT "psram_a[18]" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "psram_a[19]" SITE "F20";
|
|
IOBUF PORT "psram_a[19]" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "psram_a[1]" SITE "F16";
|
|
IOBUF PORT "psram_a[1]" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "psram_a[20]" SITE "G20";
|
|
IOBUF PORT "psram_a[20]" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "psram_a[21]" SITE "H20";
|
|
IOBUF PORT "psram_a[21]" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "psram_a[22]" SITE "P18";
|
|
IOBUF PORT "psram_a[22]" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "psram_a[2]" SITE "D18";
|
|
IOBUF PORT "psram_a[2]" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "psram_a[3]" SITE "E17";
|
|
IOBUF PORT "psram_a[3]" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "psram_a[4]" SITE "E18";
|
|
IOBUF PORT "psram_a[4]" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "psram_a[5]" SITE "F18";
|
|
IOBUF PORT "psram_a[5]" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "psram_a[6]" SITE "F17";
|
|
IOBUF PORT "psram_a[6]" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "psram_a[7]" SITE "G16";
|
|
IOBUF PORT "psram_a[7]" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "psram_a[8]" SITE "G18";
|
|
IOBUF PORT "psram_a[8]" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "psram_a[9]" SITE "H16";
|
|
IOBUF PORT "psram_a[9]" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "psram_ce_n" SITE "N17";
|
|
IOBUF PORT "psram_ce_n" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "psram_dq[0]" SITE "K18";
|
|
IOBUF PORT "psram_dq[0]" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "psram_dq[10]" SITE "L17";
|
|
IOBUF PORT "psram_dq[10]" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "psram_dq[11]" SITE "M18";
|
|
IOBUF PORT "psram_dq[11]" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "psram_dq[12]" SITE "M17";
|
|
IOBUF PORT "psram_dq[12]" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "psram_dq[13]" SITE "N16";
|
|
IOBUF PORT "psram_dq[13]" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "psram_dq[14]" SITE "N18";
|
|
IOBUF PORT "psram_dq[14]" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "psram_dq[15]" SITE "P17";
|
|
IOBUF PORT "psram_dq[15]" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "psram_dq[1]" SITE "C18";
|
|
IOBUF PORT "psram_dq[1]" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "psram_dq[2]" SITE "D17";
|
|
IOBUF PORT "psram_dq[2]" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "psram_dq[3]" SITE "D20";
|
|
IOBUF PORT "psram_dq[3]" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "psram_dq[4]" SITE "G19";
|
|
IOBUF PORT "psram_dq[4]" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "psram_dq[5]" SITE "J18";
|
|
IOBUF PORT "psram_dq[5]" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "psram_dq[6]" SITE "J19";
|
|
IOBUF PORT "psram_dq[6]" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "psram_dq[7]" SITE "J20";
|
|
IOBUF PORT "psram_dq[7]" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "psram_dq[8]" SITE "K19";
|
|
IOBUF PORT "psram_dq[8]" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "psram_dq[9]" SITE "K20";
|
|
IOBUF PORT "psram_dq[9]" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "psram_lb_n" SITE "T16";
|
|
IOBUF PORT "psram_lb_n" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "psram_oe_n" SITE "R16";
|
|
IOBUF PORT "psram_oe_n" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "psram_ub_n" SITE "N19";
|
|
IOBUF PORT "psram_ub_n" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "psram_we_n" SITE "R17";
|
|
IOBUF PORT "psram_we_n" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "psram_zz_n" SITE "N20";
|
|
IOBUF PORT "psram_zz_n" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "rst" SITE "B4";
|
|
IOBUF PORT "rst" IO_TYPE=LVCMOS33;
|
|
|
|
LOCATE COMP "sclk" SITE "B5";
|
|
IOBUF PORT "sclk" IO_TYPE=LVCMOS33;
|