"); //-->
ABB REF615CC 某种形式的数据更改条件
在这种情况下,用户希望确保他的逻辑在整个时钟边沿保持不变,因此他将所有值都设置在时钟的下降沿。这导致了两个问题:当#1 延迟与时钟边沿冲突时会发生什么?当输出值取决于设置在负时钟沿的其他输入时会发生什么?
图 3 显示了另一个问题,这次是在使用 case 语句时。在这种情况下,它是在建模设备中实现命令结构的尝试。该设备可以处理许多命令之一,因此根据收到的命令,您可以处理该命令。从中得出的实际示例更糟糕,因为它不仅依赖于命令,还依赖于命令序列,并且命令序列是在 case 语句中的 case 语句中找到的。
这有什么问题吗?那么,如果第二次触发原始触发器,但 always 块中的逻辑还没有执行完,会发生什么?也许这是错误的。也许它刚好在下一个时钟边沿的错误一侧结束。就我而言,我在四个小时后发现了这个错误——那是个好日子。模拟往往运行得相当慢,这无济于事。
更好的方法是使用状态机而不是嵌入式任务。为什么这样更好?好吧,如果没有其他原因,case 语句将包含可以在跟踪文件中看到的状态变量。这意味着您可以找到并调试当/如果新命令触发器在先前命令完成之前出现时会(或应该)发生什么。
这些问题只会在复制此逻辑时变得更加复杂。例如,假设一个设备可以执行任务 A、B 和 C,但需要两个 IO 协议之一来完成任务 A、B 或 C。现在,如果将该 IO 协议逻辑复制并嵌入到每个协议中任务,那么当 IO 协议升级时,这三个都需要更新。(I2C 变成 I3C,SPI 变成 Quad SPI,等等)
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。