好的大家好,我在VHDL中尝试做的是取一个8位二进制值并将其表示为BCD,但这是一个问题,因为这个calue必须是最大输入的一小部分,即9。
1-将输入转换为整数,例如1000 0000 - > 128
2-将整数除以255然后乘以90(90得到一位数字,小数点后面的第一位数字全部位于小数点后面)
E.g 128/255 * 90 = 45.17(让这是signal_in)
3.通过除以20来提取45的两位数,并将它们存储为单独的整数 例如,我会使用类似的东西:
LSB_int = signal_in mod 10
然后我将信号除以10,因此将其更改为4.517然后让它等于MSB_int ..(这将截断小数并将4存储为右)
4.将LSB_int和MSB_int转换为4位BCD
..而且我会从那里完美...但遗憾的是我遇到了很多麻烦...使用不同的数据类型(签名unsigend std_logic_vectors)和division.So我只需要帮助解决思维过程中的任何缺陷这样做我应该注意的事情..
我实际上完成了我的代码,并认为我保存了这一个..但我没有,我仍然相信这个解决方案可以工作我会回复我认为是我的旧代码... ...我记得这一切..
这是我的新代码的另一个问题..(只是为了表明我做了一些事......) Convert 8bit binary number to BCD in VHDL
答案 0 :(得分:0)
f我明白,你需要的是转换8位数据
0-255→0-9000
并以4个BCD数字表示。
例如,你想要0x80→4517(BCD)
如果是这样,我建议你提出一个完全不同的想法:
1)
让输出范围转换为简单的8bit * 8bit-> 16bit
(in_data * 141)并保持14 MSB(0.1%误差)
让我们说这个14位寄存器是TARGET
2)
构建一个4位BCD向上/向下计数器(您的输出)
构建一个14位二进制向上/向下计数器(跟随者)
提供相同的输入(reset,clk,UpDown)
(使一个人成为另一个人的影子)
3)
比较TARGET和二进制计数器
if (follower < target) then increment the counters
else if (follower > target) then decrements the counters
else nothing
4)
端