std_logic_vector形式で格納されているバイナリ番号の場所の値を検出する際に問題が発生しています。たとえば、以下のコードでは、INST_SPEEDの値が0〜99 km/hの範囲内であることを確認しようとしています。コードは多くのif条件で本当に長いです。VHDLの問題std_logic_vector場所の値
if INST_SPEED > "0001001" and INST_SPEED < "0010100" then -- if INST_SPEED > 9 & INST_SPEED < 20
UPPER10 <= "0000001"; -- UPPER10 = 1
TEMP <= std_logic_vector(unsigned(INST_SPEED) - 10);
UPPER1 <= TEMP; -- LOWER10 = INST_SPEED - 10
elsif INST_SPEED > "0010011" and INST_SPEED < "0011110" then -- if INST_SPEED > 19 & INST_SPEED < 30
UPPER10 <= "0000010"; -- UPPER10 = 2
TEMP <= std_logic_vector(unsigned(INST_SPEED) - 20);
UPPER1 <= TEMP; -- LOWER10 = INST_SPEED - 20
elsif INST_SPEED > "0011101" and INST_SPEED < "101000" then -- if INST_SPEED > 29 & INST_SPEED < 40
UPPER10 <= "0000011"; -- UPPER10 = 3
TEMP <= std_logic_vector(unsigned(INST_SPEED) - 30);
UPPER1 <= TEMP; -- LOWER10 = INST_SPEED - 30
ただし、0-999の範囲の値を検出するための同様のコードを書く必要があります。もし私がこの論理によって行くなら、それは90のそのような条件を意味するでしょう!
このプロセスについてもっと簡単に知的な方法を知っている人はいますか?これは本当に私を助けてくれるでしょう、事前に感謝!
ねえ、ええ、私は昨晩この問題を眠ろうと思っていました。私は順番にそれぞれの数字を100で分け、次に10で分ける方が簡単だと思います。 721、最初の分割の後、私は答えとして7を得るでしょう(百位の値)と残りの21。次に、残りを10で除算して2をテンション値、最後に1を単位または1の値とします。 –
ヘルプスタッフのためのThx、本当にそれを感謝します! –