FPGA 定点数

article/2025/3/10 21:20:26

定点数就是小数位宽不发生改变的数,小数点位置固定。

定点数位宽构成:{符号位,整数位,小数位}

当定点数为有符号数,数据的最高位为符号位,整数位和小数位需要根据精度去定义位宽。

假如一个定点数位宽为8位,1位符号位,0位整数位,7位小数位,定点数对应量化范围是-1 ~ +1,小数精度为 1/(2^7);那么134定点数为整数,但表示的是 134*(1/(2^7)),其值为134所对应的浮点数。

举例:-123的定点数对应二进制补码?浮点数? (数据格式:1位符号位,0位整数位,7位小数位)

二进制补码:2^8-123

浮点数:-123 * (1/(2^7))

有符号定点数加减法运算法则:

有符号定点数做加法:127+(-110) = 8‘b0111_1111 + 8'b1001_0010 = 9'b1_0001_0001 = 273;

实际结果应该为17;原因在于有符号定点数加法会产生溢出,需要在做加法之前把加数和被加数扩展一位位宽,最后的结果为{1位符号位,1位整数扩展位,7位小数位};对于负数,则需要把最高位扩展。

9’b0_0111_1111 + 9'b1_1001_0010 = 10'b10_0001_0001;因为加法结果为9bit,所以要把最高位1丢弃,结果为9'b0_0001_0001=17,{1位符号位,1位整数扩展位,7位小数位}。

有符号数乘法运算法则:

-1.2*0.8使用定点数进行定点化计算

{1位符号位,3位整数位,10位小数位}

先转换为 1.2*0.8

1.2定点数:2^10*1.2;0_0100_1100_1100

0.8定点数:2^10*0.8;0_0011_0011_0011

两数相乘之后,位宽26位,整数位6位,小数位20位

1.2*0.8=00_0000_1111_0101_1000_1010_0100=1005732

转化为负数2进制补码,加1位符号位,27位

2^27-1005732=133211996=111_1111_0000_1010_0111_0101_1100

即为-1.2*0.8的二进制补码。

有符号数除法运算法则:

在做定点化除法运算时,最好把除 数被除数定义为一样位宽,小数点位置一样,也就是定点数的小数位宽和整 数位宽一致。这样计算结果好处理。

比如:除数是 10 位整数,8 位小数。被除数是 8 位整数,8 位小数,这时候只需要把被除数高位补 2bit0 即可变为相同位宽。

当除数被除数小数部分位宽不等时,例如,除数 8bit 整数,小数位 8bit;被除数 8bit 整数,小数位 4 位。需要在被除数的小数位低位补齐 4 个 bit0;保证小数位和除数一致。

公式:被除数=商*除数+余数

余数就是可以转化为小数部分;

无符号数除法的小数位宽:

 

FractRmd 是小数部分,IntRmd 是余数,2^F 是指余数的量化位宽,或者小数 量化位宽。无符号数的小数位宽和 F 设置一致,假如设置小数位宽为 16 那么 小数位宽就是 16 位。

100/1234=0.081037—转化定点数=0.081037*2^16=5310

将整数部分和小数部分拼接={整数部分,小数部分}

有符号数除法的小数位宽:

FractRmd 是小数部分,IntRmd 是余数,2^F-1 是指余数的量化位宽,这里因 为是有符号数,小数部分最高位用于符号位,剩余 F-1 位是小数位。例如设置有符号除法小数 16 位,那么实际小数只有 15 位,最高位为符号位。

如果使用小数需要和整数部分拼接,有符号数都是二进制补码的形式。

例如 16 位小数 有符号数 1111_1111_1111_1000=-(8/32768)

除法器输出商整数 3 位带有符号,1 位符号位 2 位整数位 101(十进制的-3) 将整数部分和小数部分拼接={整数[2:0],小数部分[14:0]} //1 位符号位 2 位整数位 15 位小数位。


http://chatgpt.dhexx.cn/article/GlXgUUHx.shtml

相关文章

黑金核心板32bitDDR3 MIG核UI接口仿真模型搭建

图2-4-1为黑金开发板上两片DDR3原理图。 1. 搭建仿真模型时需要例化两个ddr3_model,不然仿真时init_calib_complete信号会一直低。 2.还要考虑信号的延时,需要例化WireDelay模块,如Xilinx官方中给的例程中所示,不然app_rd_data数据一直是红…

基于FPGA的UDP 通信(五)

引言 前文链接: 基于FPGA的UDP 通信(一) 基于FPGA的UDP 通信(二) 基于FPGA的UDP 通信(三) 基于FPGA的UDP 通信(四) 本文基于FPGA设计千兆以太网通信模块UDP数据发送…

Verilog:【8】基于FPGA实现SD NAND FLASH的SPI协议读写

碎碎念: 终于熬过了期末周,可以开始快乐的开发之旅了。 这一期作为一千粉后的首篇博客,由于之后项目会涉及到相关的部分,因此介绍的是使用FPGA实现SD NAND FLASH的读写操作,以雷龙发展提供的CS创世SD NAND FLASH样品为…

【FPGA算法加速】运行PYNQ,对应FPGA芯片版本:赛灵思黑金AX7020

黑金AX7020开放板实物图: 这里的右下角需要连接本地的路由器,图中并未连上,PC端与FPGA在同一路由的网下,到时候PC端可以在线访问FPGA的资源。 一、连接FPGA硬件设备 1、 SD卡插回开发板,确认开发板启动模式为 SD卡模…

黑金Xilinx FPGA学习笔记(一)verilogHDL扫盲文-(1)

verilog简介 HDL 顾名思义Hardware Description Languag verilog HDL 语言的语法和格式都比较随便,它没有 VDL HDL 语言那么严谨,因此受到了广泛的应用。 0.3RTL级和组合逻辑级 笔者的眼中 Verilog HDL 语言建立的硬件模块可以 分为有时钟源和无时钟…

基于FPGA的示波器设计

目录 一、设计要求 二、系统架构设计 一、设计要求 本次基于FPGA的示波器设计主要技术要求包含以下内容: 系统能够实现模数转换功能,即包含ADC驱动模块;系统能够实现ADC采集数据的缓存功能;系统包含辅助测试模块,DA…

FPGA实现 贪吃蛇

一. 硬件 黑金AX4010AN430显示屏(480*272)蓝牙模块安卓手机 采用app通过蓝牙模块来操作蛇的移动情况 二. 数据的存储 reg[18:0] Snake[0:7]; //蛇 18:10 x 9:1 y 0 :flag 是否是蛇身 reg[17:0] Food; // 食物三. 蛇的移动的方向 通过上下左右来…

黑金全部开发板资料(FPGA+ZYNQ)分享

黑金开发板 能找到的所有黑金开发板的资料,足够学习使用。 ALTERA CYCLONE 10 黑金开发板ZYNQ7020_2019 黑金zynq7015_2017 黑金zynq7010_2017 …

FPAG—UART串口实现与解析-黑金fpga资料解析

UART实现-黑金fpga开发板案例解析 uart 异步串口通讯 无需时钟线,俩根线一跟复制发数据一根负责收数据。 具体的时序如下图1: 图1:UART时序图 可以看到 当数据线由高位变为地位时,即遇到一个下降沿时刻,表示开始这一…

【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验二十四:SD卡模块

驱动SD卡是件容易让人抓狂的事情,驱动SD卡好比SDRAM执行页读写,SD卡虽然不及SDRAM的麻烦要求(时序参数),但是驱动过程却有猥琐操作。除此此外,描述语言只要稍微比较一下C语言,描述语言一定会泪流满面,因为嵌套循环,嵌套判断,或者嵌套函数等都是它的痛。. 史莱姆模块是…

黑金AX7Z100 FPGA开发板移植LWIP库(二)PL端

前言 上一篇博文中实验了PS端移植LwIP库的演示程序。本篇接下来基于Vivado17.4整理比较详细的PL端移植过程。 一、Vivado 工程建立 1、新建一个空工程,名称为net_lwip_pl。 2、FPGA芯片选择xc7z100ffg900-2。 二、配置PS&PL系统硬件 1、工程建好以后&…

【FPGA从0开始系列】黑金EP4CE10F17C8开发板按键实验(二)

项目目录 1.实验目的2.准备阶段3.实验原理4.编写Verilog HDL程序5.配置引脚6.查看和分析RTL7.下载程序8.总结 1.实验目的 查阅AX4010黑金系列用户手册,编写按键程序,实验简单的按键控制LED的功能,同时学习 Quartus RTL Viewer 的使用 2.准备…

汉诺塔(C语言实现)

目录 汉诺塔的游戏规则: 当A只有一个环的时候: 当A只有两个环的时候: 当A只有三个环的时候: 思路: 当n1时: 当n2时: 当n3时: 当n4时: 见代码 运行截图 汉诺塔的游戏…

【C语言】汉诺塔问题

汉诺塔是一个非常经典的问题,其背后是一个传说故事: 在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的6…

汉诺塔C语言步骤解析

汉诺塔问题在C语言中一般采用递归法来写,假设有A、B、C三根棒,A棒放着若干个圆盘,将其移动到C棒上,中途可在B棒中暂时放置圆盘。 分析: (1) 如果只有一个圆盘,则把该圆盘从A棒移动到C棒 (2) 如果圆盘数量…

汉诺塔递归的c语言实现(递归)

对于递归来讲, 汉诺塔实际是经典到不能再经典的例子了, 每个数据结构的教材对会提到. 但是到最后只给出一段类似下面的一段代码: #include<stdio.h>void move(int n,char a,char b,char c) {if(n1)printf("\t%c->%c\n",a,c); //当n只有1个的时候直接从…

C语言编程实现汉诺塔问题

C语言编程实现汉诺塔问题 1.首先解释一下&#xff0c;汉诺塔问题&#xff1a;古代梵塔内有A、B、C3个座&#xff0c;开始时A座上面有64个盘子&#xff0c;盘子大小不等&#xff0c;大的在下&#xff0c;小的在上。一个老和尚想把64个盘子从A移到C&#xff0c;规定移动过程中3个…

汉诺塔C语言实现(纯代码)

a、b、c三座塔&#xff0c;将n个从小到大&#xff08;自上而下&#xff09;的圆盘从a移动到c&#xff0c;移动期间小圆盘必须在大圆盘上面&#xff0c;问移动步骤。 #include<stdio.h>int main() {void hanoi(int n,char one,char two,char three);int m;printf("…

【汉诺塔】C语言递归解法,深层次地带你理解汉诺塔公式

目录 汉诺塔公式 汉诺塔问题在数学层面的公式&#xff1a; C语言递归公式 两层汉诺塔 三层汉诺塔 递归问题可谓是学习C语言以来的第一个拦路虎&#xff0c;而汉诺塔问题更是递归中对新手很不友好的一道经典题&#xff0c;我们接下来从公式角度和更深层的图解角度来让你理解…

汉诺塔c语言代码实现

汉诺塔&#xff08;Tower of Hanoi&#xff09;&#xff0c;又称河内塔&#xff0c;是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子&#xff0c;在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重…