fpga有一个信号自动拉低

2019-07-16 01:07发布

大家好,
      我用的软件是ISE13.1.芯片是spartan3a。
      请教一个非常蹊跷的问题。
      代码如下:
        reg flag;
        always @(posedge clk or negedge rst_n)
        begin
            if(!rst_n)
                flag <= 0;
            else if(full_pulse)
                flag <= 1;
            else if(color == 2'd3)
                flag <= 0;
            else
                ;
        end
        
        full_pulse是一个脉冲,color是一个颜 {MOD}计数。
        问题是,有的情况下,当full_pulse使flag = 1之后,flag又立刻变成0,而此时rst_n一直是1的,color也没有加到3,就是说让flag变成0的条件并没有满足。
        为什么flag会自动拉低呢?
        非常感谢!
   

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
6条回答
z00
2019-07-16 07:07
数字设计应该坚持同步设计原则,以保证电路的可靠性。目前full_pulse 来自另外一个clock domain, 而且是一个脉冲,而不是电平。这种情况下,你可以采用toggle synchronizer [Ref 1] 来处理,以在新的clock domain 中能产生一个完整的脉冲。 目前你所遇到这种情况,可能是因为你在cross clock domain 后,又经过一系列组合逻辑,会产生毛刺。在同步设计的情况下,毛刺不是问题,但是在异步cross clock domain 情况下,就会引起误触发 Ref: [1] Practical design for transferring signals between clock domains, By Michael Crews and Yong Yuenyongsgool, Philips Semiconductors, EDN Magazine, Feb, 2003

评分

参与人数 1威望 +1 +1 收起 理由 中华小虾 + 1 + 1 很有道理。非常感谢。

查看全部评分

一周热门 更多>