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)的倍数,再按整数的转化方法进行转化即可得到结果,列表法的缺点是想要保证精度列表就会比较大,消耗的硬件资源也会越多,尤其当小数位数很多,精度要求比较高的时候会比较明显。这里的方法仅当参考,谢谢阅读~
- Verilog实现整数与小数部分的二进制转化为十进制
- 将十进制小数转化为二进制小数
- 十进制小数转化为二进制小数
- 十进制小数转化为二进制小数
- 十进制小数转化为二进制小数
- 十进制小数转化为二进制小数
- 转:十进制小数转化为二进制小数
- 十进制小数转化为二进制小数
- 十进制小数转化为二进制小数
- 十进制小数转化为二进制小数
- 十进制小数转化为二进制小数
- 转:十进制小数转化为二进制小数
- 十进制小数转化为二进制小数
- 十进制小数转化为二进制数
- 数据结构--二进制转化为十进制的实现
- 二进制转化为整数(十进制)
- 十进制整数转化为二进制详解
- 十进制的小数部分怎样转成二进制
- 下载chromium源码gclient代理设置 git代理设置
- Financial Management
- Python爬虫】安装 pyQuery 遇到的坑 Could not find function xmlCheckVersion in library libxml2. Is libxml2 inst
- LeetCode Week14: Longest Valid Parentheses
- 继承接口与实现接口的理解
- Verilog实现整数与小数部分的二进制转化为十进制
- 02-线性结构3 Reversing Linked List (25分)
- Java多线程基础详解
- JSTL
- [Linux]How to mix C and C++ 混合编译
- 给微赞程序富文本编辑器加上传附件功能
- json格式数据解析
- 任务知识总结之绘制相关
- [C++]from C to C++(grammar)