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

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

Critical Warning : [Synth 8-3352] multi-driven net with 1st driver pin’’ [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

vivado综合过程中的multi-driven net警告_第1张图片 vivado综合过程中的multi-driven net警告_第2张图片 vivado综合过程中的multi-driven net警告_第3张图片

你可能感兴趣的:(FPGA,#,Vivado)