我的vhdl代码中有一个时钟,但我不使用它,只是我的进程只依赖于一个组件完成并获得输出的握手,此输出位于我的FSM的灵敏度列表中,然后变为输入到下一个组件,当然它的输出也在我的FSM的灵敏度列表中(因此知道组件何时完成其计算)......等等。 这种方法有误吗?它可以在模拟和路线后模拟中工作,但是会给我发出如下警告:警告:保持高度违反我的行为与CLK有关;和 警告:按照CLK键保持低静音;
这个警告不重要还是我的代码会损坏我的fpga,因为它不依赖于时钟?
答案 0 :(得分:4)
您收到的警告是时间违规。您得到这些是因为这些工具检测到您的设计不遵守内部基元的必要时序限制。
例如,查找表的输入(这是FPGA内部的主要构建块之一)需要保持特定时间以使输出稳定。当整个时序仅依赖于组件本身的延迟和延迟时,这很难保证,并且完全异步地开启。
根据您的实际设计(主要是它的大小和复杂程度),我会猜测,一旦您将其置于FPGA中,您最终会遇到很多非常难以调试的错误。使用时钟你会有更多,更轻松的时间。这样您就可以清楚地知道信号何时到达何处,并允许您使用内部工具来检查时间。您还会发现与其他设备的连接更加容易,您的系统也不会受到噪声输入的影响。
总而言之,请使用时钟。您(可能)不会因为不这样做而损坏您的FPGA,但是时钟将为您节省大量的麻烦。
答案 1 :(得分:3)
您的代码很可能不会损坏您的FPGA,因为它不依赖于时钟。但是,对于综合,您应该始终使用已注册(时钟)逻辑。不使用时钟,你的设计将无法控制,因为时间/延迟/路由/扇出/ ...这将使你的FSM在合成时“神秘地”表现(即使它在模拟中工作)。 你可以通过谷歌的帮助(搜索 Moore 或 Mealy FSM)找到大量有关FSM实施风格的例子
答案 2 :(得分:3)
绝对使用时钟。整个设计中只有一个时钟。这是最简单的方法 - 工具非常好地支持这种设计风格。您通常可以使用单个时序约束,尤其是在输入速度较慢且同步到同一时钟的情况下。
如果您已经获得了这种方式的设计经验,那么您可以超越这一点,但是当您了解跨越时钟域和异步信号的缺陷时,您可以做好更多分析,时序约束并可能构建迭代。