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