summaryrefslogtreecommitdiffstats
path: root/de1/fpga-flash-nor/protocol.txt
blob: d7a19687e84f702caab534ae79c691f4dfbeaad7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
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)