1

在下面的代码中,我有一行row_count <= row_count + 1;,下一行我row_count用来访问一个数组,col_mask <= display(conv_integer(row_count));。我的期望是,当 if 块被触发时,row_count它会增加,并且新值将用于访问数组。row_count但是,当我运行代码时,从数组中检索到的值比我期望的值落后 1,这表明数组在递增之前是用当前值索引的。

我的问题是,为什么会这样?我很容易通过将计数器从 1 开始而不是 0 来弥补这一点,但我很好奇它为什么会这样。

            if col = "10000000" then
                -- Left rotate row
                row <= row(6 downto 0) & row(7);
                -- increment row count
                row_count <= row_count + 1;
                -- get column mask from current position in array
                col_mask <= display(conv_integer(row_count));
            end if;
4

1 回答 1

1

row_count 是一个信号(由于“<=”赋值而可见)。信号总是在过程结束时更新。因此,如果您更新信号,更新的值仅在下一次触发过程时可用(例如在下一个时钟上升沿)。

如果您需要立即访问更新的值,可以将 row_count 实现为变量。变量立即更新并用“:=”分配。但是,请注意,变量仅在流程中可见。

于 2013-06-07T05:21:26.170 回答