xilinx除法器的使用
平台:Vivado2018.3.
芯片:xcku115-flva1517-2-i (active)
最近学习使用了xilinx除法器,在使用过程中出现了很多次除法器的结果和我预计的结果不一致,特此记录学习一下。
参考文件:pg151.下载地址
pg151-div-gen.pdf • 查看器 • AMD 自适应计算文档门户 (xilinx.com)
IP配置说明

Xilinx除法器拥有三种模式
Radix2: The implementation uses FPGA logic primitives (registers and LUTs). The Radix2 solution does not use DSP or block RAM primitives.使用FPGA寄存器和LUT资源,不使用dsp和ram资源。被除数位宽2-64,除数位宽2-64。支持无符号或二进制补码有符号数。结果可以配置为商和余数,商和小数。
High radix:该实现使用DSP切片和块RAM。被除数位宽2-64,除数位宽2-64。支持有符号数。结果可以配置为商和小数。
Lutmult:使用了DSP,RAM,以及LutMult资源。被除数位宽2-17,除数位宽2-17(被除数和除数位宽之和限制在23位以内)支持无符号或二进制补码有符号数。结果为商和余数。
在学习此IP之前,需要先复习一下二进制数的表示。
1、 无符号二进制数据unsigned。
无符号数据。例如8位无符号数就代表的十进制数的范围为[0,2^n-1]。
2、 有符号的二进制数据的表示signed。
有符号数据。除数据位外最高位代表符号位。例如8位的有符号数据的数值范围为[-128,127]。我们知道计算机中的数据都是用补码来参与运算。那么计算机里面为何要使用补码来计算呢?计算机中使用补码就可以将原本的减法转换为加法运算。
例如
1,二进制补码为00000001.(代表无符号数为1)
-1,二进制补码为11111111.(代表无符号数为255)
-2,二进制补码为11111110.(代表无符号数为254)
计算机计算
1+(-1),即1+255=256,(100000000),低8位就是0的补码00000000
-1+(-2),及255+254=509,(111111101),低八位就是-3的补码11111101
是不是很方便,所有的减法运算都改变成了加法运算。
Dividend channel被除数,
Divisor channel除数
Output channel
Remander type:
remainder余数模式。
Fractional小数模式。
Fractional width小数位宽

设置IP的模式。和输出延时。
对该IP仿真。
仿真tb
`timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date: 2024/02/04 16:05:55
// Design Name:
// Module Name: vtf_div_top
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//module vtf_div_top;
reg signed[15:0] dividend_tdata ;
reg dividend_tvalid ;
reg signed[15:0] divisor_tdata ;
reg divisor_tvalid ;
//
reg clk ;
reg rst_n ;div_top div_top(
//.dividend_tdata (dividend_tdata ),.dividend_tvalid (dividend_tvalid ),.divisor_tdata (divisor_tdata ),.divisor_tvalid (divisor_tvalid ),
//.clk (clk ),.rst_n (rst_n ));//------------------------------------------------------//复位参数//------------------------------------------------------integer i;//设置复位参数initialbegin$display("[%t] : reset begin...", $realtime);rst_n = 0;for( i=0 ; i<100 ; i=i+1)begin@(posedge clk );end$display("[%t] : reset stop...", $realtime);rst_n = 1;endparameter delay_cnt = 500;reg [15:0] data_value;reg data_en;reg delay_over;//------------------------------------------------------initial beginclk = 0;dividend_tdata =0;divisor_tdata =0;dividend_tvalid =0;divisor_tvalid =0;wait(rst_n == 1);$display("[%t] : div start...", $realtime);delay(delay_over,delay_cnt);//调用等待任务//------------------------------------------------------//调任务data_gen(data_value,16'd10);//产生被除数dividend_tdata = data_value;data_gen(data_value,16'd3);//产生除数
// data_gen(data_value,-16'd3);//产生除数divisor_tdata = data_value;data_valid(data_en);dividend_tvalid = data_en;divisor_tvalid = data_en;data_uvalid(data_en);dividend_tvalid = data_en;divisor_tvalid = data_en;delay(delay_over,delay_cnt);//调用等待任务$display("[%t] : div end...", $realtime);$finish(2); end//------------------------------------------------------//任务,输出一个数据//------------------------------------------------------task data_gen;output [15:0] data_out;input [15:0] data_in;begindata_out = data_in;endendtask//------------------------------------------------------//任务,数据有效//------------------------------------------------------task data_valid;output data_en;beginrepeat(1)@(posedge clk);data_en = 1;endendtask//------------------------------------------------------//任务,数据无效//------------------------------------------------------task data_uvalid;output data_en;beginrepeat(1)@(posedge clk);data_en = 0;endendtask//------------------------------------------------------//任务,延时模块//------------------------------------------------------task delay;output delay_over;input [31:0] delay_in;beginrepeat(delay_in)@(posedge clk);delay_over = 1;endendtaskalways#5 clk = ~clk;endmodule
余数模式
10/-3=-3余数为1
整数位为-3,余数位1
小数模式
10/3≈3.333333
输出的小数将量化到2^15次方上。最高位表示符号位。
3.3333333
整数位为高16位。为fffd,代表-3
小数0.333333量化到2^15次方为10,922。
小数位为低16位。为2aaa(10922),还原回去0.3333129,有量化误差。原因为量化位宽为15位。
10/-3≈-3.333333

输出的小数将量化到2^15次方上。最高位表示符号位。
-3.3333333
整数位为高16位。为fffd,代表-3
小数-0.333333量化到2^15次方为-10,922。
小数位为低16位。为d556(-10922),还原回去-0.3333129。
值得注意的是当IP的模式High radix时。

小数表示已经没有了最高位的符号位。会将得到的结果直接量化到设置的小数位宽上。
High radix时10/4=2.5的仿真

High radix时10/-4=-2.5的仿真
计算结果
整数部分fffd,为-3。
小数部分8000,没有符号位,为0.5
(计算结果加起来为-2.5,目前没有在pg151内找到相关说明)

High radix时10/-6=-1.666666的仿真
计算结果
整数部分fffe,为-2。
小数部分5555,没有符号位,为0.3333
(计算结果加起来为-1.6666)

High radix时10/6=1.666666的仿真
计算结果
整数部分0001,为1。
小数部分aaab,没有符号位,为0.6666
(计算结果加起来为1.6666)

相关文章:
xilinx除法器的使用
平台:Vivado2018.3. 芯片:xcku115-flva1517-2-i (active) 最近学习使用了xilinx除法器,在使用过程中出现了很多次除法器的结果和我预计的结果不一致,特此记录学习一下。 参考文件:pg151.下载地址 pg151-div-gen.pdf …...
算法沉淀——递归(leetcode真题剖析)
算法沉淀——递归 01.汉诺塔问题02.合并两个有序链表03.反转链表04.两两交换链表中的节点05.Pow(x, n) 递归是一种通过调用自身的方式来解决问题的算法。在递归算法中,问题被分解为更小的相似子问题,然后通过对这些子问题的解进行组合来解决原始问题。递…...
BERT模型中的input_ids和attention_mask参数
一、概述 1.1 input_ids 在BERT模型及其衍生体中,输入文本首先经过一个分词处理流程,其中文本被细分为单词或子单词(subwords),每个分词随后映射到一个唯一的整数标识符。这些标识符组成了所谓的input_ids数组&#x…...
java+vue_springboot企业设备安全信息系统14jbc
企业防爆安全信息系统采用B/S架构,数据库是MySQL。网站的搭建与开发采用了先进的java进行编写,使用了vue框架。该系统从三个对象:由管理员、人员和企业来对系统进行设计构建。主要功能包括:个人信息修改,对人员管理&am…...
vulhub中Apache Log4j Server 反序列化命令执行漏洞复现(CVE-2017-5645)
Apache Log4j是一个用于Java的日志记录库,其支持启动远程日志服务器。Apache Log4j 2.8.2之前的2.x版本中存在安全漏洞。攻击者可利用该漏洞执行任意代码。 1.我们使用ysoserial生成payload,然后直接发送给your-ip:4712端口即可。 java -jar ysoserial-…...
基于python+django+vue.js开发的医院门诊管理系统/医疗管理系统
功能介绍 平台采用B/S结构,后端采用主流的Python语言进行开发,前端采用主流的Vue.js进行开发。 功能包括:医生管理、科室管理、护士管理、住院管理、药品管理、用户管理、日志管理、系统信息模块。 源码地址 https://github.com/geeeeeee…...
Linux文件系统笔记
文章目录 FILE SYSTEM软硬链接 动静态库 使用别人提供的库 FILE SYSTEM 文件的管理工作: 1.基础知识: 文件 属性 内容不是所有文件都会打开所有的打开的,未打开的文件会进行管理未打开文件,要能做到快速定位文件磁盘–物理存…...
vue封装el-table表格组件
先上效果图: 本文包含了具名插槽、作用域插槽、jsx语法三种: Render.vue(很重要,必须有): <script> export default {name: "FreeRender",functional: true,props: {scope:Object,render: Functio…...
「Python系列」Python数据结构
文章目录 一、数据结构二、相关链接 一、数据结构 Python提供了多种内置的数据结构,这些数据结构在编程中非常有用。以下是Python中常见的一些数据结构: 列表(List): 列表是Python中最常用的数据结构之一,它是一个有…...
MySQL多实例部署:从概念到实操的全面指南
目录 MySQL多实例管理 单实例 什么是多实例 多实例的好处 多实例的弊端 MySQL多实例用在哪些场景 资金紧张的公司 用户并发访问量不大的业务 大型网站也有用多实例 部署MySQL多实例 rpm和源码的优缺点 二进制方式安装mysql 准备二进制mysql运行所需的环境 准备多…...
C++学习Day07之虚函数和纯虚函数
目录 前言一、程序及输出1.1 虚函数1.2 纯虚函数1.2.1 定义、示例1.2.2 引入原因1.2.3 抽象类 二、分析与总结 前言 在 C 中,虚函数和纯虚函数是实现多态性的重要概念。虚函数是在基类中声明为虚函数的函数,在派生类中可以被重写,实现动态联…...
GZ036 区块链技术应用赛项赛题第9套
2023年全国职业院校技能大赛 高职组 “区块链技术应用” 赛项赛卷(9卷) 任 务 书 参赛队编号: 背景描述 随着异地务工人员的增多,房屋租赁成为一个广阔是市场;目前,现有技术中的房屋租赁是由…...
微服务—RabbitMQ高级(延迟消息)
本博客为个人学习笔记,学习网站:2023黑马程序员RabbitMQ入门到实战教程 高级篇章节 目录 延迟消息 死信交换机 延迟消息插件 下载安装 延迟交换机声明 编辑 发送延迟消息 订单状态同步问题 延迟消息 在电商的支付业务中,对于一些库…...
香港服务器如何取消windows的自动更新
大家用过电脑的人对windows系统的自动更新应该都不会陌生,其实香港服务器的使用也是一样的方法。为什么要对香港服 务器windows的自动更新进行关闭呢?其主要原因在于,有些更新是不能更新,一更新话,系统反而会变得不稳定…...
kali虚拟机桥接模式快速设置
第一步:选择 虚拟机 > 设置 > 虚拟机设置,设置桥接模式 不选择复制物理网络连接状态选项: 如果采用DHCP的方式来分配IP地址,当电脑网络从有线或无线网络之间进行移动时,DHCP会重新分配ip地址,即虚拟机…...
「连载」边缘计算(十五)02-18:边缘部分源码(源码分析篇)
(接上篇) ChannelContext struct定义如下所示。 KubeEdge/beehive/pkg/core/context/context.go // ChannelContext is object for Context channel type ChannelContext struct { //ConfigFactory goarchaius.ConfigurationFactory channels map[…...
MySQL性能调优篇(8)-NoSQL与MySQL的比较
MySQL数据库是一种关系型数据库,而NoSQL是一种非关系型数据库。它们在数据存储和处理方式、数据模型和可扩展性等方面存在一些明显的差异。本文将对MySQL数据库和NoSQL进行比较,并介绍它们的优势和劣势。 首先,MySQL使用表格的形式来存储数据…...
【Linux学习】线程池
目录 23.线程池 23.1 什么是线程池 23.2 为什么需要线程池 23.3 线程池的应用场景 23.4 实现一个简单的线程池 23.4.1 RAII风格信号锁 23.4.2 线程的封装 23.4.3 日志打印 22.4.4 定义队列中存放Task类任务 23.4.5 线程池的实现(懒汉模式) 为什么线程池中需要有互斥锁和条件变…...
利用Docker部署一个简单的springboot项目
文章目录 1、首先利用docker部署一个redis中间件1.1、下载redis镜像1.2、在主机创建redis挂载的目录和文件1.3、部署redis中间件 2、创建springboot项目2.1、修改application.yml2.2、编写controller2.3、启动应用并测试访问 3、将应用打包成镜像3.1、编写Dockerfile3.2、上传文…...
【Java】纯小白的三种工厂模式基础知识学习笔记
工厂模式概念 在Java中,工厂模式是一种设计模式,用于创建对象而无需指定明确的类。工厂模式通过定义一个共同的接口或抽象类来创建对象,然后由工厂类根据特定条件或参数来实例化具体的对象。 工厂模式通常包括三种类型:简单工厂…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...
