Vector VHDL标准逻辑向量位值中的问题
我在检测存储在std_logic_vector格式中的二进制数的位置值时遇到问题。例如,在下面的代码中,我试图查看INST_SPEED的值是多少,介于0到99 km/h之间。代码很长,有很多if条件Vector VHDL标准逻辑向量位值中的问题,vector,vhdl,Vector,Vhdl,我在检测存储在std_logic_vector格式中的二进制数的位置值时遇到问题。例如,在下面的代码中,我试图查看INST_SPEED的值是多少,介于0到99 km/h之间。代码很长,有很多if条件 if INST_SPEED > "0001001" and INST_SPEED < "0010100" then -- if INST_SPEED > 9 & INST_SPEED < 20 UPPER10 <= "0000
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
如果安装速度>0001001且安装速度<“0010100”,则-如果安装速度>9且安装速度<20
上面10改变问题。我建议实现一个模函数,将二进制值转换为以10为基数的值(如果不需要快速更新的话,这个值可能会非常小),或者可以更容易地使用BCD作为INST_SPEED值
当你现在正在编码的时候,你真的需要一个除法/模函数,这就是你试图用你所有的条件硬编码的东西。根据您的目标,您可能可以“免费”完成此操作(即:您使用的FPGA可能有未使用的硬件乘法器可用?)。我可以想到以下几个选项:
创建一个存储在ROM中的大型LUT(查找表)怎么样?地址应为INST_SPEED值,输出应为UPPER10或TEMP。您可以使用脚本(在VHDL之外)生成ROM内容,然后将其粘贴到代码中,或者从支持VHDL文件IO的文件加载
输入和输出之间真的没有简单的模式吗?这是你可以推导的数学函数吗
嘿,是的,我昨晚睡觉的时候想到了这个问题。我认为将每个数字依次除以100,然后再除以10更简单。例如,以721号为例,在第一次除法之后,我将得到7作为答案(百位值),21作为余数。然后我将余数除以10,得到2作为十的值,最后1作为单位或一的值。谢谢大家的帮助,非常感谢!