谁说配置难?这篇文章让你轻松掌握xilinx 7系列FPGA配置技巧
通过上述讲解,可知xilinx7系列FPGA配置方式有7种,其中JTAG优先级最高,在其他模式下也可以直接进行JTAG配置。然后六种其实可以根据外设区分,如果是flash对FPGA进行配置,那么FPGA只能作为主机,根据数据线的宽度可分为SPI模式和BPI模式,其中SPIx1和BPI模式支持菊花链方式。
本文旨在通过讲解不同模式的原理图连接方式,进而配置用到引脚的含义(手册上相关引脚含义有四、五页,通过本文理解基本上能够记住所有引脚含义以及使用场景),熟悉xilinx 7系列配置流程,以及设计原理图时需要注意的一些事项,比如flash与FPGA的上电时序。
xilinx配置相关的引脚主要集中在bank0,bank14、bank15也存在一些辅助配置引脚,配置的模式主要由bank0上面的M[2:0]三个引脚的状态决定,总共存在7种不同的配置方式(因为M[2:0]=3’b011不存在),因为M[2:0]三个引脚内部有上拉电阻,所以默认是从串行配置模式(3'b111),配置模式如下表1所示。
表1 配置模式
配置模式 | M[2:0] | 总线位宽 | CCLK方向 |
Master Serial | 000 | X1 | 输出 |
Master SPI | 001 | X1,X2,X4 | 输出 |
Master BPI | 010 | X8,X16 | 输出 |
Master SelectMAP | 100 | X8,X16 | 输出 |
JTAG(only) | 101 | X1 | 无效 |
Slave SelectMAP | 110 | X8,X16,X32 | 输入 |
Slave Serial | 111 | X1 | 输入 |
注意:如果M[2:0]为101,则该FPGA只支持JTAG进行配置。处于其余配置模式下时,依旧可以使用JTAG模式进行调试,并且优先级最高。
一般必然存在的JTAG调试模式,另外使用较多的是主SPI模式和从串行配置模式,后面主要讲解这几种配置,其余并行配置模式由于消耗引脚较多,一般不会使用,与这几种串行模式的区别仅在于数据引脚的区别,需要了解的可以自行查看ug470手册,下载地址如下,或者在后台回复ug470即可获取。
xilinx.com/content/dam/xilinx/support/documents/user_guides/ug470_7Series_Config.pdf
不同模式只有一些用于传输数据的引脚不同,都会使用一些相同的控制信号,并且在不同模式下这些信号功能基本一致。
共用控制信号
CFGBVS引脚
bank0电压范围选择引脚,该引脚用于确定bank0的供电电源的范围,如果该引脚接VCC,则bank0使用2.5V或者3.3V供电,如果接GND,则bank0供电电压小于等于1.8V。如下图所示,CFGBVS接高电平3.3V,则bank0的供电电压VCC_0_1和VCC_0_2均接3.3V。当然可以加上拉和下拉电阻。
图1 bank0电压配置
PROGRAM_B引脚
这个引脚可以清除FPGA内部的所有配置信息,让FPGA回到配置状态,重新进行配置,低电平有效。但注意在上电时把PROGRAM_B 保持为低电平不会使 FPGA 配置保持复位状态,延迟配置的时间需要使用INIT_B信号配合完成,后续讲解上电配置时详细说明。PROGRAM_B 引脚外部需要通过4.7KΩ以上的电阻上拉至VCC。相关连接如图1所示原理图中该管脚外部通过4.7KΩ上拉电阻接到VCC,并且将该信号引出,便于其他控制器可以控制ARM的配置。
INIT_B引脚
FPGA 初始化引脚或配置错误信号,低电平有效。当 FPGA 处于配置复位状态或当 FPGA 正在初始化(清除)其配置存储器(PROGRAM_B信号为低电平)时或当 FPGA 检测到配置错误时,FPGA 会将该引脚驱动为低电平。在上电期间,可以通过将该引脚拉低,来延迟上电配置程序的时间。当完成初始化后,该引脚被释放,外部上拉电阻将该引脚拉高,当检测到该信号上升沿之后,FPGA会读取M[2:0]引脚状态,从而确定后续采用哪种配置方式进行配置。故该引脚外部也需要通过4.7KΩ的电阻上拉到VCC。
DONE引脚
该信号高电平表示FPGA配置序列完成,默认情况下,该引脚为开漏输出,内部有一个不大于10KΩ的上拉电阻,外部只需要通过一个330Ω的电阻上拉即可。
PUDC_B引脚
该引脚的状态决定在配置期间非专用配置IO的状态,如果该引脚接高电平,则这部分IO设置为高阻态,如果该引脚为低电平,则这部分引脚被上拉输出高电平。该引脚外部通过1KΩ电阻上拉到VCCO_14或者下拉到GND。注意该引脚不能悬空,连接如图2所示。
图2 pudc_b信号上下拉配置
VCCBATT引脚
该引脚是FPGA内部易失性存储器的电池备用电源,用于存储AES解密器的密钥,如果不需要使用AES易失性密钥存储区域中的解密器密钥,那么将该引脚接地就行,该引脚不是I/O,不受VCCO_0的影响。了解该引脚功能即可,一般都用作接地处理。
不管采用何种配置方式,上述5个信号均具有相同功能,并且必须进行设置,不能悬空处理,接下来就可以看一下具体的上电配置流程,同样,不管是何种配置方式,上电配置流程均相同,配置模式只能影响接收发送数据的方式。
配置流程
配置流程包含三个大步骤(复位,加载程序,初始化启动),分为8个小步骤,如图3所示:
图3 7系列FPGA配置步骤
设备上电
这部分主要涉及到不同电源轨上电时序的要求,不同系列上电要求不一致,需要参考对应手册的上电时序。电源的种类如图4所示。
图4 电源种类
上图对应的电源种类一般位于电源bank上,原理图如图5所示,Vccint为内核电源,另外有给AES加密和BRAM供电的电源,还有bank0的供电电源,ban14和bank15辅助配置供电电源,最后还有各个IO bank供电引脚。
图5 电源bank
清除配置内存
如图6所示,在上电期间,program_b引脚拉低,FPGA的配置存储器按顺序清零,BRAM被重置为初始状态,触发器通过全局置位(GSR)重置被初始化。在此期间,除了少数配置引脚之外,其余IO通过全局三态将I/O置为高阻态,如果pudg_b为低电平,则这些IO内部上拉电阻使能,输出高电平。上电配置时,init_b信号在初始化期间被内部驱动输出低电平,经过Tpor时间后释放。
图6 上电清除时序
如果不是上电,其余情况的初始化如图7所示,将program_b引脚拉低,初始化配置存储器,持续时间由Tprogram决定。一直把program_b信号拉低是无法让FPGA停留在初始化过程的,想要停留在这个过程中只能通过把init_b信号保持为低电平来实现延迟初始化过程。如果init_b引脚外部保持低电平,则器件在初始化过程中等待,直到引脚释放,满足TpoR或TPL延迟。
图7 上电配置复位时序
这里需要注意一个上电顺序的点:
上电时,FPGA会自动开始其配置过程,当FPGA处于主机串行SPI配置模式时,FPGA将FCS_B置为低电平,选择SPI闪存,并向SPI闪存发送读取命令。在FPGA将FCS_B驱动为低电平并发送读取命令之前,SPI闪存必须处于唤醒状态并准备好接收命令。
💡 由于不同的电源轨可以为FPGA和SPI闪存供电,或者因为FPGA和SPI闪存可以沿着共享电源的斜坡在不同的时间做出响应,因此必须特别注意FPGA和SPI闪存的上电顺序或上电斜坡。上电顺序或电源斜坡可能会导致FPGA在Flash完全上电之前启动,反之亦然。此外,一些SPI闪存设备指定了一个最短时间段,该时间段从通电开始可能是几毫秒,在此期间不得选择该设备。对于许多具有近乎同时的电源斜坡的系统,FPGA上电重置时间(TpoR)可以充分延迟FPGA配置过程的开始,使得SPI闪存在FPGA配置过程开始之前就准备好了。一般系统设计必须考虑电源顺序、电源斜坡、FPGA上电复位时序和SPI闪存上电时序对开始配置和SPI闪存就绪之间的时序关系的影响。
采样模式引脚状态
图8 采样模式引脚
在init_b引脚上升沿时,FPGA采集模式引脚M[2:0]的状态,确定采用何种配置模式,如果是主机模式,则开始驱动CCLK输出时钟信号,之后FPGA在CCLK时钟的上升沿采集数据输入引脚的数据。BPI和SelectMAP模式,总线宽度初始为8,在总线宽度检测序列之后,更新状态寄存器,更新到对应的总线宽度。
Synchronization
图9 自动检测位宽
对于BPI、Slave SelectMAP和Master SelectMAP这些并行模式,状态寄存器默认使用8位总线,需要经过自动检测之后,才能够确定其使用总线的具体位宽,所以在初始化之后,在传输配置数据之前,要确定具体的总线位宽。从机串口、主机串口、SPI和JTAG模式会忽略总线宽度检测模式。
自动检测总线位宽的方式
Xilinx工具生成的所有配置文件都包括总线宽度自动检测模式,如果模式引脚设置为主机串行、从机串行、JTAG或SPI模式,则配置逻辑会忽略这些模式。FPGA其实是通过2个32位的数据来判断总线位宽的,如下表所示,根据总线低8位数据状态来确定总线实际位宽,如果第一次检测低八位数据为0xBB,第二次检测到数据为0x11,则该总线每次传输八位数据,即总线位宽为8位。如果第一次检测数据为0xBB,第二次检测数据为0x22,则总线每次传输16位数据,即总线位宽为16位。如果第一次检测为0xBB,第二次检测数据为0x44,则总线每次传输32位数据,即总线位宽为32位。
如果0xBB之后的数据不是0x11、0x22或0x44,则会重新检测下一个0xBB,直到找到有效序列为止。确认外部总线宽度后,切换到对应的总线宽度并锁定。
表2 自动检测位宽数据
然后,必须向配置逻辑发送一个特殊的32位同步字(0xAA995566),提醒器件即将到来的配置数据,并将配置数据与内部配置逻辑对齐。同步前配置输入引脚上的任何数据都会被忽略,自动检测总线位宽序列除外。
可以通过两个寄存器的状态确定同步是否成功以及总线宽度,如图10所示。
图10 与同步有关的信号
检查设备ID
图11 检测设备ID
设备同步后,必须先通过设备ID检查,然后才能加载配置数据帧。这可防止使用针对不同设备格式化的比特流进行配置。如果在配置过程中发生ID错误,设备将尝试执行回退重新配置。
设备ID检查是通过配置逻辑文件中的命令执行的,而不是通过JTAG IDCODE寄存器执行。
7系列FPGA JTAG ID代码寄存器的格式如下:
vvvv:fffffff:aaaaaaaaa:ccccccccccccc1 //其中:V=版本 f=7位系列
代码 A=9位阵列代码(包括4位子系列和5位设备代码) C=公司代码
加载配置数据
当总线位宽检测和同步完成,并且设备ID正确之后,就该加载配置数据了,不同模式按照不同的总线加载数据即可。
图12 加载配置数据
CRC校验
图13 CRC校验
这个流程没有什么介绍的,就是计算接收数据的CRC校验和,与配置文件中的校验和进行对比,一致则传输正确,不同则将init_b信号拉低后终止配置。
启动
图14 启动
加载配置帧后,比特流指示设备进入启动序列。启动序列需要做一些操作,第一步可以选择是否等待MMCM时钟管理单元锁定和DCI匹配(一般这两个都不用关心),第二步释放done引脚,通过外部上拉电阻变为高电平,第三步释放GTS信号,也就是启用除少数配置引脚之外的所有I/O,第四步使能全局写入启用信号(GWE),该信号使能后,CLB和IO管理单元里面的触发器和RAM就可以根据初始化的值改变状态了,第五步就是使能EOS信号表示配置和启动过程均结束。前四步的顺序可以在软件设置里面进行调整,但第五步是固定的,对应时序图如图15所示。
图15 配置信号排序(默认启动设置)
上述就是一个完整的配置步骤,了解这个过程之后,就能够具体了解整个上电流程的时序,以及前面讲解5个通用配置管脚的功能,能够知道在配置期间其余IO的状态。
配置方式
由2.3小节知,在init_b上升沿时,通过采集模式引脚M[2:0]状态确定此次的配置方式,不同配置会使用不同的管脚(2.6步骤所使用引脚)来传输数据。
主、从串行配置
串行模式分为主串行模式(FPGA作为主机,模式引脚状态M[2:0]=3’b000)和从串行模式(FPGA作为从机,模式引脚状态M[2:0]=3’b111),区别在于配置数据的时钟引脚CCLK方向不同。从串行模式,CCLK作为输入信号,对应原理图配置如图16所示。
图16 从串行配置模式原理图
不管是什么模式,一般都会带有JTAG(一般也会存在TCK、TMS、TDI、TDO这四个JTAG引脚)。通过上图可知,单个FPGA通过从串行配置除了1节讲到的通用引脚之外,该配置只使用到了时钟引脚CCLK和数据输入管脚DIN,这两个引脚用于在2.6小节配置过程中加载数据,进而完成配置。
上述连接的优势在于,ARM或者CPLD可以通过拉低program_b引脚,来重新配置FPGA,当done引脚为高电平表示FPGA已经配置完成,另外消耗的引脚极少。
从din引脚输入的数据,会通过dout引脚输出,所以可以通过菊花链的方式,使用一片ARM或者CPLD达到配置多片FPGA的目的,连接方式如图17所示,多片FPGA的配置引脚连在一起,配置数据会在前一片FPGA的配置时钟下降沿从DOUT引脚输出,后一片FPGA可以在配置时钟下个时钟上升沿从DIN引脚采集数据,从而达到配置多片FPGA的目的。
图17 从串行模式菊花链配置多片FPGA
当然还可以直接将数据线也全部并联,如图18所示,这种并行配置要求所连接的FPGA型号必须完全相同,且配置相同代码。
图18 并行配置原理图
主串行模式与从串行模式的引脚连接基本一致,上电时序也基本一致,如图19所示,但有两点区别:其一,主机模式的CCLK对于FPGA来说是输出管脚,该管脚在init_b拉高后才开始输出时钟序列,而从机模式下CCLK信号作为FPGA输入信号,对时钟序列持续时间没有要求。其二,由于主机模式配置时钟管脚CCLK作为输出信号,多片FPGA不能共用配置时钟信号,所以主机模式下不能实现菊花链功能。
图19 主、从串行模式配置时序
💡 综上,主、从串行配置模式,除了通用的配置管脚和JTAG配置管脚之外,需要使用配置时钟CCLK和配置输入数据引脚DIN,如果需要使用菊花链配置多片FPGA,那么还会用到配置数据输出引脚DOUT。
主SPI模式
此模式应该是altera和xilinx的FPGA配置最常用的模式,根据配置数据线不同可分为SPIX1、SPIX2、SPIX4三类。因为配置数据输出管脚DOUT只有一位,故只有SPIX1支持菊花链配置,该配置对应原理图如图20所示。
图20 主SPI x1/x2时序图
使用FCS_B引脚作为flash闪存的片选信号,CCLK作为配置时钟信号,DIN引脚作为数据输入引脚,而MOSI引脚作为FPGA数据输出引脚,向flash发送相关指令,然后获取配置数据。默认情况下,在配置时钟CCLK上升沿数据通过DIN引脚输入FPGA,在CCLK下降沿数据通过DOUT引脚输出FPGA,因此菊花链连接方式依旧是使用前一片FPGA的DOUT引脚连接后一片FPGA的DIN引脚,如图21所示。
图21 主SPI模式菊花链配置
💡 注意:一个配置系统只允许存在一个主机,因为所有器件的配置时钟CCLK信号必须要共用,所以第一片FPGA采用主SPI配置,其余FPGA采用从串行配置方式,体现在上图的模式引脚M[2:0]的状态。
SPI配置的时序如图22所示,在同步和检验设备ID之后,先发送8位读命令,然后发送24位读地址数据,8个配置时钟周期之后,DIN引脚开始传输配置数据。CCLK在Configrate之前为3MHz,在Configrate期间会提高数据传输频率。
图22 7系列FPGA SPI x1模式序列
7系列FPGA的主SPI配置模式支持双路和四路快速读取操作,FPGA首先将快速读取操作码(0x0B)传输到SPI,然后读取命令以更改比特流早期部分的数据宽度。然后,FPGA向SPI设备发出用于双路(操作码0x3B)或四路(0x6B)读取操作的新读取命令,并开始读取适当的数据宽度。
SPI X 4的原理图连接如下所示,此处的MOSI引脚在发送0x6B之后就会变为输入数据的最低位D[0],与其他三根数据线构成输入数据线,其余与SPIx1方式相同,只是不能使用菊花链方式进行配置了。
图23 7系列FPGA SPI x4模式序列
💡 综上,主SPI模式处理通用配置引脚和JTAG调试引脚外,与配置相关的就片选引脚FCS_B,配置时钟CCLK,数据输入DIN,数据输出MOSI,菊花链数据输出DOUT。原理图设计时需要特别注意DOUT与MOSI是两个不同引脚,功能也不相同。如果是SPIx2在发送0x3B之后,会以2位数据宽度读取flash闪存里的数据,MOSI变为输入数据的最低位D[0],而数据输入管脚DIN作为数据输入的D[1],由此SPIx2与SPIx1的原理图设计是相同的。如果是SPIx4则需要在SPIx2的基础上增加两位数据线D[3]和D[4]连接到flash。
前面提到默认是在时钟上升沿采集数据,但是可以通过设置在时钟下降沿采集数据,一般不会用到,需要了解的查看UG470手册即可。
主、从SelectMAP配置模式
SelectMAP配置接口为7系列FPGA配置逻辑提供8位、16位或32位双向数据总线接口,可用于配置和回读。数据总线的回读和读方向仅适用于从SelectMAP模式,根据配置器件的数量不同,一般分为三种单器件配置,多器件串联菊花链配置,多个相同器件并联配置相同程序。
单器件配置
这种配置方式一般使用微处理器或者CPLD来配置单个7系列器件,可以使用主SelectMAP模式(使用来自FPGA的CCLK)或从SelectMAP模式(如下图24),一般首选从SelectMAP模式,因为该模式支持回读。关于该模式下微处理器的控制方式可以参考XAPP583手册。
图24 单从机选择微处理器或CPLD中的MAP配置
由于D[31:0]这32位数据线分布在bank14和bank15,所以需要配置这两个bank电源VCCO_14、VCCO_15。CSI_B信号作为片选信号,用来指示数据线和RDWR_B的信号是否有效,如果该信号为高电平,则D[31:0]被视为高阻状态,通过控制该信号可以连续配置数据或者间断的配置数据。由于数据线D[31:0]是双向的,需要通过RDWR_B信号状态判断数据线作为输入还是输出,因此可以通过控制该信号状态来控制写入或者读出数据,从而可以实现数据回读,如果不需要回读,可以把该引脚接地处理。
在从配置模式下,当CSI_B为低电平时,如果RDWR_B的值从低电平变为高电平会终止配置,并且将数据线异步更改为输出。当CSI_B为低电平时,将RDWR_B的值从高变为低会终止回读,并且将数据线异步更改为输入。故CSI_B使能时,RDWR_B信号状态不能发生变化。
连续配置时序如图25所示,上电后,配置控制器设置写控制的RDWR_B信号(RDWR_B=0),并使能CSI_B信号(CSI_B=0)。在使能CSI_B之前,RDWR_B必须被驱动为低电平并保持不变,否则会终止配置。在下一个CCLK上升沿,FPGA开始采样数据引脚[7:0]状态,自动匹配数据总线宽度,直到确定总线宽度为止。之后对数据总线的适当宽度进行采样,以用于同步字搜索,同步完成后,配置开始。加载配置比特流完成后,器件进入启动序列。在比特流指定的启动序列阶段,FPGA将其DONE置为高电平。控制器应继续发送CCLK脉冲,直到启动序列完成。(根据2.8小节知在Done变为高电平后,可能需要几个CCLK脉冲)。
配置后,CSI_B和RDWR_B信号可以拉高,也可以保持使能,由于SelectMAP端口处于非活动状态,此时切换RDWR_B不会导致终止配置。
图25 连续x8 SelectMAP数据加载
如果控制器无法提供连续的数据流,那么可以使用非连续的数据加载方式,这种方式可以通过两种方式实现。方法一是通过拉高CSI_B信号(如图26所示),第二种方法是通过停止生成CCLK实现(如图27所示)。
如图26,在3、4、7、8、10、11、12的CCLK上升沿处,CSI_B信号使能,加载一个配置数据,而5、6、9处CSI_B信号被拉高,该处数据无效,不会加载配置数据,从而实现非连续数据加载。
图26 通过CSI_B控制的非连续SelectMAP数据加载
如图27所示,CSI_B片选和RDWR_B信号的状态保持正常,通过改变CCLK时钟宽度,更改CCLK上升沿位置,从而实现非连续的数据加载。
图27 通过控制CCLK的非连续SelectMAP数据加载
配置多个相同器件
根据是否需要回读,依旧有两种配置方式,如图28所示支持回读FPGA配置数据,通过将多片FPGA的数据线D和配置时钟CCLK以及数据线方向控制i新年好PDWR_B连接在一起实现,由于需要回读操作,即需要FPGA输出数据,那么多片FPGA不能存在同时驱动同一组数据线的情况,所以多片FPGA的片选信号CSI_B必须分开连接到ARM或者CPLD,否则可能会烧毁器件。
图28 8位SelectMAP总线上的多从设备配置(一)
这种方法的劣势在于需要多个片选信号,优势在于通过控制CSI_B信号可以给多片FPGA分别烧写不同的配置程序,而且支持回读功能。
另一种不需要使用回读功能的配置方式如图29所示,数据线和时钟线与图28连接一致,将片选CSI_B和方向信号PDWR_B均接地。
图29 8位SelectMAP总线上的多从设备配置(二)
这种方式的优势在于节省了控制多个片选信号CSI_B的引脚,缺点在于多个器件只能配置相同程序,且不支持回读。
菊花链配置多个器件
并行器件的菊花链配置方式如图30所示,注意第一个器件可以是主BPI、主SelectMAP、从SelectMAP三种配置之一,但后续器件必须采用从SelectMAP配置模式,该配置方式不支持回读和回退操作。
图30 并联菊花链
注意上图中D[15:00]、CCLK、RDWR_B、PROGRAM_B、DONE、INIT_B均连接在一起,菊花链是通过一路片选信号FCS_B或者CSI_B进行控制的,CSO_B会把CSI_B的信号输出,所以上一片FPGA的CSO_B引脚连接到下一片FPGA的SCS_B引脚就能实现菊花链控制。关于BPI控制在3.4节讲解。
💡 综上,SelectMAP配置相比串行配置区别在于数据线数量增加且变为双向,需要PDWR_B信号控制数据线方向,还增加了一个片选信号CSI_B,菊花链的连接方式也由数据信号DIN变为控制片选信号CSI_B。在配置期间会相对串行会增加一个自动检测总线宽度的流程,之后才会对同步数据,然后传输配置数据,在从SelectMAP模式下还可以支持回读和非连续性传输配置数据。
编写微控制器或者CPLD程序时需要注意,在SelectMAP x8模式下,每个CCLK加载一个字节配置数据,每个字节的MSB提供给D0引脚。图31显示了如何将十六进制值0xABCD加载到SelectMAP数据总线中。
图31 SelectMAP 8位模式的位排序
图32显示了7系列FPGA SelectMAP x8、x16和x32数据总线宽度的位排序。
图32 位排序
主BPI配置
7 系列 FPGA Master BPI 配置模式支持使用行业标准并行 NOR (BPI) 闪存器件进行比特流存储。FPGA 支持直接连接到 BPI 闪存的地址、数据和控制信号,以提取存储的比特流。
注意,某些所需的引脚位于组 15 中,Artix-7 7A50T 和较小器件的 CPG236 封装不进行绑定Bank 15,因此不支持 BPI 配置。Spartan-7 系列不支持 BPI 配置。
7系列FPGA Master BPI配置模式有两种可用的BPI闪存读取模式:异步和同步。与其他直接配置模式相比,使用带有外部主时钟的 BPI 闪存同步读取模式可以实现更快的配置时间。此外,可通过多达 29 条地址线访问更宽密度范围的并行 NOR 闪存。
异步读取
在Master BPI配置模式下,7系列FPGA默认使用BPI flash异步读取模式来读取比特流数据,如图33所示。FPGA从给定的起始地址驱动地址总线,BPI flash发回比特流数据,默认起始地址是地址 0。此模式下配置时钟CCLK信号不需要连接,INIT_B信号作为flash的复位信号,FWE_B作为flash的写使能信号,FOE_B信号作为flash芯片的输出使能信号,而FCS_B作为flash芯片的片选信号,注意对配置相关信号带有后缀_B的表示低电平有效。该配置方式数据位宽支持8位及16位,地址线有29位,消耗的IO会比较多,但是配置速度比串行模式更快。
图33 7 系列 FPGA 主站 BPI 配置接口 - 异步读取示例
对应时序图如图34所示,上电后,当 FPGA 的 INIT_B 输出变高时,采样模式引脚 M[2:0] ,PUDC_B 引脚必须在整个 FPGA 配置过程中保持恒定的逻辑电平。Master BPI 配置模式确定后,FPGA 驱动闪存控制信号(flash输出使能信号FOE_B 拉低,flash写使能信号FWE_B拉高,flash片选信号FCS_B拉低)。虽然对于 BPI flash 异步读取模式,CCLK 输出没有连接到 BPI flash 器件,但 FPGA 在 CCLK 上升沿之后输出地址,且仍然在 CCLK 的下一个上升沿采样数据,BPI相关的时序参数还是以CCLK引脚为参考。
在主 BPI 模式下,地址从 0 开始并递增 1,直到 DONE 引脚拉高。如果地址达到最大值 (29’h1FFFFFFF) 且配置未完成(DONE为低电平),则会在状态寄存器中写入错误标志,把RS0和RS1管脚拉低,并开始回退重新配置,如果不适用回退模式,则RS0和RS1引脚可以悬空。
图34 7 系列 FPGA 主 BPI 配置 — 异步读取波形
FPGA 通过其 A[n:00] 引脚驱动初始地址 (A00),并保持初始地址至少 10 个 CCLK 周期,对于上电配置,初始地址为 0x00000000。默认情况下,在 DONE 变为高电平后的一个周期,多功能配置 I/O 切换到用户模式。
7 系列 FPGA BPI 模式还支持异步页模式读取,以允许提高 CCLK 频率。首次访问页面通常需要最长的时间(约 100 ns),后续访问同一页面所需的时间较短(约 25 ns)。这些参数可在 7 系列器件中进行位流编程,以利用页面读取并最大化 CCLK 频率:页面大小为1(默认)、4 或8。如果实际闪存页面大小大于8,则应使用值8 以使效率最大化。首次访问CCLK 周期为1(默认)、2、3 或4。如果页面大小为1,则CCLK 周期必须为1。CCLK 频率。
图35 BPI 波形(页面大小 = 4,首次访问 CCLK = 2)
同步读取
注意:新设计不建议使用主 BPI 同步读取模式,闪存芯片可能不支持该方式,需要联系闪存厂家确认是否支持该方式读写。
7 系列 FPGA 主 BPI 配置模式可以选择支持突发、同步读取模式读取比特流,如图36所示,并在同步读取模式支持。同步模式将来自 FPGA 的给定起始地址锁存到其内部地址计数器中,然后给定一个时钟,闪存在每个时钟周期内将数据从下一个顺序地址位置输出到其数据总线。在同步读取模式下,BPI 设备传输数据的速度比通过异步接口读取快很多倍。
FPGA 以异步读取模式启动,使用默认的 CCLK 频率,比特流标头确定读取模式是继续异步还是切换到同步读取模式。如果设置了 BPI_sync_mode 选项,比特流命令将启动从异步读取到同步读取的切换。该选项有两种可用设置:类型1用于设置 G18F 闪存系列同步和延迟位,类型2用于设置 P30/P33。同步模式的切换由 FPGA 控制器完成,该控制器对 BPI 闪存配置寄存器执行异步写入,将器件设置为同步模式并启动比特流重读。为了支持同步读取模式,FPGA CCLK 输出连接到 BPI 闪存器件,并且 ADV_B FPGA 信号必须连接到闪存 ADV 信号。
BPI 闪存配置寄存器同步位设置是易失性的,在断电时或当 FPGA INIT_B 变低向 BPI 闪存发出复位时会被清除。
图36 7 系列 FPGA Master BPI 配置接口同步读取示例
与异步读取模式相比,同步读取模式增加了配置时钟信号CCLK和ADV_B信号,其余信号连接方式保持不变。ADV_B信号为低电平时,表示地址线上输出的数据有效。其时序与异步相似。
💡 综上所述,主BPI模式是用来并行读取flash数据的,一般用于速度要求较高的场合,相比主SPI模式,增加了flash的数据输出使能信号FOE_B,flash写数据使能信号FWE_B,地址信号A[28:1],数据线由1~4位增加到了8位或者16位,同步方式还需要ADV_B地址有效指示信号。根据是否支持回退重配置功能,可能还需要RS0与RS1信号。
JTAG配置模式
7 系列器件无论配置模式引脚设置如何,器件都支持随时通过 JTAG 端口进行配置。但当要通过 JTAG 端口专门配置器件时,可以使用显式 JTAG 配置模式设置。
对于单器件配置,如果使用 Xilinx 工具配置器件,则会自动发出 TAP 控制器命令。下载电缆必须连接到相应的四个 JTAG 引脚(TMS、TCK、TDI 和 TDO),以将比特流自动从计算机端口传送到 7 系列 FPGA。这些工具会自动检查连接是否正确,并驱动命令来传送和验证配置位是否得到正确管理。
图 347显示了典型的 JTAG 设置,其中需要将单个器件连接到 JTAG 信号接头,该信号接头可以在xilinx工具的控制下由处理器或 Xilinx 编程电缆驱动。TCK 是用于边界扫描操作的时钟, TDO-TDI 连接创建了一个串行数据路径,用于通过 JTAG 链传输数据, TMS 控制 TAP 控制器中状态之间的转换,这四个管脚内部均有上拉电阻。
图37 单个器件 JTAG 编程连接
可以在链中配置多个 7 系列设备,电路连接方式如图38所示。
图38 多器件边界扫描链
对于JTAG配置的详细流程会比较多,需要了解的可以查看硬件接口协议之“JTAG”(https://xilinx.eetrend.com/content/2019/100044971.html),或者直接查看Boundary-Scan for 7 Series Devices Using IEEE Standard 1149.1标准协议。
总结
通过上述讲解,可知xilinx7系列FPGA配置方式有7种,其中JTAG优先级最高,在其他模式下也可以直接进行JTAG配置。然后六种其实可以根据外设区分,如果是flash对FPGA进行配置,那么FPGA只能作为主机,根据数据线的宽度可分为SPI模式和BPI模式,其中SPIx1和BPI模式支持菊花链方式。如果是用微处理器或者CPLD来配置FPGA,那么FPGA可以作为主机,也可以作为从机,根据数据线宽度可以分为主串行、从串行、主并行、从并行共4种配置模式,主从是根据FPGA的时钟方向确定的,FPGA作为主机,则输出配置时钟信号CCLK。从串行、从并行支持菊花链配置模式,并行模式数据线可以为8位、16位、32位,在同步之前需要通过自动检测数据线位宽。
关于回读,回退重新配置等操作没有做讲解,使用的频率较低,需要的可以阅读UG470手册,另外要注意zynq系列的配置方式与纯PL的器件也有区别,zynq器件除JTAG以外不能对PL单独配置,必须通过PS去配置PL,麻烦一点。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)