Verilog实现整数与小数部分的二进制转化为十进制
2017-05-28 21:47
585 查看
最近在做进制转化的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)的倍数,再按整数的转化方法进行转化即可得到结果,列表法的缺点是想要保证精度列表就会比较大,消耗的硬件资源也会越多,尤其当小数位数很多,精度要求比较高的时候会比较明显。这里的方法仅当参考,谢谢阅读~
首先关于整数部分的进制转化最常用的是移位加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位数字即可)算法
- java实现十进制整数或小数转换成二进制
- 《第二周实验报告1-2》---运用数组实现十进制转化为二进制
- 十进制小数转化为二进制小数
- 十进制小数转化为二进制小数
- 十进制小数转化为二进制小数
- (第二周实验报告1-2)运用数组实现十进制转化为二进制
- C语言实现十进制小数转二进制
- 10--输入一个十进制的整数,转化为二进制,输出有多少个1
- 二进制小数和十进制之间的相互转化
- 十进制小数转化为二进制小数
- 将十进制小数转化为二进制小数
- 一个十进制的正整数在二进制表示中的数字个数(C实现)
- 用java实现,数字四舍五入时,只小数部分四舍五入,整数不进位
- 二进制转化为整数(十进制)
- 十进制的正整数,负数, 小数转为二进制.八进制.十六进制的方法 包括原码,反码,补码的介绍
- 算法导论 31.1-13 将二进制整数转化为相应的十进制表示
- java实现十进制小数转换二进制
- 十进制小数转化为二进制小数