summaryrefslogtreecommitdiffstats
path: root/de1/fpga-flash-nor/protocol.txt
diff options
context:
space:
mode:
authorroot <root@ka-ata-killa.ourano.james.local>2021-02-24 23:45:58 +0000
committerroot <root@ka-ata-killa.ourano.james.local>2021-02-24 23:45:58 +0000
commit1575d4f53805f177474b5bb96daebede9b2dfb73 (patch)
tree91f6819f7280088bb9344fae7dbef8c43a0a04c0 /de1/fpga-flash-nor/protocol.txt
downloadbase-1575d4f53805f177474b5bb96daebede9b2dfb73.tar.gz
base-1575d4f53805f177474b5bb96daebede9b2dfb73.tar.bz2
base-1575d4f53805f177474b5bb96daebede9b2dfb73.zip
Diffstat (limited to 'de1/fpga-flash-nor/protocol.txt')
-rw-r--r--de1/fpga-flash-nor/protocol.txt64
1 files changed, 64 insertions, 0 deletions
diff --git a/de1/fpga-flash-nor/protocol.txt b/de1/fpga-flash-nor/protocol.txt
new file mode 100644
index 0000000..d7a1968
--- /dev/null
+++ b/de1/fpga-flash-nor/protocol.txt
@@ -0,0 +1,64 @@
+Virtual IR register (4 bits):
+
+0 - bypass
+1 - read fifo
+2 - write fifo space query
+3 - write fifo
+4 - read ready (single bit)
+5 - write reset flag (single bit; write 1 then 0)
+F - bypass
+
+Virtual DR register 1:
+
+READ FIFO
+
+72 bits:
+-binary- -------hex-------
+VNNNCCCC DDDDDDD DDDDDDDDD - V = valid
+ - N = sequence counter
+ - C = top 4 bits of command
+
+Read transactions can be streamed by shifting out a multiple of 72 bits.
+
+Virtual DR register 2:
+
+Reads the amount of space in the write FIFO as an 8-bit number.
+
+
+Virtual DR register 3:
+
+WRITE FIFO
+
+72 bits:
+-binary- -------hex-------
+
+000XXXXX XXXXXXXX XXXXXXXX - noop
+
+0010XXXX XXXXXXXX CCCCCCCC - delay for C cycles @ 20 MHz
+
+0101XXXX AAAAAAAA CCCCCCCC - zero check
+ Returns last address read in [63:32]
+ Returns last datum 1's extended in [31:0] - FFFFFFFF on success
+
+0110XXXX XXXXXXXX TTTTTTTT - read back address register, token
+ Returns address register in [63:32]
+ Returns token in [31:0]
+
+0111XXXX AAAAAAAA CCCCCCCC - compute CRC32
+ Returns last address read in [63:32]
+ Returns Ethernet CRC32 of the region in [31:0]
+
+100SEEEE AAAAAAAA DDDDDDDD - write cycle (address, data)
+ address register set to A if S=1
+ E is byte enables; for a byte flash
+ E should be set to 0001
+
+1011CCCC DDDDDDDD DDDDDDDD - program bytes (C = byte count)
+
+1101XXXX AAAAAAAA CCCCCCCC - set address register to A
+ read C bytes (pad output to 64 bits)
+ if C=0 no read is done
+
+111XXXXX XXXXXXXX XXXXXXXX - noop
+
+For vestigial writes the data should be right-justified (LSB valid)