在实际中,我们常常需要将数据通过数码管或者LCD显示出来,例如,我们要将224显示到数码管上,我们要做的事就是分别提取出2,2,4这三个数字,然后分别送到数码管或LCD,在 单片机中我们常常这么做:2=224/100;(C语言整数相除仍为整数),2=(224-2*100)/10,4=224-2*100-2*10;即用到了大量的乘法器,除法器,但对于FPGA来说,虽然也可以这么做,但是是非常耗费资源的,所以我们通常采用BCD码形式,何为BCD码,例如224,二进制表示为1110_0000,采用bcd码则为0010_0010_0100,即每四个二进制位分别代表十进制数的一位,而不是整体。对于FPGA而言,采用这种方式更加合理。 那么二进制转bcd的方法是什么?左移加3法(原理小葱也没搞明白,上微机原理老师说的),该方法的关键是我们以仍以224为例,224用二进制表示为1110_0000,8bit,我们将1110_0000向左移动一位,总共8次(注意:输入数据几bit,移动几次,当然你的224也可以表示为0000_0000_1110_0000,此时移动16次),我们知道8位二进制最大可以表示255,即3位十进制,要定义3个变量存放百位,十位,个位。我们以下图为例,每次移动完之后,比较移入到个位,十位,百位的二进制,若该二进制表示的十进制大于等于5,则该位的二进制加3,(注意:最后一次移动不加),下图中移动3次后,个位上的数为111(7),大于5,所以加三,所以变为1010(10),依次进行8次,即可。
有了上面分析,我们看代码就轻松多了。
Later_data为这个移位后的数据,原数据是8位,百位,十位,个位各占4位,所以Later_data为20位的数据,通过cnt来控制整个程序,cnt==0,置入数据, cnt从1到8,移动数据8次,cnt等于酒,移动结束,输出数据,cnt==10,给出转换完成标志enable。
更多内容关注微信号:FPGA干货
|