Verilog实现整数与小数部分的二进制转化为十进制

来源:互联网 发布:来自星星的你知我是 编辑:程序博客网 时间:2024/05/17 12:21

           最近在做进制转化的FPGA实现,用到了FPGA的串口通信功能,首先将二进制数值(32定点数,末16位代表小数)由PC写入串口小助手,传给FPGA,再将转化后的结果由串口传到PC端显示,整体的过程比较简单,这部分以后再讲,今天主要来讲讲小数部分的二进制转十进制。

        首先关于整数部分的进制转化最常用的是移位加3算法,具体的实现过程如下:   

       1.将二进制码左移一位(或者乘2)

       2.找到左移后的码所对应的个,十,百位。

       3.判断在个位和百位的码是否大于5,如果是则该段码加3。

       4.继续重复以上三步直到移位8次后停止。

        在51系列里有十进制调节指令(半字节大于9,则加6),PIC里没有,只好采取变通的变法。即检查半字节+3是否大于7,也就是检查半字节是否大于4。因为,如果大于4(比如6),下一步左移就要溢出了,所以加3,等于左移后的加6,起到十进制调节的作用。检测半字节+3是否大于7,编程会变得简练一些。

(具体可参考这篇文章:http://www.360doc.com/content/11/0223/17/5169677_95465965.shtml,代码可参考:http://blog.csdn.net/li200503028/article/details/19507061)

下图是一个实例(10100010转为十进制162):


          接下来说说小数部分的转化。转化方法有两种,一种是简单的列表法,即小数部分的每一位二进制值,可用十进制表示(比如0.1000表示的是0.5,可用0.0101来代替)。列表的大小根据自己所取的精度有关,本文小数精度取4位。转化过程:当小数部分的二进制序列某位值为1,则加上1所在位置的进制码,这里精度计算到二进制序列的第8位。对每列进制码累加后的值若大于9则向前进1(十进制表示,该位减10并向前进1);若累加值大于19,则向前进2,以此类推。

                        

       本文用ISE进行了代码仿真(0.1001即十进制数0.5625,整数10010011即为147),结果如图所示:


           当然还有一种方法是扩大整数倍在进行转化,比如有一个四位的小数0.1111,可以先扩大(10000/16=625)的倍数,再按整数的转化方法进行转化即可得到结果,列表法的缺点是想要保证精度列表就会比较大,消耗的硬件资源也会越多,尤其当小数位数很多,精度要求比较高的时候会比较明显。这里的方法仅当参考,谢谢阅读~


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 有病不能拘留那怎么办 拘留所不交伙食费怎么办 治安拘留不执行怎么办 释放证明书丢了怎么办 银行提前收贷款怎么办 存货周转天数高怎么办 欠款人没有财产怎么办 起诉后对方没钱怎么办 法院起诉人不到怎么办 治安拘留跑了怎么办 看守所里生病了怎么办 二审上诉被驳回怎么办 醉酒驾车取保候审以后怎么办 小案子证据不足怎么办 撞车不严重逃逸怎么办 被执行人没有财产执行怎么办 挖到人头了怎么办 取保保证金不退怎么办 被诬陷经济诈骗怎么办 醉驾刑事拘留后怎么办 被别人举报赌博怎么办 涉黄刑事拘留怎么办取保候审 换了车牌保险怎么办 车辆转让后保险怎么办 立案后警察不管怎么办 打架后对方讹人怎么办 工商被恶意举报怎么办 店铺被工商举报怎么办 被买单侠恐吓怎么办? 团伙作案刑事拘留怎么办取保 欢乐麻将老输怎么办 回不了家怎么办身份证 没注意闯红灯了怎么办 摩托车被套牌了怎么办? 发现员工偷钱怎么办 盗窃刑事拘留7天怎么办 盗窃抓不到人怎么办 发现宿舍被盗后怎么办(  ) 发现宿舍被盗后怎么办() 回收到赃物电瓶怎么办 不知情买了赃物怎么办