私は BIST エンジンの記述を作成していて、上司から Verilog から VHDL に移行するように依頼されました。私は VHDL に非常に慣れていないため、コード内のアドレス レジスタに与える正しいデータ型がわかりません。ほとんどの場合、アドレスは配列へのインデックス付けに使用されます。
data : std_logic_vector (2**W-1 downto 0);
...
output = data(addr);
ただし、場合によっては、ビットごとの演算を実行する必要があります (たとえば、アドレスの最下位の 1 を見つける次のコード)。
least_one(0) <= addr(0);
PRIORITY_ENCODER : for i in 1 to (W-1) generate
least_one(i) <= addr(i) and not or_reduce(addr(i-1 downto 0));
end generate PRIORITY_ENCODER;
least_one(W) <= not or_reduce(addr);
最後に、アドレスがオーバーフローした場合 (つまり、1111+1 = 0、および 0-1 = 1111) に問題なくラップアラウンドすることにも依存しています。
では、これらすべての用途を考えると、アドレスにはどのデータ型またはサブタイプを指定すればよいでしょうか? 整数と関連する型を使用すると、ビット演算を実行するとエラーが発生します。
ncvhdl_p: *E,APNPFX (filename,17|20): can not make sense of P(...)
std_logic_vector または類似のものを使用すると、アドレスを配列インデックスとして使用しようとするとエラーが発生します。
ncvhdl_p: *E,INTYMM (filename,52|17): array index type mismatch [6.4]
私はここで勝てない状況にあるようです。使用するデータ型は? ソリューションは合成可能でなければならないことに注意してください。ありがとう