gpt4 book ai didi

vhdl - 如何从综合报告中推导出

转载 作者:行者123 更新时间:2023-12-01 04:01:17 26 4
gpt4 key购买 nike

我已经使用 xilinx 在 VHDL 中编写了 80c51 架构。为了增加时钟频率,我已经流水线化了所有 80c51 指令。指令能够根据需要执行,例如。当第一条指令被处理时,第二条指令被取出。

但是,尽管从综合报告中创建了 3 的流水线深度,但我只获得了稍高的时钟频率(大约 +/-10Hz)。我发现瓶颈是由于综合报告指定的一项操作,但我无法理解综合报告。

请问从“SEQ/decode_3”到“SEQ/i_ram_addr_7”的数据路径是做什么的?
(根据我的猜测,我推断出用例,when 语句来检查 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)

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

为了让我更具体,我将在 1 个操作码的解码阶段给出一个示例代码的片段。

以下是解码 opdcode 时的 1 种情况,这是一条 mov 指令。大约有 100 多个操作码(100 多个指令),这意味着这个 case 语句有超过 100 个 when 语句。

case OPCODE is

--MOV A, Rn
when "11101000" | "11101001" | "11101010" | "11101011" | "11101100" | "11101101" | "11101110" | "11101111" => case de_state is when 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 代码。我将不胜感激任何形式的帮助。谢谢!

最佳答案

既然您使用的是 Xilinx,我想您也可以访问 PlanAhead?尝试“Analyze Timing/Floorplan Design (PlanAhead)”(在“Implement Design”->“Place & Route”下)。

PlanAhead 应该打开,并在底部为您提供计时结果的 View 。选择关键路径(最不松弛的路径),右键单击它并选择“原理图”,这将显示相​​关基元的图形 View 。然后,您可以右键单击基元并选择“扩展锥体”->“到触发器”以查看周围的组件。

这应该可以帮助您更好地了解所涉及的信号。尝试将输入和输出信号跟踪到您的 VHDL 代码,并专注于优化路径。

关于vhdl - 如何从综合报告中推导出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13356289/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com