【FPGA作业】第一章 定点计数实验

本文详细介绍了定点计数的实验原理,包括浮点数与定点数的转换、加法和乘法运算。通过C语言和Verilog实现了16比特定点加法和乘法,并提供了仿真结果。实验验证了定点数在不同字长配置下的正确性。
摘要由CSDN通过智能技术生成

一 定点计数实验

1.1 实验原理

由于芯片成本和计算速度的限制,整数定点格式在实际中应用更加广泛。在计算机系统中, 最常用的是整数运算是加法和减法, 其次是乘法,最复杂的整数计算是除法。
在正整数乘加运算的过程中,加法会导致字长比最大加数的字长增加一位,而乘法结果的字长是两个乘数字长之和。
对于2补码整数来说,整数的加减法可以统一成2补码的符号取反和加法运算。
计算机系统表示小数点的方法包括科学计数法和日常如10.3这样的方法。以上两种表示方法, 在计算机系统中均有使用, 前者发展成为浮点数格式, 后者发展成定点数表示方法。
为了表示小数, 计算机工业制定了 IEEE754标准, 被称为 “浮点数标准”。 为了适应不同的需要, IEEE754标准定义了 16、32 、64 、 128 比特 多种字长的小数表示方法 。 其中最常用的是 32比特字长的小数格式,即,float 单精度浮点。 下图给出了 32比特 单精度浮点数的格式, 各部分数值的含义, 以及一个计算样例
这里写图片描述
图1. 1 IEEE754浮点数标准
由于浮点数比整数计算耗费资源大,因此日常生活中,常用“定点小数 (fixed point fraction)” 的小数表示方法。
定点数的格式由编程人员定义,如使用1234表示12.34。假设定点数格式的表示方法被记为SI(N)F(M),S表示为有符号数, N比特整数位, M比特小数位。 例如:SI9F7表示:有符号数,9比特整数位,7比特小数位。
① 浮点数转换为定点数

  • 设浮点类型数据变量为 V_f ,需要转化为小数字长为FWL的 定点数 V_i
  • 记: 缩放因子 SCALE = 2的FWL次幂, 即 2 ^ FWL 或 (1 << FWL)
  • 则 V_i 等于 int(V_f * SCALE),其中 int()表示取整操作
  • 如果希望提升数据精度, 则可以再取整时加入舍入操作
  • 即根据数据的符号, 在对数据取整之前, 加上或者减去
    ② 定点数转化为浮点数

  • 设 定点数 V_i 其 小数字长为FWL, 要转化为浮点类型数据变量 V_f

  • 记: 缩放因子 SCALE = 2的FWL次幂, 即 2 ^ FWL 或 (1 << FWL)
  • 则有 V_f = float(V_i) / SCALE
  • 其中 float() 表示将数据转化为浮点格式, 其中的 “/” 号 表示浮点除法
    ③ 定点数加法
    两个定点数相加,设其定点格式分别为 SI(N1)F(M1) 和 SI(N2)F(M2), 设 N1 > N2, M1 > M2。
  • 首先需要进行数据对齐, 即两个定点数的小数字长, 整数字长分别一致
  • 即,在小数字长较小的数据低位补零, 在整数字长较小的数据高位符号扩展字长调整后, 两个数据的字长均为 SI(N1)F(M1)
  • 为避免溢出, 还需将整数字长扩充1位
  • 加法结果的字长格式为 SI(N1+1)F(M1)
  • 对于变量字长无法扩充的情况,则为了避免溢出, 将加数进行算术右移,抛弃小数部分,从而为整数部分留出更多空间。
    ④ 定点数乘法
    两个定点数相加,设其定点格式分别为 SI(N1)F(M1) 和 SI(N2)F(M2),设 N1 > N2, M1 > M2。
  • 全精度乘法结果的字长是 SI(N1+N2)F(M1+M2)
  • 乘法数据字长是以小数点为中心, 分别向两端扩展
  • 通常保留 M1 位小数字长, 即可满足精度需求
  • 小数截尾时,如果对精度有要求, 则需要考虑四舍五入问题
  • 注意负临界值 ,在二补码系统中, 最高位为1, 其余为为0 是一种特殊的情况, 表示负边界值。 以4比特系统举例,
  • 如果用一个4比特数据表示一个有符号的纯小数, 则定点格式为SI1F3
  • 该系统的表示范围为 从 -1 到 +0.875 ,注意,此时的负数极值可以取到-1 ,但是正数极值小于1。
  • 如果两个 SI1F3格式的数A和B相乘, 则全精度结果, 会得到 SI2F6格式的定点数C。
  • C的负极大值是 -0.875,不含整数部分,此时高两位数据是二进制11, 表示其是一个负数
  • C的正极大值是 1, 含1比特整数部分, 此时其高两位数据是二进制01,表示这是一个正数,整数部分是1

1.2 实验作业

  1. 使用C语言, 输入数据格式为16比特的short类型, 定点字长配置为SI1F15,验证定点加法和乘法计算
  2. 使用Verilog语言, 输入数据为10比特,定点字长配置为SI1F9,验证定点加法和乘法计算

1.3 实验结果

1.3.1 C语言

1.3.1.1 程序
// Joy 2018.03.19
#include <stdio.h>

#define FL  15 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值