编译FPGA的HDL程序的一般过程是什么?

Izz*_*zzo 4 verilog fpga vhdl hdl system-verilog

我有一个关于在FPGA设计环境中编译HDL程序的问题.

1)为什么编译过程需要这么长时间?这真的是编译过程需要很长时间,还是需要花费很长时间才能编写单独的逻辑门?

2)为什么编译后的文件通常被称为"bitfiles"?这些位文件的格式是什么?我正在想象一个门的二维矩阵,它将根据位文件中的位打开或关闭.

谢谢你的帮助!

ζ--*_*ζ-- 10

1)为什么编译过程需要这么长时间?这真的是编译过程需要很长时间,还是需要花费很长时间才能编写单独的逻辑门?

首先,如果您想查看FPGA工具的所有工作和辛勤工作,只需打开详细模式/详细报告,然后浏览/读取它们.

我将以Xilinx的观点回答,因为这就是我所知道的.虽然这些流程可能有不同的名称/分组/排序,但各个供应商的想法是相同的.

HDL->字节码过程与编译Java的过程略有不同.它不仅仅是将每一行转换为某个字节码,而是将整个设计转换为硬件实现的相关过程.您不是将程序转换为硬件,而是将硬件描述为硬件.当你在模拟器中运行测试平台时,你只需要调用一堆Verilog或VHDL程序.

请记住,时序约束是一个问题,因此优化逻辑的时序/深度是首要任务.

在实践中,综合包括将行为Verilog/VHDL转换为RTL表示,包括FSM合成,布尔函数的提取,优化,解码器/编码器,多路复用器,ROM等.此外,合成步骤将复制其值在多个中需要的寄存器FPGA上的区域,以便最大限度地减少这些区域的路由延迟.一些合成工具,如XST,将在此阶段提供对时序和设备利用率的粗略估计.

此外,请记住,综合涉及一定程度的推断.匹配某些图案/图案的HDL代码将被转换为硬件宏或某些图元的实例.如果我编写的代码reg[7:0] foo [2047:0]基于地址(可能是写入启用)同步访问大型代码,那么合成器工具将要检测它并将块RAM放置到位.它还将尝试优化不需要的逻辑,并可以在该优化中进行相当深入的逻辑分析.

翻译/映射也涉及大量的硬件逻辑复杂性 - 在这个阶段,软件将尝试以最佳方式将逻辑函数填充到查找表中,将它们与它们可能驱动的触发器一起放入切片中,并再次优化.在该步骤,可以移除优化遗留的冗余或多余组件.

在某些设计中,放置和布线是迄今为止最密集的步骤之一.现在,映射为大量的查找表和寄存器连接了大量的线路,它们都需要使用有限的互连资源进行放置.限制包括行/列中的行数,在某些距离处可以连接到其他位的位,以及时钟分布.再次记住,存在时序约束.PAR可以快速放置设计,但是花费很长时间来尝试调整放置以适应这些约束.放置和布线不是一个易于解决的问题,并且涉及大量基于成本表的暴力,随机放置以及其他独特方法.不用说,这可能需要很长时间.

想象一下,尝试组织下面显示的电路,每根导线不超过两个交叉点,并且在时序关键路径中不超过25cm的导线,仅在FPGA的规模上:

在此输入图像描述 资源

2)为什么编译后的文件通常被称为"bitfiles"?这些位文件的格式是什么?我正在想象一个门的二维矩阵,它将根据位文件中的位打开或关闭.

你很亲密,但并不完全.比特流配置以下参数:

  • 路由.什么信号去哪里,通过什么电线.这通常设置多路复用器和交叉连接.你提到的东西很漂亮,虽然他们真的不是连接门(尽管完全缓冲以避免电容效应)

  • 片.每个切片包含一些用于函数发生器的查找表,以及更多的多路复用器等.比特流还指定了查找表的内容,它们是否应被旁路或链接,输出是否应该直接路由到触发器,触发器是否应该具有异步复位,是否应该是posedge或negedge , 等等.对于分布式存储器片,配置与在外部控制下写LUT或移位LUT有关.

  • 其他功能块:如何配置DSP /乘法器块,时钟处理电路的参数/连接,如DCM/PLL/MMCM /等,块RAM的宽度/通过/初始内容,收发器的参数等等.

  • 元数据.如果不应该复制,可能会阻止通过配置端口/ JTAG读回比特流.

  • 另一点.术语"编译"通常保留用于分析,从而导致模拟.这通常非常快.根据设计的大小,下一步 - 详细说明 - 可能需要一些时间.对于转换为位文件,步骤是合成,映射以及布局和布线.前两个相对较快.P&R通常是最长的.虽然这取决于设计. (2认同)