描述
由StuteCAD生成的Verilog状态机代码可能不是最优的。
下面是StuteCad的非最佳代码输出示例:
总是@(POSEDGE CLK)
开始
CNT1=NExtEXCNT1;
结束
总是@(POSEDGE CLK)
开始
CNT0=NEXTXCNT0;
结束
这样做是指派
CNT1= NEXTEXCNT1
CNT0= NEXTEXCNT0
在每个时钟边沿上,但是如果使用非阻塞语句,则只需要:
总是@(POSEDGE CLK)
开始
CNT1和lt=NExtEXCNT1;
CNT0&LT=NExtEXCNT0;
结束
解决方案
虽然代码不是最优的,但它在功能上是正确的,不应该导致实际器件中的性能问题。由于修复STATECAD代码生成器的这一部分所涉及的困难和风险,因此决定将该功能保留原样。
用户应该知道,这可能导致行为仿真中的竞争条件。当使用多个进程来代替一个进程时,仿真器必须决定先处理哪个进程。如果分配的值依赖于另一个进程中的另一个赋值值,则可以根据处理过程的顺序获得不同的仿真结果。
没有回复内容