报错信息[Synth 8-3352]

已解决2 回答 176 浏览

报错信息[Synth 8-3352] multi-driven net Q with 2nd driver pin ‘GND

分享:
  • 二牛学FPGA已采纳

    原因:信号被多处驱动,在多个 always 语句块中被赋值。

    措施:程序设计应避免此类情况的发生,此时应该考虑重新设计程序。

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

    Vivado WARNING:Multi-driven net Q with xth driver pin 警告的原因和消除方法

    出现这个警告的原因是很简单的。大多是编写出了下面这样的烂代码:

    reg a;
    
    wire c,d;
    
    always@(posedge clk, posedge rst)
    
    begin
    
        if(rst)
    
            a<=0;
    
       else
    
            a<=1;
    
    end
    
    always@(posedge clk, posedge rst)
    
    begin
    
        if(rst)
    
            a<=0;
    
       else
    
            a<=c^d;
    
    end

    从上面可以看出,变量a跨 always块出现,亦即出现了在了两个或者多个ayways块。这样就会出现这一警告。相信大家看一些书籍或者文献的时候,都强烈建议大家不要这样写。一个寄存器类变量的赋值(等号左值)只能出现在一个always块中,如果作为等号右值,则可以跨多个always块。

    消除的方法很简单,就是只保留一个always块内冲突变量的赋值。如果你觉得你的设计必须出现在两个always块中,那么一般说明你的设计存在不合理之处。网上的确会有一些跨always块的冲突的解决办法,但感觉都很奇葩也不彻底。

  • 阿喵玩FPGA

    分析的详细,问题解决

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

提问者

爱提问的小白白查看主页

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

浏览「技术分享」

相关问题

同分类问答

提问建议

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

技术问答

问完之后的闭环

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

探索全站