VHDL执行顺序?

时间:2013-06-07 05:02:54

标签: vhdl

在以下代码中,我有一行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;

1 个答案:

答案 0 :(得分:1)

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

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