FPGA线上课程平台|最全栈的FPGA学习平台|FPGA工程师认证培训
登录
首页-所有问题-技术分享-正文

报错信息[Synth 8-3352]

爱提问的小白白爱提问的小白白
技术分享
17天前
0
0
10

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

爱提问的小白白

爱提问的小白白

初级工程师
这家伙真懒,几个字都不愿写!
152652.68K
分享:
报错信息[Opt 31-67]
报错信息[Opt 31-67]上一篇
报错信息[Synth 8-1031] cnt is not declared下一篇
报错信息[Synth 8-1031] cnt is not declared
回答列表总数:1
  • 二牛学FPGA

    二牛学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


    回答给:报错信息[Synth 8-3352] – 2025-11-09 21:44:25 - 第1张

    回答给:报错信息[Synth 8-3352] – 2025-11-09 21:44:25 - 第2张

    回答给:报错信息[Synth 8-3352] – 2025-11-09 21:44:25 - 第3张



    17天前
我要回答
回答被采纳奖励100个积分
FPGA线上课程平台|最全栈的FPGA学习平台|FPGA工程师认证培训
请先登录