这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » FPGA » FPGA有一个信号不受控制自动拉低

共10条 1/1 1 跳转至

FPGA有一个信号不受控制自动拉低

助工
2013-11-27 16:29:51     打赏
大家好,
      我用的软件是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是一个颜色计数。


        问题是,有的情况下,当full_pulse使flag = 1之后,flag又立刻变成0,而此时rst_n一直是1的,color也没有加到3,就是说让flag变成0的条件并没有满足。

        为什么flag会自动拉低呢?

        非常感谢!



关键词: FPGA     信号    

高工
2013-11-27 23:04:34     打赏
2楼

这种很多if else if else if.....语句里面赋值很容易出问题,还有敏感变量里面用negedge rst_n产生的是异步电路,最好改成

           if( xxx )
                flag <= 0;
           else if( xxx ) 或 else( xxx )
                flag <= 1; 




助工
2013-11-28 15:43:46     打赏
3楼
你的else之后是什么,最好将if else语句补充完整! 也可以用modelsim做个仿真看看!

助工
2013-12-02 17:33:19     打赏
4楼
我怎么记得回过了 在什么情况下出现的,仿真?板子? full_pulse和clk的关系是? color 和clk的关系是?

菜鸟
2013-12-03 16:45:29     打赏
5楼
最后一个else后边没有其他情况,我就写了else ;

菜鸟
2013-12-04 15:40:39     打赏
6楼
color都是与clk的上升沿产生的。full_pulse是由另一个比clk小点的时钟clk1产生的。这个我没说清楚。clk是125M,clk1是100m。我认为是100m产生的脉冲宽度比125m大,所以125m是一定会采集到full_pulse进行其它操作的。请问我这个想法是不是有问题呢?

菜鸟
2013-12-09 17:38:28     打赏
7楼
是的,您的想法有些问题。因为数字设计应该坚持同步设计原则,以保证电路的可靠性。目前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

助工
2013-12-16 14:42:38     打赏
8楼
太谢谢您了。这个问题我仿真也查不出来,逻辑上怎么看都正确。还是没有足够的数字设计知识。总之,非常感谢!

助工
2013-12-17 17:46:59     打赏
9楼
你125M去采一个100M的脉冲是够呛的。 然后,也要有跨时钟域的处理。 这就是我问你那些问题的原因。 你仿真出不来,是因为你仿真时候给的100M和125M 信号的相位关系是不出错的情况。你改变一下他们之间的相位关系……就能出现问题了。 另外,你所做的仿真,只是功能仿真,所以是不应该来检查这类错误的。 这类型的错误,应该是从编码规范,设计原则来杜绝。 检查工具有0-in 的CDC检查

助工
2013-12-18 14:17:37     打赏
10楼
采样定理可是要求2倍的规则啊


共10条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]