欢迎FPGA工程师加入官方微信技术群

要解决任何综合崩溃问题,通常应该从了解崩溃发生在综合的哪个阶段着手,以及工具方面是否有任何迹象指向特定的模块、赋值、声明或推断。

在某些情况下会出现日志不足的状况,并且需要与赛灵思共享 RTL 设计,才能对问题进行进一步调试。

Elaboration 阶段中的工具崩溃:

这意味着该工具是在对 RTL 设计进行细化时崩溃的,综合日志看上去如下所示:

-------------------------------------------------------------------

Starting RTL Elaboration : Time (s): …

----------------------------------------------------------------

…….

Abnormal program termination (11)

Please check '..hs_err_pidxxxx.log' for details

Parent process (pid xxxxx) has died. This helper process will now exit

OR

----------------------------------------------------------------

Starting RTL Elaboration : Time (s): …

----------------------------------------------------------------

----------------------------------------------------------------

Finished RTL Elaboration : Time (s): cpu = …

----------------------------------------------------------------

RTL Elaboration failed

在综合日志中,您应该会看到类似于“Abnormal program termination (11)”的崩溃相关消息(尽管可能是在没有消息的情况下)。这些问题就是崩溃问题。

如果是细分崩溃问题,在大多数情况下,问题出在工具中未得到正确处理的 RTL 或 RTL 的某些部分。如果是这类情况,请与我们分享您的工程,以便我们可以在工具中添加修复程序,避免将来出现这类问题。

要在您这里调试此类问题,以下步骤可能会有用。这里的目标是将崩溃缩小到“设计模块”,然后 -> “RTL 文件” -> “某部分 RTL” -> “Line of RTL 代码行”。

确定发生问题的 RTL 文件是最艰巨的任务之一。要找到有问题的模块,可以使用以下方法:

使用黑匣子的方法

赛灵思

假设设计结构及层级如下所示:

这里的目标是使用 black_box 属性消除其他三个模块。我们需要假设一个模块有问题。假设 A 有问题:对于这种情况,保持 A 模块完好无损,并将 RTL 文件中的 B、C 和 D 都设为 black_box:

(* black_box *) module B (

…)

end module

(* black_box *) module C (

…)

end module

(* black_box *) module D (

…)

end module

运行 Synthesis 并检查工具是否以崩溃。

如果工具已崩溃,则问题要么出在模块 A,要么出在其子模块 (A11、A12 ... A21、A22 ......)中。在这种情况下,通过保留 A1 并将 A2 设为 black_box 继续调试,依此类推。

如果工具没有崩溃,则尝试保持 B 模块完好无损,并将 A、C 和 D 标记为 black_box。

这里有一个简单的示例工程:

在综合上述层级时,该工具崩溃并在综合日志中出现以下错误:

….
….
Parameter break bound to: 8'b11110000
An unrecoverable error has occurred, synthesis canceled.
-------------------------------------------------------------------
Finished RTL Elaboration : Time (s): cpu = 00:00:05 ; elapsed = 00:00:07 . Memory (MB): peak = 3278.059 ; gain = 194.688 ; free physical = 20020 ; free virtual = 114523
-------------------------------------------------------------------
RTL Elaboration failed
INFO: [Common 17-83] Releasing license: Synthesis
4 Infos, 5 Warnings, 0 Critical Warnings and 1 Errors encountered.
synth_design failed
ERROR: [Common 17-69] Command failed: Synthesis failed - please see the console or run log file for details
INFO: [Common 17-206] Exiting Vivado at Thu Feb 21 23:37:22 2019...

正如您在日志中可以清楚地看到的那样,当工具试图对设计进行细分时发生了崩溃。

为了调试这个问题,我们需要开始对模块进行黑盒测试。尝试多个组合后,当使用 black_box 属性禁用 ps2_to_ascii1  时,综合通过,同样,当仅启用 pas2_to_ascii2 时,该工具会崩溃,如下所示:


attribute black_box : string;
attribute black_box of Debounce : component is "yes";
attribute black_box of sinchronizer : component is "yes";
attribute black_box of SIPO : component is "yes";
attribute black_box of Driver : component is "yes";

由于我们已经确定了 RTL 文件/模块,现在的目标是要找到 RTL 中导致崩溃的部分。这可能是因大循环迭代、长而复杂的赋值、复杂的位片操作或不正确的编码方式或不支持的结构而导致的。在上述示例中,由于不支持编码方式,导致工具崩溃:

process(…)
begin
case dummy is
when S1 =>
    if rising_edge(clk) then
      ...
        end if;
    end if;
when S2 =>
    if rising_edge(clk) then
       ...
        end if;
    end if;
when S3 =>
    if rising_edge(clk) then
        ...
        end if;
    end if;
when S4 =>
  ...
end case;
end process;

**也可以通过使单个模块成为综合的“顶层模块”来查看工具是否会崩溃来找到引起问题的模块或RTL文件。

例如,当 pas2_to_ascii2 被设置为顶层模块时,上述工程会以相同的错误崩溃。

跨边界优化阶段的崩溃:

什么是跨边界优化?

该工具将基于 synth_design 命令尝试在任何给定设计上执行许多优化。全局设置、块级设置和属性可以定义工具是否可以在层级(边界)内或跨层级(边界)执行优化。对于 Vivado 的默认设置,‘-flatten_hierarchy’ 被设置为‘rebuilt’,该工具会尝试展平层级并执行跨边界优化。

该工具会试图找到跨边界的优化可能性,并且可能会由于工具错误或由于设计问题而崩溃(在最坏的情况下)。在上述情况下,日志可能如下所示:

--------------------------------------------------------------------------
Start Cross Boundary Optimization
--------------------------------------------------------------------------
Abnormal program termination (6)
Please check 'hs_err_pid5649.log' for details
Parent process (pid 5649) has died. This helper process will now exit

为了防止这类崩溃,一个简单的解决方法是通过将全局设置“flatten_hierarchy”更改为“none”来禁用跨边界优化。使用“none”的缺点可能是一个糟糕的 QoR,所以可能不适用于所有设计。

一个更好的方法是通过黑匣方法找到引起问题的层级,然后对该层级使用“KEEP_HIERARCHY/DONT_TOUCH”属性来禁用该层级内/来自该层级的任何跨边界优化。

也有一个可能是,工具在推断/优化  BRAM  时崩溃。

在这种情况下,您可以禁用 BRAM 推断来看看这是否是真正的原因。要实现这一点,需要将 -max_bram 选项设置为‘0’。如果在将‘synth_design -max_bram’设置为 0 后工具即完成综合,那么,崩溃与 BRAM 推断有关。

由于禁用 BRAM 推断不是一个可接受的方案,用户将需要找到 BRAM 寄存器所在的模块,并且基于客户的应用情况,可以对存储器寄存器使用“DONT_TOUCH”属性以阻止 BRAM 推断。

另一种方法是将该模块标记为 OOC、同时 -max_bram 标记为'0',并使用默认值(即 -max_bram "-1")来运行顶层模块的综合。

如果您仍然遭遇崩溃,请将您的日志文件 (hs_pidxxxx.log and runme.log) 和详细的设计信息发布到赛灵思官方中文论坛。

时序优化中的崩溃:

Vivado 是一个时序驱动综合引擎,对于所有设计,该工具都会尝试查看是否有任何可能执行的优化以满足设计的时序要求。在一些情况下,该工具可能会在时序优化阶段崩溃,日志如下:

-------------------------------------------------------------------
Start Timing Optimization
-------------------------------------------------------------------
Abnormal program termination (11)
Please check 'hs_err_pid15514.log' for details

在这类情况下,首先要做的事是禁用约束 (.xdc) 文件并运行综合。如果工具通过综合操作,那么问题可能与设计加约束的方式(用户问题)或工具处理设计约束的方式(工具问题)有关。

调试此类问题的一种方法会是找到导致崩溃的约束/约束集。这可以通过注释约束然后逐个启用它们来查看工具何时再次崩溃来完成。一旦您有一组引起失败的约束,请参考 UFDM 验证约束及其用法,然后对其进行相应的修改以避免这类崩溃问题。

如果您仍然看到崩溃,请将您的日志文件  (hs_pidxxxx.log and runme.log) 及详细设计信息发布到赛灵思中文论坛。

其他重要调试步骤及其分析结果:

FSM 推断崩溃问题:

我们还看到了在综合 FSM 时工具崩溃的一些问题,将全局设置 -fsm_extraction 设为“off”有助于解决基于 FSM 的崩溃问题。

堆栈溢出引起的崩溃问题:

该工具在堆栈的内存耗尽时可能会崩溃,而且可能会不报告任何情况。此外,该工具甚至可能不会在运行目录中生成 hs_pidxxxx.日志。对于与堆栈相关的崩溃,请使用以下命令调用 Vivado 工具:

“vivado -stack 2000”

这样做有助于该工具获得更多可用来执行综合的堆栈内存,并且还可以避免与堆栈相关的崩溃问题。

Windows 操作系统特定的崩溃:

有几种原因会引起特定于 Windows 的崩溃,因此要确保您看到的问题不是 Windows 操作系统的特定问题,请在任一支持的 Linux 操作系统上运行一次。

OOC (Out of Context) 与非 OOC 流程:

我们已经看了一些示例,当工程设置为完全非 OOC(没有 IP、没有 RTL 模块为 OOC)时,整个设计会通过综合。在某些情况下,相反的情况也可行,可通过在 OOC 模式而不是“Global”模式下生成 IP 的输出文件。

欢迎通信工程师和FPGA工程师关注公众号

FPGA微信技术群

欢迎大家加入全国FPGA微信技术群,这里有一群热爱技术的工程师,在这里可以一起交流讨论技术!

用手指按住就可以加入FPGA全国技术群哦

FPGA IP核服务:各类优质IP核服务商,服务到位,有保障!有需求的可以直接联系群主!

FPGA技术群平台自营:Xilinx Altera 镁光、三星、海力士、ADI TI ST NXP 等品牌的优势代理分销商,欢迎大家有需求随时发型号清单,我们将在第一时间为您提供最优竞争力的报价!价格低于您原有供应商5%以上!欢迎询价-直接把需求发给群主!

FPGA技术群官方鸣谢品牌:Xilinx、 intel(Altera)、microsemi(,Actel)、LattIC e,Vantis,Quicklogic,Lucent等

vivado中的rtl中电路图无发生成_Vivado 综合崩溃调试指南相关推荐

  1. vivado中的rtl中电路图无发生成_FPGA零基础学习:数字电路中的组合逻辑

    大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分.大侠可以关注FPGA技术江湖,在"闯荡江湖"."行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢. ...

  2. 【Vivado那些事儿】VIVADO中时序报告中WNS,WHS,TNS,THS含义

    VIVADO中时序报告中WNS,WHS,TNS,THS含义 运行"report_timing"或"report_timing_summary"命令后,会注意到 ...

  3. Linux中使用Msmtp+mutt+shell自动发邮件程序安装说明

    Linux中使用Msmtp+mutt+shell自动发邮件程序安装说明 ------by liyoujia 环境: 需要用到mutt 和 msmtp 这两款软件 Mutt:linux初始化安装的时候自 ...

  4. dbscan算法中 参数的意义_无监督机器学习中,最常见的聚类算法有哪些?

    在机器学习过程中,很多数据都具有特定值的目标变量,我们可以用它们来训练模型. 但是,大多数情况下,在处理实际问题时,数据不会带有预定义标签,因此我们需要开发能够对这些数据进行正确分类的机器学习模型,通 ...

  5. 解决eclipse中mybatis的xml配置文件无代码提示问题

    解决eclipse中mybatis的xml配置文件无代码提示问题 参考文章: (1)解决eclipse中mybatis的xml配置文件无代码提示问题 (2)https://www.cnblogs.co ...

  6. 刀塔2国服服务器都未响应,电脑中玩dota2卡死出现无响应蓝屏红字warning:connection problem如何解决...

    dota2是款众多玩家都非常青睐的一款网络游戏,可是在电脑中玩的时候,想必很多玩家都会碰到这样的现象,比如玩odta2选人或者进画面会卡住不动或者出现无响应的情况,或者右上角显示红字warning:c ...

  7. Quartus中如何找回画电路图时的工具栏(Block Editor)

    Quartus中如何找回画电路图时的工具栏 我们在利用Quartus设计电路图时,会经常用到旁边的工具栏,但是有时候我们会由于误操作将工具栏给隐藏了,这时候该怎么还原呢? 1.我们先进入Window窗 ...

  8. Android中ListView选中事件setOnItemSelectedListener无反应不生效问题

    Android中ListView选中事件setOnItemSelectedListener无反应不生效问题 在学习Android中ListView组件时,android模拟器运行app时,发现点击有反 ...

  9. 八年老Android开发谈:垃圾中的战斗机,offer都发了,最后把我拒了

    近日网上一则热帖引起了大家的广泛关注和讨论!故事背景是一个八年Android开发面试一家初创小公司leader岗位的经过.接下来我们看看主人公自述的面试经历. 垃圾中的战斗机,offer都发了,最后把 ...

最新文章

  1. linux smtp 发送邮件乱码,使用gomail发送邮件之解决附件名乱码的问题
  2. linux安装mysql出现Could NOT find Curses (missing CURSES_LIBRARY CURSES_INCLUDE_PATH),提示解决方法...
  3. 集群NAS+SSD如虎添翼
  4. ANSYS——常见梁的后处理方法(弯曲应力、弯矩、轴力等的显示)
  5. 关于SWT中的表格(TableViewer类)
  6. 哈希冲突常用解决方法
  7. 如何系统的自学python-如何系统的学习python?
  8. Linux教学项——基础环境及命令教学(包括实用shell脚本)
  9. 四年级计算机教学实录,四年级信息技术《媒体播放器》教学设计
  10. iometer使用教程linux,Iometer磁盘测试工具中文使用说明手册 二
  11. 内链接和外连接的区别
  12. 最全面SpringCloud 教程-转自方志朋
  13. 安卓投屏软件_安卓投屏下载-安卓投屏下载v7.7.3
  14. Android Studio的Signature Versions选择,分别是什么意思
  15. TI 海思 安霸 智利普 等顶级摄像机芯片简要介绍
  16. uniapp 热更新和整包更新
  17. 网卡地址能查计算机位置吗,如何通过网卡地址查找到丢失的电脑
  18. 余三码和8421码对比
  19. 三年登顶,浪潮新一代超融合开始冲刺
  20. 显微镜常用技术参数和专属名词

热门文章

  1. php对外发包解决方案(导致w3wp.exe很占cpu)
  2. 洛谷P1962 斐波那契数列题解
  3. learning scala read from file
  4. 怎么随时获取Spring的上下文ApplicaitonContext,和Spring管理的Bean
  5. 个人学习进度(第十三周)
  6. dofuscator C# 混淆器 原来如此
  7. 分享30个激励的非营利网站设计精美案例
  8. Android启动过程深入解析
  9. ros消息服务器,ROS服务和消息
  10. nginx-启动gzip、虚拟主机、请求转发、负载均衡