返回信息流最近在做VHDL的作业,要求用8421码输入,转成5221码加法运算,但是5221加法不会校正。。求指导。
注:是十进制一位加法
这是一条镜像帖。来源:北邮人论坛 / circuit / #19188同步于 2011/11/28
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Circuit机器人发帖
关于5221加法校正的问题
danielinwind
2011/11/28镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
9+7=16
5221码:1110+1010=1 1000 (这里7有1010和1100两种表示方法,哪种都可以)
首先BCD码第3位向第4位有进位,做+6处理(这里的6是机器数6,也就是0110,不是你的编码):11000+00110=11110
最后对权值进行处理,从右边开始数,第3个1,机器认为它是4,而我们希望它是2,所以-2;第4个1,机器认为它是8,我们希望它是5,所以-3。总共就是-5(机器数5,0101).
11110-00101=11001=16
PS:可能有更好的方法,我自己尝试出来是这种。
【 在 ocean 的大作中提到: 】
: 9+7=16
: 5221码:1110+1010=1 1000 (这里7有1010和1100两种表示方法,哪种都可以)
: 首先BCD码第3位向第4位有进位,做+6处理(这里的6是机器数6,也就是0110,不是你的编码):11000+00110=11110
: ...................
非常感谢啊!我想了很久都没有想出来。。不过貌似是右边数过来第二位向第三位有进位做+6处理吧?我试了一下2+3是这样的
怎么还有5221这种神奇的码。。。
【 在 danielinwind (danielinwind) 的大作中提到: 】
: 最近在做VHDL的作业,要求用8421码输入,转成5221码加法运算,但是5221加法不会校正。。求指导。
: 注:是十进制一位加法
【 在 police 的大作中提到: 】
: 怎么还有5221这种神奇的码。。。
: 【 在 danielinwind (danielinwind) 的大作中提到: 】
: : 最近在做VHDL的作业,要求用8421码输入,转成5221码加法运算,但是5221加法不会校正。。求指导。
: ...................
在hdl作业当中一切皆有可能。。
问题是4+5,3+6这样的计算时好象不对啊
【 在 ocean 的大作中提到: 】
: 9+7=16
: 5221码:1110+1010=1 1000 (这里7有1010和1100两种表示方法,哪种都可以)
: 首先BCD码第3位向第4位有进位,做+6处理(这里的6是机器数6,也就是0110,不是你的编码):11000+00110=11110
: ...................
我觉得你的思路是对的,应该是进位的时候做调整。机器数是8 4 2 1.进位的时候也就是1+1=2,2+2=4,4+4=8.而5221码就是1+1=2,2+2=2,2+2=5,所以第1位向第2位进位时做+2处理,第2位向第3位做进位时做-1处理。而最高位8+8和5+5只做进位,不需调整(这一块其实还没想得太明白,不过实验出来是对的)。
2+3=0010+0011=0101+2=0101+0010=0111=5
4+5=0110+1000=1110=9
4+5=0110+0111=1101+2-1=1101+1=1110=9
6+7=1001+1010=10011=13
8+9=1101+1110=11011-1=11010=17
嗯,谢谢,这个算法是对的。但是我在写成VHDL语句后,判断进位,老是在判断进位那两句提示警告,然后结果会出现不确定位。警告说:" UNDEFINE [X] VALUES OF CONSTANT "XXXX" are interrupted as 0"不懂是为什么
【 在 ocean 的大作中提到: 】
: 我觉得你的思路是对的,应该是进位的时候做调整。机器数是8 4 2 1.进位的时候也就是1+1=2,2+2=4,4+4=8.而5221码就是1+1=2,2+2=2,2+2=5,所以第1位向第2位进位时做+2处理,第2位向第3位做进位时做-1处理。而最高位8+8和5+5只做进位,不需调整(这一块其实还没想得太明白,不过实验出来是对的)。
: 2+3=0010+0011=0101+2=0101+0010=0111=5
: 4+5=0110+1000=1110=9
: ...................