2014-11-23 127 views
0

好吧,大家好,我想在VHDL中做的是取8位二进制值并将其表示为BCD,但由于此卡必须是最大输入的一部分这是9.使用整数将8位二进制转换为BCD

1-转换输入到整型例如1000 0000 - 255通过然后> 128

2-除以整数乘以90(90,使得我得到的一个的手指和所述第一数字小数点后指的是小数点后的所有数)

例如128/255 * 90 = 45.17(让这是signal_in)

3.Extract 45的两位数字由20个分割,并将它们存储作为分开的整数 例如我会使用类似:

LSB_int = signal_in模10

那么我会在除以10信号因此,它改变为4.517然后让这种等于MSB_int ..(这将截断小数和存储器4右侧)

4.Convert两者LSB_int和MSB_int至4位BCD

..和我将从那里完美...但可悲的是我有这么多麻烦...瓦特ith不同的数据类型(签署unsigend std_logic_vectors)和师。所以我只需要帮助我的思维过程中的任何缺陷,我应该看看这样做的时候..

我实际上做了我的代码,并认为我保存这一个..但我没有,以及我仍然相信这个解决方案可以工作,我会回复我认为是我的旧代码...只要我能记住这一切..

这是我的其他与我的新代码的问题..(只是为了证明我做的东西..) Convert 8bit binary number to BCD in VHDL

+1

注8位值只需要3位BCD码表示(最大值为255)。你有具体的问题吗?也许你可以展示你的代码并询问特定的语法或语义错误?不正确的结果? – user1155120 2014-11-23 08:16:12

回答

0

F I吃透,你需要的是转换的8位数据

0-255→0-9000

并用4位BCD数字表示。

比如你要0x80的→4517(BCD)

如果是的话,我建议你一个完全不同的想法:

1)

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

(in_data * 141)并保持14个MSB(0。1%的误差)

而让说,这14位寄存器是目标

2)

建立一个4位数的BCD加/减计数器(您的输出)

构建一个14位二进制加/向下计数器(从动)

供应二者以相同的输入(复位,CLK,增减的)

(使一个在另一个的阴影)

3)

比较TARGET和二进制计数器

if (follower < target) then increment the counters 
else if (follower > target) then decrements the counters 
else nothing 

4)

相关问题