【问题标题】:Converting 8 bit binary to BCD using integers使用整数将 8 位二进制转换为 BCD
【发布时间】:2015-01-21 02:10:06
【问题描述】:

大家好,我在 VHDL 中尝试做的是取一个 8 位二进制值并将其表示为 BCD,但有一个问题,因为这个值必须是最大输入 9 的一小部分。

1- 将输入转换为整数,例如 1000 0000 -> 128

2- 整数除以 255 然后乘以 90(90 这样我就得到一个位,小数点后的第一个数字都在小数点后)

例如 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)和除法。所以我只需要帮助解决我思维过程中的任何缺陷和这样做时我应该注意的事情..

我实际上已经完成了我的代码并认为我保存了这个..但我没有而且我仍然相信这个解决方案可以工作我会用我认为是我的旧代码的内容来回复......我会尽快记住这一切..

这是我的新代码的另一个问题..(只是为了表明我确实做了一些事情..) Convert 8bit binary number to BCD in VHDL

【问题讨论】:

  • 注意一个8位的值只需要3个BCD数字来表示(最大值为255)。你有一个具体的问题吗?也许您可以展示您的代码并询问特定的语法或语义错误?结果不正确?

标签: binary type-conversion vhdl bcd adc


【解决方案1】:

f 我明白了,你需要的是转换一个 8bit 的数据

0-255 → 0-9000

并用4个BCD数字表示。

例如你想要 0x80 → 4517 (BCD)

如果是这样,我建议你完全不同的想法:

1)

让输入范围用简单的8bit*8bit->16bit转换成输出范围

(in_data * 141) 并保持 14 MSB(0.1% 误差)

假设这个 14 位寄存器是目标

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)

结束

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-14
    • 1970-01-01
    • 2015-05-16
    • 2013-06-11
    • 2018-09-15
    • 1970-01-01
    相关资源
    最近更新 更多