码迷,mamicode.com
首页 > 其他好文 > 详细

嵌入式中位宽的计算

时间:2020-06-16 16:53:31      阅读:77      评论:0      收藏:0      [点我收藏+]

标签:play   符号位   自己   精度   alt   行存储   基于   拓展   范围   

在嵌入式设计中,是经常需要和最底层打交道。无论是利用MCU实现功能还是利用电路直接实现功能,都需要对数字极其敏感。

 

在嵌入式中,所有的数值都是按照二进制码进行存储的。二进制与十进制的计算规则为:

 技术图片

 

 

二进制的101.01,等于十进制的5.25。

 

在不考虑小数时,我们在设计中,用的到所有的变量都要基于一个位宽,如果位宽不够时,就会出错。例如:十进制的100,转换为二进制为1100100,需要用到7位的位宽。当用低于7位的位宽去接收十进制的100时,就会得到错误的结果。

 

在C51设计中,比较常用的两个整数变量类型为:char和int。这两种类型可以拓展为四种类型:signed char、unsigned char 、signed int 和unsigned int。signed可以省略不写。

 

对于char来说,表示为1个字节(位宽为8),经常用来表示一个字符。对于数值来说,char表示有符号时,范围为-128至127;char表示无符号时,范围为0至255。所以在使用时,要牢记这个范围,当需要记录的数字超过这个范围时,将会出错。例:char类型的变量被赋值325;此时综合器的综合并不会报错,但是确得不到正确的结果。

 

对于int来说,表示为2个字节(位宽为16)。对于数值来说,int表示有符号时,范围为-32768至32767;int表示无符号时,范围为0至65535。所以在使用时,要牢记这个范围,当需要记录的数字超过这个范围时,将会出错。

 

在使用时,如果char可以时,尽量不要使用int,节省一部分资源。

 

在C51设计时,char和int是固定的,也没有其他的宽度的类型供给使用。

 

在FPGA开发时,位宽是自己随意设置的。设置位宽不够时,将会计数出错;设置位宽过大时,将会浪费一部分位宽。

 

在50MHz的时钟驱动下,记录一秒钟。需要记录50_000_000个时钟周期,此时记录时无符号的记录,那么需要计数器的位宽为多少位才可以呢?

 

可以利用PC自带的计算器,设置为程序员型,调成十进制将50_000_000输入进去,然后转换为二进制,查一下有多少位。

技术图片

 

 

很明显需要26位。

 

如果每次的计算都需要计算器的话,很多的时候可能不太方便。这里笔者整理出一种“看一眼就知道位宽”的技巧。

 

首先需要牢记2的0次幂至10次幂的值,这个难度并不大。下面来看一个例子:

计算147258369的二进制位宽。

  1. 分隔为3个1组:147_258_369。
  2. 将第一组的数加1,后面的数全部换为0,如果后面组已经是0,第一组不加1。

       147258369 < 148_000_000 = 148*1000*1000 < 148*1024*1024

 

2的次幂为1024,所以148*1024*1024为148乘以2的20次幂。148正好处于128和256中间,选择256。

 

最后的数字为256*1024*1024,即最后的数字为2的28次幂,也就是利用28位的二进制就可以表示此数字。

 

所以对于50_000_000,后面的六个0为20位,50需要用64表示,所以共需要26位。

 

此方法会有一定的误差,但是误差最多为1个位宽。能够比较方便快捷的计算某个数字的位宽,加快了设计进度。

 

在计算有符号数时,直接计算其绝对值的位宽,然后将位宽在扩大1位即可。

 

有符号数的表示为最高位为符号位,不表示数值大小,所以计算完绝对值的位宽后,需要加上一个符号位即可。

 

  在上述说明中,主要阐述了整数位宽的确定。对于小数来说,重点关注的不是位宽而是位宽所能达到的精度。

 

在数字电路中,所有的数字都是由二进制来表示,对于很多的数字是无法用有限的二进制来进行的,所以此时就需要用一个近似值来表示。

 

关于小数位宽的确定不做过多介绍,有兴趣的读者可以自行查询相关资料。

 

设计者:郝旭帅         QQ:746833924     QQ交流群: 173560979   

嵌入式中位宽的计算

标签:play   符号位   自己   精度   alt   行存储   基于   拓展   范围   

原文地址:https://www.cnblogs.com/fendoudexiaohai/p/13141773.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!