我不熟悉Verilog,因为这种语言需要在综合方面进行思考。
在做一些程序时我发现:
begin
buf_inm[row][col] =temp_data;
#1 mux_data=buf_inm[row][col];
end
给出了比
更正确的结果begin
buf_inm[row][col] =temp_data;
mux_data=buf_inm[row][col];
end
就变量的分配而言。
有人可以解释这两者之间有什么区别吗?
在任何其他更高级别的语言中,构造2(没有延迟)会给出正确的分配。
感谢你,
您诚挚的, R. Ganesan。
答案 0 :(得分:0)
首先,#1是一个可以在模拟中使用的一次刻度延迟,但它不可合成。当你说'#34;给出了正确的结果"时,如果你解释了你看到的结果可能会有所帮助,但我的猜测是你为二维向量分配了一些东西,然后你将它分配给max_data并且是期望mux_data成为临时数据。它保留旧数据吗?是不确定的?
那就是说,我会说差异是一个可综合的分配与一个不可合成的分配。在第一种情况下,您应该看到两个状态更改由时间刻度单位分隔。第二种情况,因为它是阻塞的,应该看到这两个值在零时间内更新,并按照从上到下的顺序更新。如果你还没有看到,那么其他东西可能就在这里。你用的是什么工具?工具版?也许你可以分享你的完整代码和测试平台,这样我们就能看出你的结果出乎意料的原因。