想要帮助理解verilog构造

时间:2016-09-26 20:25:41

标签: verilog variable-assignment

我不熟悉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。

1 个答案:

答案 0 :(得分:0)

首先,#1是一个可以在模拟中使用的一次刻度延迟,但它不可合成。当你说'#34;给出了正确的结果"时,如果你解释了你看到的结果可能会有所帮助,但我的猜测是你为二维向量分配了一些东西,然后你将它分配给max_data并且是期望mux_data成为临时数据。它保留旧数据吗?是不确定的?

那就是说,我会说差异是一个可综合的分配与一个不可合成的分配。在第一种情况下,您应该看到两个状态更改由时间刻度单位分隔。第二种情况,因为它是阻塞的,应该看到这两个值在零时间内更新,并按照从上到下的顺序更新。如果你还没有看到,那么其他东西可能就在这里。你用的是什么工具?工具版?也许你可以分享你的完整代码和测试平台,这样我们就能看出你的结果出乎意料的原因。