V5 FPGA配置回读

通过SELECTMAP32接口配置和回读XILINX公司生产的V5系列SRAM型FPGA,被配置的FPGA以下简称DUT,产生配置时序的FPGA简称配置FPGA。

上图描述了FPGA主动配置和从配置多种模式下M[2:0]及时钟CCLK的状态。
首先硬件上应将M[2:0]接成110,即Slave SelectMAP模式,该模式下总线宽度分8,16,32bit三种,本文按照32bit模式配置和回读。

1.配置
配置的过程就是将mcs文件中的配置字序列通过SelectMAP接口写入FPGA,配置字的写时序如下图:

如上图所示,SelectMAP接口包含PROGRAM_B、 INIT_B、CCLK、CS_B、DATA[7:0](8bit模式)、RDWR_B、BUSY以及DONE。其中DATA接口为双向,PROGRAM_B、 INIT_B、CCLK、CS_B、RDWR_B为DUT的输入,由配置FPGA产生,CCLK频率为25MHz。BUSY和DONE为DUT的输出,配置FPGA根据BUSY和DONE信号判断DUT是否配置完成。

mcs中配置字序列以及具体含义如下:
FFFFFFFF Dummy Word
000000BB BusWidthWord
11220044 8/16/32BusWidth
FFFFFFFF Dummy Word
FFFFFFFF Dummy Word
AA995566 Sync Word

以上为总线宽度检测和同步字序列。在SlaveSelectMAP模式下,默认配置数据总线宽度为8bit,DATA[7:0]首先检测总线宽度序列,如果DATA[7:0]检测到0xBB后是0x11,则总线宽度为8bit,如果0xBB后是0x22,则总线宽度为16bit,如果0xBB后是0x44,则总线宽度为32bit,在总线宽度序列检测完毕后,接收同步字序列AA995566。

在发送完同步字后,按照以下顺序发送状态寄存器等写指令,对FAR、CMD等状态寄存器进行写操作,使FPGA处于待接收配置字状态。
20000000 Type 1NOOP
30020001 Type 1 write1 words to WBSTAR
00000000 Warm BootStart Address
30008001 Type 1 write1 words to CMD
00000000 NULL
20000000 Type 1NOOP
30008001 Type 1 write1 words to CMD
00000007 RCRC
20000000 Type 1NOOP
20000000 Type 1NOOP
30022001 Type 1 write1 words to TIMER
00000000 TIMERvalue
30026001
00000000
30012001 Type 1 write1 words to COR0
02003F35 done@4 m@0l@0 gts@3 gwe@5
3001C001 Type 1 write1 words to COR1
00000000 COR1value
30018001 Type 1 write1 words to ID
03300093 ID code
30008001 Type 1 write1 words to CMD
00000009 SWITCH
20000000 Type 1NOOP
3000C001 Type 1 write1 words to MASK
00400000 MASKvalue
3000A001 Type 1 write1 words to CTL0
00400000 CTL0value
3000C001 Type 1 write1 words to MASKR
00000000 MASKvalue
30030001 Type 1 write1 words to CTL1
00000000 CTL1value
20000000 Type 1NOOP
20000000 Type 1NOOP
20000000 Type 1NOOP
20000000 Type 1NOOP
20000000 Type 1NOOP
20000000 Type 1NOOP
20000000 Type 1NOOP
20000000 Type 1NOOP
30002001 Type 1 write1 words to FAR
00000000 FARvalue
30008001 Type 1 write1 words to CMD
00000001 WCFG
20000000 Type 1NOOP
30004000 Type 1 write0 words to FDRI
50177910 Type 2 write1538320 words to FDRI

这些指令的含义如下:
FPGA配置bit流包含两种类型的配置字指令,第一种类型为读写操作指令,格式如下

R为保留位,没有实际意义。其中Opcode的含义如下

第二种类型的配置字指令必须跟随在类型一之后,用于长字节的写操作

一些状态寄存器的地址如下所示

在对状态寄存器进行写操作之后,开始写入配置内容,V5系列SRAM型FPGA共需要配置1538320个32bit的配置字:
00000000 Data word 1
Data word n
Data word n + 1
00000000 Data wordlast (1538320)

在配置内容写入FPGA后,还需要对FAR、CRC、CMD等寄存器进行写操作,完成配置过程。
30000001 Type 1 write1 words to CRC
33FE37CA CRC value
30008001 Type 1 write1 words to CMD
0000000A GRESTORE
20000000 Type 1 NOOP
30008001 Type 1 write1 words to CMD
00000003 LFRM
3000C001 Type 1 write1 words to MASK
00000000 Data word 1
00000000 CTL0register value
20000000 Type 1 NOOP

20000000 Type 1 NOOP
30008001 Type 1 write1 words to CMD
00000005 START
20000000 Type 1 NOOP
30002001 Type 1 write1 words to FAR
003F8000 FAR value
3000C001 Type 1 write1 words to MASK
00400000 Data word 1
3000A001 Type 1 write1 words to Control Register 0
00400000 ControlRegister 0 value
30000001 Type 1 write1 words to CRC
0C90449E CRC value
30008001 Type 1 write1 words to CMD
0000000D DESYNCH
20000000 Type 1 NOOP

20000000 Type 1 NO OP

发送完以上配置结束,如果配置成功,DUT会将DONE信号拉高。

2.回读比较
回读的过程和配置过程类似,也是先对DUT的状态寄存器进行写操作,然后通过RDWR_B信号拉高控制对DUT进行bit流回读,回读时序如下:

Write
写总线宽度和同步字
FFFFFFFF Dummy Word
000000BB Bus WidthSync Word
11220044 Bus WidthDetect
FFFFFFFF Dummy Word
AA995566 Sync Word

写状态寄存器
20000000 Type 1 NOOPWord 0
30008001 Type 1 Write1 Word to CMD
0000000B SHUTDOWNCommand
20000000 Type 1 NOOPWord 0
30008001 Type 1 Write1 Word to CMD
00000007 RCRC Command
20000000 Type 1 NOOPWord 0
20000000 Type 1 NOOPWord 0
20000000 Type 1 NOOPWord 0
20000000 Type 1 NOOPWord 0
20000000 Type 1 NOOPWord 0
20000000 Type 1 NOOPWord 0
30008001 Type 1 Write1 Word to CMD
00000004 RCFG Command
20000000 Type 1 NOOPWord 0
30002001 Type 1 Write1 Word to FAR
00000000 FAR Address= 00000000
28006000 Type 1 Read0 Words from FDRO
48177910 Type 2 Read 1,538,320Words from FDRO
20000000 Type 1 NOOPWord 0
20000000 .. Type 1 31more NOOPs Word 0

读bit流
Read
00000000 Packet DataRead FDRO Word 0
...
00000000 Packet Data Read FDRO Word 1538319

写状态寄存器
Write
20000000 Type 1 NOOPWord 0
30008001 Type 1 Write1 Word to CMD
00000005 STARTCommand
20000000 Type 1 NOOPWord 0
30008001 Type 1 Write1 Word to CMD
00000007 RCRC Command
20000000 Type 1 NOOPWord 0
30008001 Type 1 Write1 Word to CMD
0000000D DESYNCHCommand
20000000 Type 1 NOOPWord 0
20000000 Type 1 NOOP Word 0
通过以上读写指令操作,可以完成对FPGAbit流的回读。

在ISE中bit流生成时勾选以下三个选项,将会生成rbd(回读)文件和msd(掩码)文件,

在ucf文件中添加如下约束,确保SELECTMAP32接口在配置完后仍然保持:
CONFIGCONFIG_MODE=S_SELECTMAP32+READBACK ;

回读过程中,将回读的32bit内容依次与存储在片外PROM中的rbd文件比较,注意其中msd文件中为1对应的rbd中的bit位不需要比较。如果比较结果除不需要比较的bit位以外其他都一致,则比较结果正确,否则判断发生故障。回读比较可以用来检测FPGA的配置区域逻辑是否发生单粒子翻转。

文章来源:FPGA那点事儿