据我了解,FPGA 的编程过程分为两部分:
- 将硬件描述编码成FPGA可以理解的位(即编写一些HDL并编译它)
- 将编译后的 HDL 加载到 FPGA 上。
我的问题是:“FPGA 对编译后的 HDL 做了什么?”。目前,我认为 FPGA 是“可模制硬件”,可以将电线和逻辑门模制成您想要的任何东西。好处之一是可塑性是永久性的:FPGA 可以重新编程。
FPGA 如何解释编译后的 HDL?永久可塑性是如何实现的?
据我了解,FPGA 的编程过程分为两部分:
我的问题是:“FPGA 对编译后的 HDL 做了什么?”。目前,我认为 FPGA 是“可模制硬件”,可以将电线和逻辑门模制成您想要的任何东西。好处之一是可塑性是永久性的:FPGA 可以重新编程。
FPGA 如何解释编译后的 HDL?永久可塑性是如何实现的?
从你的另一个问题来看,你是赛灵思的人。因此,我强烈建议您获取 Xilinx 芯片的数据表并转到功能描述章节。对于我使用的 Spartan 3 芯片,这是 42 页有趣的阅读。它详细说明了 FPGA 内部的组件——IOB、CLB、切片、LUT、块 RAM、乘法器、数字时钟管理器、时钟网络、互连以及一些非常基本的配置信息。如果您想知道“编译后的 HDL”是什么样子,您需要了解这些信息。
一旦您熟悉了您的 FPGA 架构,您就可以理解这个过程。首先,您的 HDL 设计通过综合引擎运行,这会将您的 HDL 基本上变成 RTL。然后映射器处理来自 Synthesis 的结果,将它们“映射”到可用的 FPGA 架构中。然后路由器执行放置和路由 (PAR),它会计算出这些部分的去向以及如何连接它们。最后,将 PAR 的结果转换为 BIT 文件。通常,该 BIT 文件会以某种方式进行转换,以便将其加载到闪存芯片中,这样 FPGA 就可以在上电时自动编程。
该位文件描述了整个 FPGA 程序。例如,Spartan 3 中的 CLB 由 slice 组成,这些 slice 由 LUT 组成,LUT 只是 16 位地址的 1 位 SRAM。所以 BIT 文件将包含的一件事就是进入 SRAM 的每个地址的数据到底是什么。BIT 文件包含的另一件事是 LUT 的每个输入如何连接到连接矩阵。BIT 文件还将包含块 RAM 中的初始值。它将描述连接到每个片中每个触发器的置位和复位引脚的内容。它将描述进位链是如何连接的。它将描述每个 IOB(LVTTL、LVCMOS、LVDS 等)的逻辑接口。它将描述任何集成的上拉或下拉电阻。基本上,一切。
对于 Xilinx,FPGA 的存储器在配置启动时被清除(即 PROG_B 被置位)。一旦内存被清除,INIT_B 变高表示该阶段完成。然后通过 JTAG 或 Flash 芯片接口加载 BIT 文件。加载程序后,全局设置/重置 (GSR) 会发出脉冲,将所有触发器重置为其初始状态。然后 DONE 引脚变为高电平,表示配置完成。恰好一个时钟周期后,全局三态信号 (GTS) 被释放,允许驱动输出。恰好一个时钟周期后,全局写使能 (GWE) 被释放,允许触发器开始改变状态以响应其输入。请注意,即使是这个最终配置过程也可以根据 BIT 文件中设置的标志稍微重新排序。
编辑:
我还应该补充一点,FPGA 程序不是永久的原因是因为逻辑结构是由易失性存储器(例如 SRAM)组成的。所以当 FPGA 掉电时,程序就被遗忘了。这就是为什么他们需要例如闪存芯片作为 FPGA 程序的非易失性存储,以便在设备通电时可以加载它。
编译 HDL 会产生一个位模式,指示应该激活 FPGA 内部的哪些连接。FPGA 不再需要解释 HDL。位模式被编程到串行加载器闪存/EEPROM 中,并在启动时将该模式转移到 FPGA 中,进行必要的连接。
编译的结果是一个比特流(字面意思是比特流),它在上电后加载。这通过存储在一些存储单元(锁存器)中的 FPGA 进行转移。这些单元连接到各种逻辑实体、多路复用器、查找表、RAM 块、路由矩阵并构成所谓的“配置”。一旦加载了比特流,FPGA 就开始运行——配置锁存器中的比特“告诉”FPGA 的每一小块如何运行。
编辑 2012 年 4 月 24 日:我提到的人字拖不适用于查找表或它们的配置。正如@ajs410 所说,这些在 RAM 中,晶体管更少。如果启用了存储,触发器用于存储 LUT 之外的数据。
FPGA 的标准术语是“配置”而不是“编程”。FPGA 通常是基于 SRAM 的设备。SRAM 存储位,这些位指示在设备的“逻辑结构”内形成和断开哪些连接。当配置发生时,一个比特流被发送到 FPGA,FPGA 写入这个 SRAM。当基于 SRAM 的 FPGA 切换时,关闭 SRAM 数据被擦除,当 FPGA 开启时,需要重新配置。
现在知道了,它们是“配置”和 FPGA 的各种方法,因此存在包含此“比特流”的不同格式的文件。归根结底,这些文件的结构和 FPGA 配置的精确度的细节是制造商专有的,并且这些信息永远不会共享。但总体原理在 FPGA 中保持不变。