次のコードには、行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;