verilog 中敏感列表的三个信号沿
想请问一下高手,敏感列表中的时钟信号和A信号上跳变 的时间 几乎挨着,这样会不会引起什么不良情况。毕竟现在没有运行成功。其实功能仿真时,数据发送又是成功的。
1,A信号是时钟clk时钟域下的吗?如果是,且A输出没有认为的delay的话,两者应该是同时变化的。
2,静态时序仿真和板上测试不能完全等同,板上实际时序取决于你的系统设计
最好使用边沿检测来处理A的边沿判断
3# gaurson
敏感列表中就是用到了A信号的上升沿而不考虑时钟的沿 来发数据的。这样就产生好多警告呢,都担心那些警告会造成不良后果呢。
的确A信号和时钟信号都是 芯片输出的信号。粗略一看是A上升沿和时钟下降沿是“对齐”的,其实放大仔细一看,不是的。这就是为什么当时钟在这个时候跳变发数据也没有响应呢。
我也经常会遇到类似的问题,,很纠结的情形。
供参考:如果确实是A上升沿和时钟上升沿挨着,而且A要略微落后于时钟上升沿,是否可以考虑对clock path做一些处理(加一些buffer或者几级非门等等),让处理后的clock上升沿要晚于A信号,这样应该能解决问题?!
6# zhouzhiping849
其实你说的这情况,很可能会被软件给优化掉吧?当然这只是我看过资料后的想法,实际中,我从未用buffer 或几级取反来 达到这样的目的。可以去试试。其实,这里是时钟超前,需要对时钟buffer,还不知道会不会对其他造成影响呢。直接用buf A1(CLKOUT,CLK);就可以了是吧?
同意2楼的看法。
从描述上来看,信号A是clk时钟域的异步信号。
对于你目前的实现方式,对硬件来说不是一个好的可综合coding style。
我觉得,可以考虑把信号A转换为clk时钟域的同步信号。对于单bit信号,打两拍就可以了。在异步转同步的过程中,存在1拍的左右偏移,由于你是清楚信号A的周期的,所以在转成同步信号的同时,还需要注意周期的判断,因为1拍的左右偏移会引起信号周期的判断。
当信号A已经转换为clk时钟域的同步信号以后,就不存在你说的问题了。
楼上说的方法比较好,然后在同步的基础上,判断A的边沿即可。
上面说的或许适合其他情况吧。
我在第2贴说了“的确A信号和时钟信号都是 芯片输出的信号”这是我们不能左右的,我要判断A信号的电平来在这里说的时钟下发数据给芯片的,所以,如果打两拍,延时2周期来同步,那已经丢失了2bit数据了。因为我需要做的是,判断A信号电平,随时钟节拍发数据,希望明白这点,呵呵!谢谢几位参与分析讨论!
"仔细观察波形 发现A其实还没有处于高(略微落后一点时间变成高)"
靠这样设计电路,失败是必然。
10# ruiruio4
如果是这样的话,可以考虑其它的同步方式,能够让A信号与数据信号都转到同一个时钟域下,比如握手啊,fifo啊,这样子的
这个情况最好用时钟下降沿发数据,如果可以的话
搞不懂为什么信号A会和时钟clk是异步的呢?
14# hometown_wy
呵呵,相信芯片的设计者肯定是希望A信号和它输出的时钟同步,可是用分析仪仔细一看以及最开始发数据不成功均证实了A信号落后于时钟。波形全局看时,A信号和时钟的下降沿是对齐的,之前总搞不清楚丢失数据的原因。但是的确需要在时钟的下降沿发送。
晕死,难道这个真的那么无解吗。
学习了,帮顶 。
