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

在FPGA设计中遇到信号被优化掉的问题,通过排查发现是由于多重驱动导致。文章详细介绍了问题的定位过程,从初步代码审查到使用RTL分析工具,最终通过逐块注释代码找到根源。分析了多重驱动的常见原因及如何避免,建议将Vivado的多重驱动警告提升为错误以提高代码质量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

解决过程

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

问题分析

一般情况下,多重驱动出现于在多个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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值