在看所有东西之前,因为这里已经有正确实现了。如果还没有思考的同学想临时抱佛脚的,或者是实验课直接对着抄的,我劝你还是不要看了,学习是自己的事情。
如果实在想不出来,或者是想找找有没有其他solution,乐意交流。[握手]
实验要求:只用两块74LS283来实现两位BCD码转为二进制码。
后一位BCD码表示个位可以直接用,前一位BCD码表示的是十位,要乘10
首先BCD码转成十进制是如何进位的?
BCD码每往左移动一个单位,就扩大两倍。如0010(2)变成0100(4)。所以要把BCD码扩大十倍,就是把BCD码往左移动一个单位,加上BCD码往左移动三个单位(扩大两倍+扩大八倍=扩大十倍)。
假设前四位为B3B2B1B0,后四位为A3A2A1A0.
写出表达式就是这样子的:
此时开始接电路,考虑到只有两块74LS283,接口要省点用,观察可以得知U0=A0,也就是直接得到binary的最后一位输出了。
再观察(A1+B0),(A2+B1),可以直接用加法器实现,(A3+B2)后,再接下一个加法器的输入实现(A3+B2)+B0;
此时关键点来了,如果这点没考虑到,整个电路就错了。(A3+B2)如果产生进位1,这个进位1如果和B3相加后又产生进位1,该加到哪里。电路应该怎么接才能不漏掉这个进位。
此时刚开始省掉的A0不用通过加法器省接口就很有用了。直接上图:
很重要的一个想法就是,不要把这个74LS283看作一个整体,把它看成是八个一加一的全加器,考虑到它的进位都到哪里去了。不要漏掉就行。
当然,条条大路通罗马,这仅仅是我的做法。