我在检测以std_logic_vector格式存储的二进制数的位置值时遇到问题。例如,在下面的代码中,我试图看看INST_SPEED中的值是0到99 km / h之间的值。如果条件很多,代码很长。
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个这样的条件!
有没有人知道更简单,更聪明的方式来实现这个过程?这真的可以帮助我,提前谢谢!
答案 0 :(得分:0)
更改问题。我建议实现一个模数函数,从二进制值转换为十进制值(如果它不需要快速更新,这可能非常小),或者更容易使用BCD作为INST_SPEED值。
当你正在编写内容时,你真的需要一个除法/模数函数,这就是你试图用所有条件进行硬编码的。根据您的目标,您可以“免费”执行此操作(即:您使用的FPGA可能有未使用的硬件乘法器吗?)。
答案 1 :(得分:0)
我能想到的情侣选择: