我有問題檢測存儲在std_logic_vector格式的二進制數的位置值。例如在下面的代碼中,我想知道INST_SPEED中的值是在0到99公里/小時之間。如果條件許多,代碼很長。問題在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作爲單位或一個值。 –
Thx幫助球員,真的很感激! –