我想在ModelSim中设置一个 27 MHz 的时钟信号。我通常通过右键单击该信号->时钟->设置周期来设置时钟。例如,50 MHz 时钟 -> 20 ns 或者我使用了 force 语句。
因为 27 MHz 时钟很特殊,它不是整数周期,如果我用 appx 值设置时钟,它总是会出现时序问题。
那么,如何设置这个时钟呢?
你的时钟是异步的。你总是会遇到“时间问题”——如果你的两个时钟边沿非常接近(有时不可避免地会这样),你的一些翻牌会表现出亚稳态。
您需要将 27 MHz 域信号重新同步到 50 MHz 域,接受并缓解偶尔同步会出错的事实。有一些技术可以将“偶尔”的值降低到您认为适合您的系统的值,但您永远无法摆脱它。
请参阅FPGA-FAQ 0017,告诉我有关亚稳态的信息。
如果必须使用两个域(50 MHz、27 MHz),那么您应该在两个域之间的每个接口处实现同步电路:
Signal changes_at50;
Signal read_at27;
您不键入:
read_at27 <= changes_at50;
但是通过同步电路连接它们。(或异步 FIFO。)
同步电路通常是级联触发器,以最大限度地减少时钟域之间出现的亚稳态。更多级联会更好地降低元稳定性,但会增加数据延迟。这是一个设计选择。
如果您正在运行一个只有一个时钟的功能模拟,那么只要系统的输入和输出以相同的速率计时,时钟的确切周期就不是太重要了。
我建议选择一个接近您的目标周期的时钟周期,并适当地扩展您的数据源。