使用整数将8位二进制转换为BCD

时间:2014-11-23 07:31:04

标签: binary type-conversion vhdl bcd adc

好的大家好,我在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

1 个答案:

答案 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)