FPGA 异步时钟 多个状态机 的芯片验证有关问题

FPGA 异步时钟 多个状态机 的芯片验证问题
现设计一xilinx的FPGA模块,用verilog实现。模块中有A,B,C,D个状态机,两个时钟clka,clkb。A,B,C由clka同步,D由clkb同步。
然后这四个状态配合实现所需的时序逻辑。
仿真结果:仿真能通过(clka,clkb异步,并且仿真时间相当长)。
芯片验证结果:在xilinx spartan3s400上,不能通过。

问下是否有遇到类似问题的dx,以及如何解决。

------解决方案--------------------
simulation does not work well for async clock. To deal with CDC (clock domain cross), you have 3 popular options:

(1) use 2 flip flop as synchronizer, works for edge

(2) use toggle synchronizer (Please google it for more detail.)

(3) use async FIFO. (You can use coregen to get async FIFO under Xilinx ISE)


------解决方案--------------------
探讨

你说的是通用的解决不同时钟域的方法。我其实已经解决了我提出的问题,只是想搞清楚异步时钟多个状态机在芯片验证时需要注意的地方,或者是否这就是xilinx的bug,根本不能实现。

谢谢你的回复

------解决方案--------------------
探讨

verilog 代码如下:

这段代码是一个对xilinx的BRAM写和读的操作。
写:wring信号,高为正在写,低为停止写。读:rding信号,高为正在读,低为停止读。
wring下降沿表面写入完毕,将rdy信号置高,这个信号与clk_i时钟同步。
rding下降沿表明读取完毕,将rdy信号置底,这个信号不与clk_i同步。

如果采用边缘检测,即如下代码,则能正确执行。
如……

------解决方案--------------------
学习。。。
------解决方案--------------------
同UESTC 比较同意hahahaha_hax4 个人表示没听过你那么做的 给你提个建议 状态机单独提出来不用时钟触发 然后结合状态信号对两个时钟域进的信号行同步 当然FF或buf/fifo是必不可少的 不要幻想同一个always块内部使用异步时钟 这个必然出问题 再有遇到问题不要首先怀疑fpga的bug 99.99%的情况下问题出在自己的code上
------解决方案--------------------
还是CDC的问题了。