在以下代码中,我有一行row_count <= row_count + 1;
,下一行我使用row_count
来访问数组col_mask <= display(conv_integer(row_count));
。我的期望是,当触发if块时,row_count
将递增,并且将使用新值来访问阵列。但是,当我运行代码时,从数组中检索到的值比我期望的值落后1,表明数组在递增之前使用当前值row_count
进行索引。
我的问题是,为什么?我通过在1而不是零开始我的计数器轻松地补偿了这一点,但我很好奇它为什么这样做。
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;
答案 0 :(得分:1)
row_count是一个信号(由于“&lt; =”分配而可见)。信号总是在过程结束时更新。因此,如果更新信号,则更新的值仅在下次触发过程时可用(例如,在下一个上升时钟边沿)。
如果您需要立即访问更新的值,可以将row_count实现为变量。变量立即更新并分配“:=”。但请注意,变量仅在流程中可见。