【问题标题】:What's the general procedure for compiling an HDL Program for an FPGA?为 FPGA 编译 HDL 程序的一般程序是什么?
【发布时间】:2016-05-04 23:11:02
【问题描述】:

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

1) 为什么编译过程需要这么长时间?真的是编译过程耗时长,还是个别逻辑门的编写耗时长?

2) 为什么编译后的文件通常称为“位文件”?这些位文件的格式是什么?我正在描绘一个二维矩阵的门,将根据位文件中的位打开或关闭。

感谢您的帮助!

【问题讨论】:

    标签: vhdl verilog fpga system-verilog hdl


    【解决方案1】:

    1) 为什么编译过程需要这么长时间?真的是编译过程耗时长,还是个别逻辑门的编写耗时长?

    首先,如果您想了解您的 FPGA 工具所做的所有辛勤工作,只需打开详细模式/详细报告,然后浏览/阅读它们。

    我将以 Xilinx 的观点来回答,因为这是我所知道的。尽管流程可能有不同的名称/分组/顺序,但各个供应商的想法是相同的。

    HDL->bytecode 过程与编译 Java 的方式略有不同。这不仅仅是将每一行转换为一些字节码,而是将整个设计转换为硬件实现的一个相关过程。您不是将程序转换为硬件,而是将硬件描述为硬件。当你在模拟器中运行测试台时,你只会把一堆 Verilog 或 VHDL 称为程序。

    请记住,时序约束是一回事,因此优化时序/逻辑深度是重中之重。

    在实践中,综合包括将行为 Verilog/VHDL 转换为 RTL 表示,包括 FSM 综合、布尔函数的提取、优化、解码器/编码器、多路复用器、ROM 等。此外,合成步骤将复制寄存器,其值是FPGA 上的多个区域都需要,从而将这些区域的布线延迟降至最低。一些合成器工具,例如 XST,将在此阶段提供对时序和设备利用率的粗略估计。

    此外,请记住,综合涉及某种程度的推理。匹配某些主题/模式的 HDL 代码将被转换为硬件宏或某些原语的实例化。如果我编写的代码基于地址(可能还有写使能)同步访问大的reg[7:0] foo [2047:0],那么合成器工具会想要检测到它并放置一个块 RAM。它还将尝试优化不需要的逻辑,并可能在该优化中进行相当深入的逻辑分析。

    翻译/映射还涉及大量复杂的硬件逻辑——在这个阶段,软件会尝试以最佳方式将您的逻辑函数填充到查找表中,将这些逻辑函数放入它们可能驱动的触发器旁边的切片中,然后再次优化.在这一步,优化遗留下来的冗余或多余的组件可能会被移除。

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

    想象一下,尝试组织下图所示的电路,每条导线的交叉点不超过两个,时序关键路径中的导线不超过 25 厘米,仅在 FPGA 的规模上:

    source

    2) 为什么编译后的文件通常称为“位文件”?这些位文件的格式是什么?我正在描绘一个二维矩阵的门,将根据位文件中的位打开或关闭。

    你已经很接近了,虽然不完全是。比特流配置如下参数:

    • 路由。什么信号在哪里,通过什么电线。这通常设置多路复用器和交叉连接。您提到的内容非常准确,尽管它们实际上不仅仅是门,而是连接(尽管完全缓冲以避免电容效应)

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

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

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

    【讨论】:

    • 非常完整,我绝对是过于简单化了。
    • @Mitch 谢谢。幸运的是,我今天上了一堂高中电子课,并向学生解释了从头到尾的过程,包括所有这些步骤和演示。
    • @hexafraction 很好的答案。我认为需要解决的 OP 中的一点是对“HDL programs”的引用。这种对 HDL 开发的看法经常是设计问题的一个原因。 H 和 D 是关键特征。只有在验证过程中,它们才能真正被视为程序,而这不是主要目的。
    • 还有一点。术语“编译”通常保留用于导致模拟的分析。这通常非常快。根据设计的大小,下一步——细化——可能需要一些时间。对于转换为位文件,步骤是综合、映射和布局布线。前两个相对较快。 P&R 通常是最长的。虽然这取决于设计。
    • @PlayDough 谢谢。一个问题:在细化过程中究竟发生了什么?我熟悉 HDL-> 硬件工作流程,但对于基本模拟之外的任何事情,我几乎是个傻瓜。
    【解决方案2】:

    编译需要找到一组在布局中与编码逻辑匹配的门。这是一个难以解决的优化问题——我认为它可以被视为一个边缘交叉问题。

    Bitfiles 是一组“熔断器”,用于配置片上门的网络。如果不查看特定芯片,我会猜测一个熔断器由一个具有芯片定义排序的位表示。

    【讨论】:

      猜你喜欢
      • 2012-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-08
      • 1970-01-01
      • 2016-10-13
      • 2011-01-01
      • 2020-02-16
      相关资源
      最近更新 更多