报错信息[Synth 8-3352]

开放1 回答 176 浏览

报错信息[Synth 8-3352] multi-driven net count[9] with 2nd driver pin ‘cnt_reg[9]/Q’。

分享:
  • 二牛学FPGA

    原因:在程序设计过程中出现了变量的重复定义。

    措施:把重复定义的变量去除即可。

    ————————————

    vivado综合过程中的multi-driven net警告

    今天在调试过程中发现FPGA代码运行与预期不一致,原以为会是时序问题,后来留心看了一下综合后的warning,看到了多重驱动的警告,

    Critical Warning : [Synth 8-3352] multi-driven net <signal_name> with 1st driver pin’<pin_name1>’ [xxx.vhd.3]

    没想到vivado竟然会在多重驱动的情况下完成综合、布局布线。

    解决过程

    1. 初步排查代码,没发现什么异样;
    2. 通过RTL分析工具,在原理图上观察特定信号的上下游连接情况,发现信号被优化掉了,添加keep属性后依然无法看到该信号的下游连接情况;
    3. 无语之下,逐步注释掉代码块,观察综合情况,定位到了问题。

    问题分析

    一般情况下,多重驱动出现于在多个process块(always块)中对同一信号进行赋值,但在我碰到的问题中,vivado提示我的某个模块的输出(暂假定是A和B)存在多重驱动,该模块单独综合未提示多重驱动警告,在顶层模块中,对A和B仅仅使用并未进行赋值。排查后发现出现下述情况,

    test(7 downto 0)  <= A(7 downto 0);
    test(15 downto 8) <= B(7 downto 0);
    
    test(15 downto 0) <= (others=>'0');

    亦即实际上不是信号A和B存在多重驱动,而是被A(和/或)B赋值后的信号出现了多重驱动。由于test信号出现多重驱动,对A和B信号(上游信号)的综合也出现了影响,哪怕它们在其他地方是正确无误的使用,这两个信号也没有得到正确的综合结果,而是被优化掉了。考虑到默认情况下vivado综合时不会因多重驱动而停止运行,可以考虑将其警告提示设置成错误提示。

    Xilinx官方AR

登录后可在本页底部提交回答

提问者

爱提问的小白白查看主页

描述场景与已尝试方案,更容易获得有效解答

浏览「技术分享」

相关问题

同分类问答

提问建议

  • 标题写清核心疑问,避免「求助」「请问」等空泛用语
  • 正文补充环境、版本、报错信息或截图
  • 先搜索本站是否已有相近问题,减少重复提问
  • 若与课程相关,请标明课时或章节便于讲师定位

技术问答

问完之后的闭环

  • 关联课程精学高频问题往往对应章节,建议回到课程补基础。
  • 产出与互助解决过程可写成笔记,帮助后续同学。

探索全站