-->

如何从综合报告推断(How to deduce from synthesis report)

2019-08-02 15:42发布

采用Xilinx我已经编码的8051架构VHDL。 在试图提高时钟频率,我曾流水线所有的80C51指令。 该指令能够按预期运行,对如。 正在被处理的第一指令时,所述第二指令获取取出。

不过,我只尽管创造了3流水线深度,从综合报告得到(约+/-赫兹)的稍高的时钟频率。 我想通了,由综合报告指定的瓶颈是由于一个操作,但我不明白的综合报告。

请问什么是“SEQ / decode_3到SEQ / i_ram_addr_7”努力做数据路径? (从我的猜测,我推断,使用的情况下,当语句来检查100+相关操作码,但不知道这是瓶颈,但是我无能)

因此,我只有2个查询是:

首先,是有可能,流水线不增加时钟频率和测试平台是解释在时序减少的唯一途径?

其次,我怎么可能推断出在我的代码路径是从“SEQ / decode_3到SEQ / i_ram_addr_7”的瓶颈。

谢谢你的人谁可以帮助解释我的疑惑!

Timing Summary:
---------------
Speed Grade: -4

   Minimum period: 12.542ns (Maximum Frequency: 79.730MHz)
   Minimum input arrival time before clock: 10.501ns
   Maximum output required time after clock: 5.698ns
   Maximum combinational path delay: No path found

Timing Detail:
--------------
All values displayed in nanoseconds (ns)

=========================================================================
Timing constraint: Default period analysis for Clock 'clk'
  Clock period: 12.542ns (frequency: 79.730MHz)
  Total number of paths / destination ports: 113114 / 2670
-------------------------------------------------------------------------
Delay:               12.542ns (Levels of Logic = 10)
  Source:            SEQ/decode_3 (FF)
  Destination:       SEQ/i_ram_addr_7 (FF)
  Source Clock:      clk rising
  Destination Clock: clk rising

  Data Path: SEQ/decode_3 to SEQ/i_ram_addr_7
                                Gate     Net
    Cell:in->out      fanout   Delay   Delay  Logical Name (Net Name)
    ----------------------------------------  ------------
     FDC:C->Q            102   0.591   1.364  SEQ/decode_3 (SEQ/decode_3)
     LUT4_D:I1->O         10   0.643   0.885  SEQ/de_state_cmp_eq002111 (N314)
     LUT4:I3->O            7   0.648   0.740  SEQ/de_state_cmp_eq00711 (SEQ/de_state_cmp_eq0071)
     LUT4:I2->O            3   0.648   0.534  SEQ/i_ram_addr_mux0000<0>11111 (N2301)
     LUT4:I3->O            1   0.648   0.000  SEQ/i_ram_addr_mux0000<0>11270_SW0_SW0_F (N1284)
     MUXF5:I0->O           1   0.276   0.423  SEQ/i_ram_addr_mux0000<0>11270_SW0_SW0 (N955)
     LUT4_D:I3->O          6   0.648   0.701  SEQ/i_ram_addr_mux0000<0>11270 (SEQ/i_ram_addr_mux0000<0>11270)
     LUT3_L:I2->LO         1   0.648   0.103  SEQ/i_ram_addr_mux0000<7>221_SW2_SW0 (N1208)
     LUT4:I3->O            1   0.648   0.423  SEQ/i_ram_addr_mux0000<7>351_SW1 (N1085)
     LUT4:I3->O            1   0.648   0.423  SEQ/i_ram_addr_mux0000<7>2 (SEQ/i_ram_addr_mux0000<7>2)
     LUT4:I3->O            1   0.648   0.000  SEQ/i_ram_addr_mux0000<7>167 (SEQ/i_ram_addr_mux0000<7>)
     FDE:D                     0.252          SEQ/i_ram_addr_7
    ----------------------------------------
    Total                     12.542ns (6.946ns logic, 5.596ns route)
                                       (55.4% logic, 44.6% route)

=========================================================================
Timing constraint: Default OFFSET IN BEFORE for Clock 'clk'
  Total number of paths / destination ports: 154 / 154
-------------------------------------------------------------------------
Offset:              8.946ns (Levels of Logic = 6)
  Source:            rst (PAD)
  Destination:       SEQ/i_ram_diByte_1 (FF)
  Destination Clock: clk rising

  Data Path: rst to SEQ/i_ram_diByte_1
                                Gate     Net
    Cell:in->out      fanout   Delay   Delay  Logical Name (Net Name)
    ----------------------------------------  ------------
     IBUF:I->O           444   0.849   1.392  rst_IBUF (REG/ext_int/fd_out1_0__or0000)
     BUF:I->O            445   0.648   1.425  rst_IBUF_1 (rst_IBUF_1)
     LUT3:I2->O            4   0.648   0.730  ROM/data<1>1 (i_rom_data<1>)
     LUT4:I0->O            1   0.648   0.500  SEQ/i_ram_diByte_mux0000<1>17_SW0 (N1262)
     LUT4:I1->O            1   0.643   0.563  SEQ/i_ram_diByte_mux0000<1>32 (SEQ/i_ram_diByte_mux0000<1>32)
     LUT4:I0->O            1   0.648   0.000  SEQ/i_ram_diByte_mux0000<1>60 (SEQ/i_ram_diByte_mux0000<1>)
     FDE:D                     0.252          SEQ/i_ram_diByte_1
    ----------------------------------------
    Total                      8.946ns (4.336ns logic, 4.610ns route)
                                       (48.5% logic, 51.5% route)

=========================================================================

为了让我更加specfic,我给的例子代码snipplet在1个操作码译码阶段。

解码opdcode,这是一个mov指令时,以下是1这样的情况下。 大约有超过100个的操作码(100+指令),这意味着该情况下陈述有超过100时语句。

案例操作码

--mov A,Rn中
当 “11101000” | “11101001” | “11101010” | “11101011” | “11101100” | “11101101” | “11101110” | “11101111”=>情况下de_state是当E7 =>

  de_state <= E8; when E8 => de_state <= E9; when E9 => de_state <= E10; when E10 => --Draw PSW i_ram_addr <= xD0; i_ram_rdByte <= '1'; de_state <= E11; when E11 => --Draw from Rn i_ram_addr <= "000" & i_ram_doByte(4 downto 3)& opcode(2 downto 0); i_ram_rdByte <= '1'; de_state <= E12; when E12 => --Place into EDR EDR <= i_ram_doByte; --close rdByte i_ram_rdByte <= '0'; when others => end case; 

我希望你能有我的VHDL代码更好的主意。 我将不胜感激任何形式的帮助。 谢谢!

Answer 1:

由于您使用Xilinx公司,我相信你也有机会获得的PlanAhead? 尝试“分析时序/平面图设计(的PlanAhead)”(“实施设计”下 - >“布局布线”)。

的PlanAhead应该打开,并给你在底部的时序结果的看法。 挑选关键路径(具有最小松弛),右键单击它并选择“原理”,这将显示所涉及的图元的图形视图。 然后,您可以用鼠标右键单击原语,然后选择“展开锥” - >“要翻牌”来获得周围元件的景色了。

这会帮助你得到一个什么样的信号都参与一个更好的主意。 尝试跟踪输入和输出信号到你的VHDL代码,并专注于优化这条道路上。



Answer 2:

届时将有来自仅此信息没有很好的答案; 我们只能猜测源代码生成此硬件。

但很显然,你需要检查源,做个假设,为什么它是缓慢的,采取行动,纠正问题,并测试解决方案。

而重复,直到速度不够快。

我的猜测,给您的提示,有一个case语句的操作码解码...

武器之一是这样的:

when <some expression involving decode>  =>
   address <= <some address calculation>;

问题是,往往是两个表达式是相互关联的,使它们在同一个周期进行评估。 一个例子的解决方案是预先计算的地址表达(即,在先前的周期)到一个寄存器中,并且作为重写的情况下臂:

when <some expression involving decode>  =>
   address <= register;

如果你猜对了,结果会更快略早,并有另一个(类似的)瓶颈解决。 重复,直到足够快...

但是,如果没有源和时序分析,不要指望一个更具体的答案。

编辑:已经发布源代码的一小部分,画面更清晰一点:你有两个嵌套的Case语句,每一个相当大的。 你显然需要一些简化...

我注意到,只有内壳臂2分配给i_ram_addr,但时序分析显示了i_ram_addr一个庞大而复杂的复用; 显然有很多有助于条款i_ram_addr其他情况下武器...

我建议你可以选择从主Case语句分开处理i_ram_addr,写你可以在简单的机器单独产生i_ram_addr。 比如我要指出,操作码的情况下手臂相当于:

if OPCODE(7 downto 3) = "11101" then ...

问你如何简单的得到i_ram_addr单独的解码器。 你可能会发现,其他很多情况下武器做i_ram_addr非常类似的事情(原8051周的设计师将在简化逻辑的机会已经跳了!)。 综合工具可以在简化的逻辑相当聪明,但是当事情变得太复杂,他们可能会错过机会。

(在这个阶段,我会注释掉i_ram_addr分配和先不谈解码器的其余部分)



文章来源: How to deduce from synthesis report
标签: vhdl xilinx