FPGA程序固化

FPGA固件存储

Intel 或 Xilinx 的 FPGA 芯片,使用的是基于 SRAM 结构的查找表,而 SRAM 的一大特性就是掉电数据会丢失,当使用 JTAG 将 SRAM 配置文件(.sof)配置到 FPGA 芯片中后,这些数据是直接存储在 SRAM 结构的查找表中的,因此,一旦芯片掉电,则 SRAM 中的数据将丢失,再次上电后, SRAM 中将不再有有效的数据。 而普通的 MCU 内部集成了片上程序存储器 ROM,即使掉电后也能保存程序。 这也就是常见的,使用 JTAG 下载 SOF 固件到FPGA 中后,板子重新上电,则之前下载的固件又不在了的原因。

当系统设计完成并验证结束后, 准备量产时,希望 FPGA 能够永久保持电路固件,即让FPGA 上电后其查找表中就被写入有效的数据。但是又不能总是每次系统上电后就用 JTAG去下载一次程序固件。因此, FPGA 支持另外一种配置方式:主动串行配置(AS)。

主动串行配置就是在 FPGA 芯片外部放置一片能够掉电数据不丢失的存储器,例如最常见的 EPCS、 QFLASH、并口 FLASH,来存储设计好的电路固件。而 FPGA 芯片内部,则设计了一个专用的硬件电路,在芯片刚上电时就主动去读取存储器中的固件,并配置到FPGA 芯片的每一个 SRAM 中去。通过这样一种方式,可在不改变 FPGA 芯片 SRAM 工艺的查找表结构前提下, 使得芯片每次上电后,都能获得有效的配置数据。

外部存储电路配置信息的芯片称之为配置芯片。早前, 原 Altera 公司规定只能使用其自己发售的 EPCS 芯片作为外部配置器件,该 EPCS 芯片实质就是一个 SPI 接口的串行 FLASH 芯片, 只不过是经过了 Altera 的严格测试,性能优异。而近些年,随着芯片生产工艺的不断发展,很多其他厂家生产的 SPI 接口的 FLASH 芯片也能够达到 EPCS 的技术标准,因此 Altera 就放开了该限制,并指出可以使用其他芯片厂家生产的 SPI 接口的 FLASH 芯片代替 EPCS。

当需要将设计好的配置固件固化到该器件中时,有两种方式。

第一种方式,也就是传统的方式,是使用专用 AS 接口(与 JTAG 10 针接口独立)来直接烧写该配置芯片,该种方式需要在电路板上设置一个独立的 AS 接口,占用 PCB 板面积较大,使用起来不方便。 第二种方式,也是现在流行的方式则是通过 JTAG 接口,经 FPGA 芯片间接烧写配置芯片,其电路下图所示。

Xilinx FPGA固化文件区别

FPGA里面的可执行文件都涉及到 *.bit, *.mcs, *.bin 和 *.elf。

bit文件

bit 文件一般用于JTAG在线进行调试的时候,是把bit文件是烧写到FPGA中进行在线调试,掉电后,FPGA的程序就丢失。

bin文件

bin 文件是二进制文件,按顺序只包含原始字节流,烧写进片外的flash,上电加载自动加载。默认情况下,Generate Bitstream并不会生成BIN文件,只会生成bit,如果想在生成bit文件的同时也生成BIN文件,需要额外勾选-bin_file*

mcs文件

mcs也是烧写到flash中的,上电后会自动加载到FPGA里,因此烧写进flash,需要断电重启。mcs文件是其中两个ASCII字符用于表示数据的每个字节HEX文件。mcs文件除了包含头部信息外还有地址信息以及校验码。

因此,MCS文件的效率似乎较低,因为它需要2个字节来表示1个字节。但是它有两个优点:

在每行的末尾都有一个校验和以确保完整性。 每行包括该行应位于内存中的地址。

elf文件

如果FPGA中用到 microblaze 或者 ZYNQ 的结构,还会有一个 elf 文件,这是因为其继承了 ARM 的可执行文件。

ARM 体系中,所有文件均采用的 ELF 文件格式。ARM 中的各种源文件(包括汇编文件,C 语言程序及 C++ 程序等)经过 ARM 编译器编译后生成 ELF 格式的对象文件(Object File)(.o文件)。这些对象文件(Object File)和相应的 C/C++ 运行时用到的库经过 ARM 连接器处理后,生成 ELF 格式的镜像文件(image),这种ELF 格式的映像文件是一种可执行文件,可被写入嵌入式设备的 ROM 中。

mcs文件和bin文件的区别

mcs文件里包含Bin文件的内容,但是mcs文件中,每行的开始有地址信息,最后一个byte是crc校验信息,所以mcs文件要比bin文件大。

但是烧录器烧写的时候,只烧录mcs文件中包含bin文件的那部分信息,不会将地址和crc烧录到flash中。

一般在烧写flash的时候,我们会用mcs文件,尤其是做multiboot和fallback的时候,因为mcs文件中包含有地址信息,会告诉烧录器,golden image放在哪里,multiboot image放在哪里

bit文件和bin文件的区别

bin文件不包含头部信息,bit为bin+头部信息(工程名称以及时间等信息)。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇