开云-FPGA实现串口升级及MultiBoot(三)FPGA启动加载方式

FPGA实现串口进级和MultiBoot(三)FPGA启动加载体例 时候:2024-12-13 21:28:24 手机看文章

扫描二维码随时随地手机看文章

上一篇中介绍了FPGA的启动步调,如图0 所示,今天这篇文章就要在上一篇文章根本长进行分支细化,起首我们先领会FPGA 启动加载的几种体例。同时对我们设计中常见的几个问题将在文章最后具体会商,好比HEX、BIN、MCS区分,在生成MCS时辰Bit Swap甚么感化,Bitstream 紧缩到底在紧缩甚么等问题进行具体切磋。

图0:7系列FPGA启动步调-参考:UG470 设置装备摆设文件框架

在图0中上一篇没有注意会商的设置装备摆设文件载入,我们这篇文章具体会商下,由于后续我们会利用这此中的一两个寄放器,我们就先看下设置装备摆设文件架构。

7 系列 FPGA 设置装备摆设文件以帧的情势摆列。帧是 7 系列 FPGA 设置装备摆设内存空间中最小的可寻址段,是以所有操作都必需感化在全部设置装备摆设帧。每帧由 101 个 32 位构成。按照比特流选项,设置装备摆设比特流中存在额外开消。切当的比特流长度可在 rawbits 文件 (RBT) 中找到。比特流长度(字)年夜致等在设置装备摆设数组巨细(字)加上设置装备摆设开消(字)。比特流长度(位)年夜致等在比特流长度(字)乘以 32。

设置装备摆设包

所有 7 系列 FPGA 比特流号令都是经由过程读取或写入设置装备摆设寄放器来执行的。

数据包类型

FPGA 比特流由两种数据包类型构成: Type 1 和 Type 2。

Type 1数据包

Type 1 数据包用在寄放器读写。7 系列 FPGA 中仅利用 14 个寄放器中的 5 个。报头部门是 32 位字。

Type 1数据报头以后是Type 1数据部门。

图1:Type 1 数据包头格局-参考:UG470

上图中的OPCODE类型如图2所示。

图2:OPCODE格局-参考:UG470 Type 2数据包

Type 2 数据包必需跟在Type 1 数据包后面,用在写入长块。由于它利用Type 1 数据包地址,所以这里没有显示地址。报头部门一样是 32 位字。

Type 2 数据包头以后是Type 2 数据部门。

图3:Type 2 数据包头格局-参考:UG470

上图中的OPCODE类型如图4所示。

图4:OPCODE格局-参考:UG470 CRC Register(00000)

CRC寄放器,写入此寄放器用在对照特流数据执行 CRC 校验。假如写入的值与当前计较的 CRC 匹配,则断根 CRC_ERROR 标记并答应启动。

Frame Address Register(00001)

帧地址寄放器,7 系列FPGA分为两半,顶部和底部。7 系列FPGA中的所有帧都具有固定的不异长度,即 3,232 位(101 个 32 位字)。

帧地址寄放器 (FAR) 分为五个字段:块类型、顶部/底部位、行地址、列地址和次要地址。地址可以直接写入,也能够在每帧竣事时主动递增。典型的比特流从地址 0 最先,并主动递增到终究值。

Command Register(00100)

号令寄放器 (CMD) 用在唆使设置装备摆设节制逻辑选通全局旌旗灯号并执行其他设置装备摆设功能。每次将新值加载到 FAR 寄放器时,城市执行 CMD 寄放器中的号令。

MFWR Register (01010)

该寄放器由比特流紧缩选项利用。

IDCODE Register(01100)

IDCODE 寄放器,读取该寄放器可返回装备 IDCODE。供给的 IDCODE 必需与装备的 IDCODE 匹配。

Warm Boot Start Address Register (10000)

热启动肇端地址寄放器 (WBSTAR) 指定利用 IPROG 号令时要利用的 MultiBoot 地址信息。图5中描写了相干寄放器。

图5:WBSTAR寄放器描写-参考:UG470 Watchdog Timer Register (10001)

看门狗按时器在回退比特流时主动禁用。图6中描写了相干寄放器。

图6:WTR寄放器描写-参考:UG470 Boot History Status Register (10110)

启动汗青状况寄放器 (BOOTSTS)是用来唆使启动进程中毛病的类型,图7中描写了相干寄放器。

图7:BOOTSTS寄放器描写-参考:UG470

上面的相干参数年夜部门都可以经由过程JTAG读取到,图8中展现了读取到的BOOTSTS寄放器。

图8:经由过程JTAG读取BOOTSTS寄放器描写 FPGA 启动加载体例

对7系列FPGA来讲有多种体例启动,包罗正常上电自启动,Program_B复位加载等体例,下面具体介绍几种启动体例。

上电主动加载

这个体例就不多说了,FPGA依照上电时序正常上电后,由FPGA自动从外部存储器读取位流,此时CCLK为输出;或由其它主节制器经由过程SELETMAP将位流写入到FPGA中,此时CCLK为输入,从而完成上电主动加载。

Program_B复位加载

7 系列FPGA供给了一种经由过程外部引脚来从头设置装备摆设FPGA的体例,这个引脚就是Program_B,经由过程拉低Program_B管脚从头设置装备摆设FPGA,后续等INIT_B释放拉高后,就和上面步调一样了。7系列FPGA经由过程Program_B复位加载时序如图9所示。

图9:Program_B复位加载时序图 - 来历:UG470 Boot加载

Program_B复位加载是经由过程外部引脚进行重加载进程,AMD-Xilinx还供给一种指令加载体例就是-Boot加载。Boot加载进程现实上是经由过程JTAG发送JProgram指令,实现FPGA加载功能。JTAG发出JProgram指令后,比及待INIT_B释放拉高后,就和上电主动加载后续进程一样。其功能和拉低Program_b功能类似,Boot加载操作如图10所示。

图10:Boot加载操作 IPROG指令加载

这个加载进程就和MultiBoot互相关注了,IPROG指令的感化跟外部Program_B管脚的感化近似,都是对FPGA芯片进行复位操作,该复位操尴尬刁难FPGA内部的利用法式进行复位,同时IPROG指令不克不及复位专用重设置装备摆设逻辑,如WBSTAR寄放器、TIMER寄放器、BSPI寄放器和BOOTSTS寄放器。IPROG指令可以或许触发FPGA开启初始化流程,同时拉低INIT和Done旌旗灯号。完成复位操作后,将默许的加载地址用热启动地址寄放器(Warm Boot Start Address,WB-STAR)中的新地址替代。

IPROG指令可以经由过程ICAPE2原语和嵌入到位流中实现相干操作。

ICAPE2原语操作

ICAP今朝为止有三个版本,包罗ICAP,ICAPE2和ICAPE3。UltraScale系列对应ICAPE3,7系列对应ICAPE2,7系列之前的对应ICAP。

ICAPE2原语经由过程更改WBSTAR寄放器来实现多重加载。ICAPE2原语发出的指令序列以下图所示,箭头所示就是IPROG指令

图11:ICAPE2原语发出的指令序列

起首写入同步头 32’hAA995566, 然后将需要跳转到的bit文件的肇端地址写入WBSTAR寄放器,最后写入IPROG(internal PROGRAM_B)指令。

(1)对BPI模式来讲,可以经由过程RS[1:0](外部引脚)来节制具体位流的读取,也能够经由过程STAT_ADDR[28:0]地址来节制具体位流的读取。

(2)对SPI模式来讲,只有STAT_ADDR[23:0]地址来表征FLASH器件的地址,当利用32位地址的SPI(容量年夜在等在256Mb)时,需要将现实存储的高24地址赋值给STAT_ADDR[23:0]。是以在位流存储的肇端地址早在255时,这就要求位流中的dummy数量要年夜在256个,不然就会呈现易掉部门有用位流读取,致使加载掉败。为了平安起见,在利用年夜在等在256Mb的FLASH时,可以恰当在位流头前插手Dummy。

具体以下图所示:

图12:BPI和SPI加载地址节制旌旗灯号 位流操作

上面ICAPE2原语操作利用过例化原语指令事项相干操作,我们一样可以经由过程将IPROG指令嵌入到位流中,这个时辰WBSTAR寄放器值也一样嵌入到位流中,也实现不异的操作,上面的进程就是凡是利用XDC束缚来实现Multiboot功能的利用场景,这类利用场景一般都是主加载SPI模式或主加载BPI模式。

图13:IPROG指令嵌入到位流中操作示意图

具体的操作和具体申明我们后续再详解。接下来我们讲授几个后续要利用的概念。

BIT、RBT、BIN、MCS和HEX区分

7系列的FPGA设置装备摆设数据文件格局,有五种文件格局,BIT、RBT、BIN、MCS和HEX。对FPGA开辟工作者来讲,利用最多的应当是四种格局的文件,BIT、BIN、MCS和HEX。那末这几个格局有啥区分呢?

在UG470中给了这几个格局的区分,以下图所示

图14:BIT、RBT、BIN、MCS和HEX区分 : 上-来历UG470 下-翻译

bit文件比力好理解是用来调试的,经由过程JTAG进行在线烧录调试。BIN和MCS用在固化,生成存储在flash的固化文件。对HEX,一般用在长途更新,好比经由过程收集、PCIe接口体例长途进级时辰。固然上面只是保举的利用方面,也能够依照本身需求利用,我们接下来讲一下这几个文件的区分。

mcs文件和bin文件的区分

这两个文件都是我们进行固化时辰常见的文件格局,此中MCS文件时包括BIN文件内容的(只是内容),MCS文件的每行有地址信息,最后一个byte时CRC校验信息。所以mcs文件要比bin文件年夜。

烧录器烧录的时辰,MCS文件只会烧写包括bin文件的那部门信息,不会将地址和crc信息烧录到flash中。

我们在做MultiBoot和FallBack时辰只能利用MCS,由于MCS包括了地址信息,烧录器在烧写的时辰知道golden image放在哪里,multiboot image放在哪里。

bit文件和bin文件的区分

bin文件不包括头部信息,bit为bin+头部信息(工程名称和时候等信息)。

所以BIN文件时焦点,其他文件是在BIN文件根本上增添了分歧的信息。

图15:Vivado生成BIN设置 Bit Swapping甚么感化

在生成固化文件时辰,有个选项以下图所示:

图16:Bit Swapping设置

那末这个选项的感化是甚么?

Bit Swapping是指字节内位的互换。除非利用 PROMGen -spi 选项或 SPI 设置装备摆设模式的 write_cfgmem -interface spi1|spi2|spi4 选项,不然 MCS PROM 文件格局始终是Bit Swapping。HEX 文件格局是可选的,具体取决在用户选项。位流文件 (BIT、RBT、BIN) 则不会进行Bit Swapping。

对 Xilinx 设置装备摆设硬件,每一个字节的 MSB 对应在 D0,而不是 D7,可是在处置位流文件时辰可能会呈现相反的操作,所以这一步是在进行改正后续的操作。

Vivado中生成 MCS、EXO、TEK 文件或 HEX 文件时,D0 引脚对应在每一个字节的 LSB。是以,这些文件被称为“字节互换”文件。默许环境下,HEX 文件是位互换的,但可以禁用此功能。 当禁用此选项时,D0 引脚对应在每一个字节的 MSB,而且该文件是“非字节互换”文件。 BitGen 生成的 BIT 和 RBT 文件是“非互换字节”文件。 对所有 FPGA 并行模式(Express、同步/异步外设、主/从并行、SelectMAP)都是如斯。Xilinx 软件按照总线排序的一般法则生成字节互换文件。 凡是,当利用“字节互换”时,MSB(最左侧的位)对应在总线的最年夜数目(D0) 。 利用处置器或逻辑装备时必需改正这些差别。 处置器、FPGA 等生成“字节互换”的文件,即可以在设置装备摆设时代把每一个字节的 MSB 对应在 D0。假如利用 BIT、RBT 或“非字节互换”的 HEX 文件进行下载时,则处置器的 MSB 必需与 FPGA 的 D0 相对应。

图16:Bit Swapping示意图 - 来历:UG470

需要留意的是:不管数据的标的目的若何,每一个字节的MSB都将进入D0引脚:

在“字节互换”的版本中,进入D0的位是最右侧的位

在“非字节互换”中,进入D0的位是最左侧的位。

FPGA比特流内容

7系列FPGA比特流包罗三个部门:总线宽度主动检测、同步字和FPGA设置装备摆设。

总线宽度主动检测模式插入在每一个比特流的最先。它用在并行设置装备摆设模式,以主动检测设置装备摆设总线宽度。由于它呈现在Sync字之前,串行设置装备摆设模式会疏忽它。总线宽度主动检测对年夜大都用户来讲是透明的,由于Xilinx东西生成的所有设置装备摆设位流(BIT或RBT文件)都包罗总线宽度主动探测模式。假如模式引脚设置为主串行、从串行、JTAG或SPI模式,设置装备摆设逻辑将疏忽这些模式。

图17:K7 FPGA Bit 示例 - 来历:UG470

下图为一个bit文件,图中暗影部门就与上述中的总线宽度模式和同步字等逐一对应,同步字以后才是FPGA设计功能的设置装备摆设内容。

图18:现实 Bit 示例 - 来历:知乎@小灰灰的FPGA Bitstream 紧缩到底在紧缩甚么

最后就是BIT紧缩,我们在设计中城市插手下面剧本:

set_propertyBITSTREAM.GENERAL.COMPRESSTRUE[current_design]

这句话大师都知道是吧我们生成的位流文件进行紧缩(紧缩比仍是很可不雅的),那末我们进行Bitstream 紧缩到底在紧缩甚么?会不会影响我的功能?

紧缩前后会对法式里的功能有影响吗?

答: 必定没得影响. 影响功能的话就没法用了。

紧缩的道理是甚么,紧缩了哪些部门?

答: 利用length encoding算法来削减设置装备摆设数据的巨细。

烧写的时辰还需要解紧缩吗?

答: 下载时FPGA会辨认并处置解紧缩的流程

有无相干文档可以参考?

答: 可以参考UG908

法式固化后不克不及启动的排查思绪

这个在新板子加工回来后第一次调试常呈现的问题,这个问题一般分为两个标的目的:1、硬件问题;2、FPGA设计问题。

图19:法式固化后不克不及启动的排查思绪 总结

今天文章内容比力杂,是一些常见的问题和迷惑,内容仍是以官方文档UG470为主,受篇幅限制,后面有几个问题并没有挖到底层,这个后面会出几个专题进行具体解析。

欲知详情,请下载word文档 下载文档

上一篇:开云-刷屏频率 下一篇:开云-IC技术圈