4

我正在 Xilinx 中用 VHDL 编写 8051 指令集。编写逻辑并生成综合报告后,我看到延迟为 13.330ns(频率为 75.020 MHz),逻辑级别 = 10。

这个值非常小(频率),我需要加强它,但我无法理解使用综合报告的延迟是什么/在哪里。

这是报告中讨论时间安排的部分:

=========================================================================
Timing constraint: Default period analysis for Clock 'clk_div1'
  Clock period: 13.330ns (frequency: 75.020MHz)
  Total number of paths / destination ports: 156134 / 3086
-------------------------------------------------------------------------
Delay:               13.330ns (Levels of Logic = 10)
  Source:            SEQ/alu_op_code_1 (FF)
  Destination:       SEQ/alu_src_2L_7 (FF)
  Source Clock:      clk_div1 rising
  Destination Clock: clk_div1 rising

  Data Path: SEQ/alu_op_code_1 to SEQ/alu_src_2L_7
                                Gate     Net
    Cell:in->out      fanout   Delay   Delay  Logical Name (Net Name)
    ----------------------------------------  ------------
     FDE:C->Q             40   0.591   1.345  SEQ/alu_op_code_1 (SEQ/alu_op_code_1)
     LUT4:I1->O            2   0.643   0.527  ALU1/ci32_SW0 (N2251)
     LUT4:I1->O            1   0.643   0.000  ALU1/adder_comp/C11_F (N1292)
     MUXF5:I0->O           3   0.276   0.531  ALU1/adder_comp/C11 (ALU1/adder_comp/C1)
     MUXF5:S->O           12   0.756   0.964  ALU1/adder_comp/C21 (ALU1/adder_comp/C2)
     LUT4:I3->O            8   0.648   0.760  ALU1/ans_L<5>104 (ALU1/ans_L<5>104)
     LUT4:I3->O           17   0.648   1.054  ALU1/ans_L<7>95_SW0 (N264)
     LUT4:I3->O            1   0.648   0.000  SEQ/alu_src_2H_and000055_SW3_F (N1304)
     MUXF5:I0->O           1   0.276   0.423  SEQ/alu_src_2H_and000055_SW3 (N599)
     LUT4_D:I3->O         15   0.648   1.049  SEQ/alu_src_2L_mux0005<7>121228 (N285)
     LUT4:I2->O            1   0.648   0.000  SEQ/alu_src_2H_mux0007<6> (SEQ/alu_src_2H_mux0007<6>)
     FDE:D                     0.252          SEQ/alu_src_2H_1
    ----------------------------------------
    Total                     13.330ns (6.677ns logic, 6.653ns route)
                                       (50.1% logic, 49.9% route)

有人可以解释发生了什么吗?

4

3 回答 3

3

几个定义:

  • 门延迟:对于一个输入导致一个块的输出发生变化
  • 网络延迟:信号到达下一个块的时间

13.33ns由两部分组成。6.677ns 的 Gate 延迟和 6.653ns 的 Net 延迟

门延迟的主要因素是函数包含在逻辑锥中的复杂程度。网络延迟的主要因素是信号驱动了多少东西。

报告中的每一行都在谈论一个逻辑块。所以第一行 alu_op_code_1 寄存器,以及从 C 引脚(Clk)到 Q 引脚(输出)所花费的时间。扇出列表示 Q 引脚驱动多少个逻辑块。在这种情况下,它是 40,这就是网络延迟非常高的原因。不过,对于像 ALU 的操作码这样的常用寄存器来说,具有高扇出是完全可以理解的。

我们还可以将路径视为一个整体,并看到它从 SEQ 中的操作码进入 ALU。通过一个加法器,回到 SEQ 块,最终进入另一个名为 alu_src_2H_1 的寄存器。那条路是什么,我不能告诉你。只有知道源代码的人才能做到这一点,然后尝试查看这两个寄存器之间的逻辑是什么。

我有点困惑的是,这条路径看起来符合时机(13.33ns 是目标),但你说你需要“加强”。为什么?

于 2011-10-28T12:45:40.273 回答
3

查看报告中的名称并与您的源代码进行比较。

基本上,您只有组合逻辑在“SEQ”实例中从 ALU 操作码流向 ALU 输出信号“alu_src_2L”:

来源:SEQ/alu_op_code_1 (FF) 目的地:SEQ/alu_src_2L_7 (FF)

查看详细信息,您可以看到在这个特定路径中,大部分时间都用于您的 ALU “ALU1”,特别是在加法器/比较逻辑“adder_comp”中。如果您想在此路径中减少延迟,您将不得不优化逻辑或使用另一个寄存器切断路径(并使设计的其余部分仍然可以使用该更改)。

于 2011-10-28T16:00:55.413 回答
1

首先,在为 FPGA 编写 HDL 或调整 HDL 时,了解您的特定 FPGA 的功能和限制确实是值得的。Xilinx 在记录每个 FPGA 模型方面做得非常出色。查看 LUT4 和 MUXF5 模块,您的 FPGA 系列可能是 Spartan 3?通过研究数据表,您可以了解哪些硬件结构实施起来非常高效,哪些需要更多资源。一般来说,一块硬件映射到芯片上的实际位置越近,它的执行速度就越快,占用的面积就越小。

例如,Xilinx LUT 也可以用作移位寄存器,这意味着您不必在 slice 中使用触发器。如果您确保将移位寄存器映射到 LUT,这将带来非常显着的改进。XST 会尽力使用您的 HDL 来推断这些有效的映射,但通常有一些愚蠢的事情会阻止这些有效的映射,例如在复位信号之前检查启用信号。确保您研究了合成器的输出以及布局和布线,以发现可以改进 FPGA 映射的实例。Xilinx 文档提供了 XST 可用于推断更高效组件的示例 VHDL 和 Verilog。有时直接简单地实例化组件通常更容易。对于复杂的组件,有 UNIMACRO 和 COREGEN 向导,

举一个极端的例子,PicoBlaze 微控制器是专门为利用 Xilinx FPGA 架构而编写的。研究 PicoBlaze 源代码以查看这种高效映射的示例可能会有所帮助。

其次,如果您的组合逻辑路径太长,则会限制您的最大时钟频率。除了重写代码以更好地映射到 FPGA 或重写以消除不必要的硬件资源之外,您还可以在组合逻辑链的中间位置插入触发器(寄存器)。在计算机体系结构中,这称为流水线,会导致您增加每条指令的周期数。例如,PicoBlaze 每条指令使用两个周期。Intel Pentium 4 每条指令大约有 17 个周期。如果你很聪明,那么你可以编写你的 HDL,即你开始处理一条指令,同时完成最后一条指令的处理。这意味着每条指令仍需要 2 个时钟周期(延迟),但是您可以在每个周期(吞吐量)中淘汰一条指令。大多数微控制器(如 8051 和 PicoBlaze)关注延迟,而大多数微处理器(如 x86 架构)关注吞吐量。

于 2011-10-29T08:48:58.093 回答