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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/691829.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【linux】查看openssl程序的安装情况

【linux】查看openssl程序的安装情况 1、查看安装包信息 $ rpm -qa |grep openssl 2、安装路径 $ rpm -ql openssl $ rpm -ql openssl-libs $ rpm -ql openssl-devel 3、相关文件和目录 /usr/bin/openssl /usr/include/openssl /usr/lib64/libssl.so.* /usr/lib64/libcrypto…

uniapp项目准备工作

1.封装请求 export const baseUrl function getHeaders () {let token uni.getStorageSync(token)let header {"access-token":token,// X-Requested-With: XMLHttpRequest,Content-Type: application/json; charsetUTF-8}return header } function reLogin(){/…

Filezilla 银河麒麟桌面操作系统V10(sp1)与Windows主机数据传输问题

银河麒麟桌面操作系统V10&#xff08;sp1&#xff09;与Windows主机数据传输问题 1. 关闭Windows主机的防火墙和KylinOS V10的防火墙 如果不知道怎么关闭的参考这两篇文章&#xff1a; https://blog.csdn.net/m0_70885101/article/details/127271517 https://blog.csdn.net/w…

扫盲:什么是webGPU,和webGL对比哪些优点?

web端的3D图像渲染&#xff0c;大都采用webGL&#xff0c;不过其性能让大家很崩溃&#xff0c;webGPU的出现&#xff0c;让大家看到了访问加速的可能&#xff0c;本文通过对比webGPU与webGL&#xff0c;给老铁们普及一下。老铁们如有数据可视化的设计和开发需求&#xff0c;可以…

算法之力扣数青蛙

题目连接 文章目录 题目解析算法原理第一步第二步第三步第三步第四步指向o 代码讲解代码实现 题目解析 先给大家来讲解一下这个题目的意思吧&#xff0c;这个题目是说呢给你一个蛙叫的字符串让你去设计一个算法求出发出这种蛙叫最少需要几只青蛙。比如说第一个样例发出这种叫声…

DAY55:动态规划(买卖股票的最佳时机3)

Leetcode: 309 最佳买卖股票时机含冷冻期 这道题比上面状态更多&#xff0c;是因为卖出股票后&#xff0c;你无法在第二天买入股票 (即冷冻期为1天)。 状态 状态一&#xff1a;持有股票状态&#xff08;今天买入股票&#xff0c;或者是之前就买入了股票然后没有操作&#xf…

【C/C++】实现Reactor高并发服务器 完整版

代码结构 文件介绍 InetAddress.h InetAddress类 ip和端口设置 Socket.h Socket类 设置fd Epoll.h epollfd 管理类 Channel.h Channel类 管理epoll以及对应回调函数实现 EventLoop.h EventLoop事件循环类 TcpServer.h 服务器类 tcpepoll.cpp 主函数 InetAddress.h #if…

桌面便签怎么设置提醒,哪个备忘录便签好?

2024年终于开工了&#xff0c;第一天上班比较迷茫&#xff0c;不知道做什么比较好&#xff0c;这个时候如果有一款简单好用且可提醒的桌面便签软件该多好。那么&#xff0c;桌面便签怎么设置提醒&#xff0c;哪个备忘录便签好&#xff1f; 桌面便签怎么设置提醒&#xff0c;哪个…

216961-98-7,BODIPY 493/503 SE,具有相对较长的激发状态寿命

文章关键词&#xff1a;216961-98-7&#xff0c;BODIPY 493/503 NHS 活化酯&#xff0c;BODIPY 493/503 NHS ester&#xff0c;BODIPY 493/503 SE 一、基本信息 产品简介&#xff1a;BODIPY染料是一种独特的荧光染料&#xff0c;由于其具有疏水性&#xff0c;特别适合用于染色…

基于芯驰 X9HP PTG4.1 在 yocto 中添加 Linux 应用

1.参考例程并添加应用 1.1 参考例程 &#xff08;1&#xff09;查看自带的串口测试例程 uart_test &#xff0c;查看 bb 文件怎么写的。 1.2 添加 printf-test 应用 &#xff08;1&#xff09;在 yocto/meta-semidrive/recipes-bsp/ 目录中 copy 自带例程 uart-test 改名为 …

java中容易被忽视的toString()方法

之前一直认为toString就是将数据转换成字符类型&#xff0c;直到最近写出了一个bug才对toString有了新的认识 不同数据类型&#xff0c;toString() 有不同的操作 定义一个student类&#xff0c;包含姓名 String类型、性别 String类型、年龄 int 类型、分数列表 String类型的li…

2024年机器人技术的五大发展趋势,你有看好的吗?

文 BFT机器人 前言&#xff1a; 近些年来机器人技术作为推动社会发展的重要动力之一&#xff0c;它的发展成为重点关注对象&#xff0c;这一领域经历了漫长的发展。随着计算机、传感器和人工智能等技术的进步&#xff0c;现代机器人已经从简单的工具变成了各行各业的生产力。从…

9、使用 ChatGPT 的 GPT 制作自己的 GPT!

使用 ChatGPT 的 GPT 制作自己的 GPT! 想用自己的 GPT 超越 GPT ChatGPT 吗?那么让我们 GPT GPT 吧! 山姆 奥特曼利用这个机会在推特上宣传 GPTs 的同时还猛烈抨击了埃隆的格罗克。 GPTs概览 他们来了! 在上周刚刚宣布之后,OpenAI 现在推出了其雄心勃勃的新 ChatGPT…

信奥一本通:1075:药房管理

这个题可能有点误解&#xff0c;看这个实例&#xff0c;不是用30依次去减10 5 20 6 7 8&#xff0c;如果按照这个减法&#xff0c;30先减10再减5就剩15了&#xff0c;那完全不够后面20减的&#xff0c;所以次数还剩4次。但是&#xff0c;这道题是谁能减就减谁&#xff0c;意思就…

使用云渲染要注意什么?渲染100邀请码1a12

云渲染是利用云服务器进行渲染的方法&#xff0c;它能节省用户成本&#xff0c;提高效率&#xff0c;如果要用云渲染需要注意以下几点&#xff1a; 1、选择专业平台 一个专业的平台对渲染非常重要&#xff0c;比如渲染100&#xff0c;它是国内知名的云渲染提供商&#xff0c;拥…

【力扣 - 二叉树的中序遍历】

题目描述 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 提示&#xff1a; 树中节点数目在范围 [0, 100] 内 -100 < Node.val < 100方法一&#xff1a;递归 思路与算法 首先我们需要了解什么是二叉树的中序遍历&#xff1a;按照访问左子树——…

Linux小程序--进度条

目录 1.知识补充 1.1回车和换行 1.2缓冲区 2.实现倒计时 3.实现进度条 1.知识补充 1.在制作小程序进度条之前&#xff0c;我们先了解一下&#xff0c;回车换行和行缓冲区的概念。 2.动态效果&#xff0c;在同一个位置刷新不同的图像&#xff0c;实现一个倒计时的效果。…

2024最新软件测试面试题(带答案)

1. 请自我介绍一下(需简单清楚的表述自已的基本情况&#xff0c;在这过程中要展现出自信&#xff0c;对工作有激情&#xff0c;上进&#xff0c;好学) 面试官您好&#xff0c;我叫###&#xff0c;今年26岁&#xff0c;来自江西九江&#xff0c;就读专业是电子商务&#xff0c;毕…

Linux 磁盘分区、挂载

Linux 磁盘分区、挂载 Linux 分区 介绍 Linux 来说无论有几个分区&#xff0c;分给哪一目录使用&#xff0c;它归根结底就只有一个根目录&#xff0c;一个独立且唯一的文件结构 , Linux 中每个分区都是用来组成整个文件系统的一部分。 Linux 采用了一种叫“载入”的处理方法&…

(十四)devops持续集成开发——jenkins流水线使用pipeline方式发布项目

前言 本节内容我们使用另外一种方式pipeline实现项目的流水线部署发布&#xff0c;Jenkins Pipeline是一种允许以代码方式定义持续集成和持续交付流水线的工具。通过Jenkins Pipeline&#xff0c;可以将整个项目的构建、测试和部署过程以脚本的形式写入Jenkinsfile中&#xff…