2

我的 vhdl 代码中有一个时钟,但我不使用它,只是我的过程仅取决于一个组件完成并输出输出时的握手,此输出在我的 FSM 的灵敏度列表中,然后成为输入下一个组件,当然它的输出也在我的 FSM 的敏感度列表中(以便知道组件何时完成计算)......等等。这种方法错了吗?它可以在模拟和路由后模拟中工作,但会收到这样的警告:警告:HOLD High VIOLATION ON I WITH RESPECT TO CLK; 和警告:HOLD LVIOLATION ON I WITH RESPECT TO CLK;

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

4

3 回答 3

4

您收到的警告是时间违规。你得到这些是因为工具检测到你的设计不遵守内部原语的必要时序限制。

例如,查找表的输入(它是 FPGA 内部的主要构建模块之一)需要保持特定时间以使输出稳定。当您的整个时序仅依赖于组件本身的延迟和延迟,并且在完全异步的基础上切换时,这很难保证。

根据您的实际设计(主要是它的大小和复杂性),我敢打赌,一旦您将其放入 FPGA 中,您最终会遇到很多非常难以调试的错误。使用时钟你会轻松很多很多。这将使您能够清楚地了解信号何时到达何处,并允许您使用内部工具来检查您的时间。您还会发现与其他设备的接口更加容易,并且您的系统将不太容易受到嘈杂输入的影响。

所以总而言之,使用时钟。您(可能)不会因为不这样做而损坏您的 FPGA,但是时钟可以让您免于大量麻烦。

于 2013-03-21T07:44:56.787 回答
3

您的代码很可能不会损坏您的 FPGA,因为它不依赖于时钟。但是,对于综合,您应该始终使用注册(时钟)逻辑。如果不使用时钟,您的设计将由于时序/延迟/路由/扇出/...而无法控制...这将使您的 FSM 在合成时表现“神秘”(即使它在模拟中工作)。在 google 的帮助下,你会发现很多优秀的 FSM 实现风格的例子(搜索MooreMealy FSM)

于 2013-03-21T07:46:41.710 回答
3

一定要用时钟。整个设计中只有一个时钟。这是最简单的方法——工具很好地支持这种设计风格。您通常可以摆脱单一的时序约束,尤其是当您的输入速度很慢且与同一时钟同步时。

当您获得了以这种方式进行设计的经验后,您可以跳出这种方式,但在了解跨时钟域和异步信号的陷阱的同时,准备好进行更多分析、时序约束和潜在的构建迭代。

于 2013-03-21T16:34:51.923 回答