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