2013-03-21 22 views
2

我在vhdl代码中有一个时钟,但我没有使用它,只是当我的进程只是在一个组件完成并获取输出时取决于握手,此输出位于我的FSM的灵敏度列表中然后成为下一个组件的输入,当然它的输出也在我的FSM的灵敏度列表中(所以要知道组件何时完成其计算)......等等。 这种方法错了吗?它可以在仿真和后路模拟中工作,但会得到如下警告:警告:保持对CLK的高电平有效;和 警告:保持对于CLK的低电平有效;没有clk的Vhdl

这个警告不重要,或者我的代码会损坏我的fpga,因为它不依赖于时钟?

回答

4

您收到的警告是时间违规。你得到这些是因为这些工具检测到你的设计不遵守内部原语的必要时序限制。例如,查找表(FPGA是FPGA内的主要构建块之一)的输入需要在特定时间内保持输出稳定。当您的整个时序仅依赖于组件本身的延迟和延迟并完全异步切换时,这很难保证。

根据您的实际设计(主要是它的大小和复杂程度),我会猜测一旦您将其置于FPGA内部,将会出现很多非常难以调试的错误。使用一个时钟你会有更多,更容易的时间。这将使您能清楚地了解何时信号到达哪里,并允许您使用内部工具来检查您的时间。您还会发现与其他设备的连接更容易,并且您的系统将不易受到噪声输入的影响。

总而言之,使用一个时钟。你(可能)不会因为不这样做而损坏你的FPGA,但是一个时钟可以为你节省很多麻烦。

3

您的代码很可能不会损坏您的FPGA,因为它不依赖于时钟。然而,对于综合,你应该总是使用注册(时钟)逻辑。如果没有使用时钟,由于时序/延迟/路由/扇出/这将使您的FSM在合成时表现得“神秘”(即使它在仿真中工作)时,您的设计将不会受到控制。 你会发现很多与谷歌的帮助下良好的FSM实现风格的实例(搜索摩尔米利 FSM)

3

肯定使用的时钟。整个设计只有一个时钟。这是最简单的方法 - 这些工具非常好地支持这种设计风格。您经常可以摆脱单个时序约束,特别是如果您的输入较慢且与同一时钟同步。

如果您已经获得了设计这种方式的经验,您可以在此之外进行设计,但要准备好进行更多分析,计时约束和潜在构建迭代,同时了解跨时钟域和异步信号的缺陷。

+0

感谢您的回答,现在清楚了。 – 2013-03-21 22:41:08