作者:桂。

时间:2018-05-15  21:55:50

链接:http://www.cnblogs.com/xingshansi/p/9042564.html


前言

本文为Xilinx floating point IP的学习笔记,仅记录最基础的用法。参考文档:pg060-floating-point.pdf

 一、IP核综述

主要功能【基本思路是:1)输入接口:定点转浮点;2)各类浮点运算;3)输出接口:浮点转定点】:

其中floating point涉及三种格式:

1)half:半精度,16位 = 1位符号 + 5 位指数 + 10位小数

2)single:单精度,32位 = 1位符号 +8 位指数 + 23位小数

3)double:双精度,64位 = 1位符号 + 11 位指数 + 52位小数

举例:38414.4(10)=1001011000001110.0110011001100110011001100110011001100(2)

科学记数法为:1.001011000001110 0110011001100110011001100110011001100,右移了15位,所以指数为15。

其中 DSP slice usage:

对应注解:

  In short, it is generally best to use DSP slices if you have them avaialable. They are free, faster, and lower power. If you are running low on them, you can go back and balance speed with area to use DSP slices at the bottlenecks of the design and use fabric where you don't need the speed. 简而言之,DSP用的越多,时序可以越快。

block memory usage:

定点转浮点的对应关系:

二、仿真测试

假设现在需要求:13.24的自然对数【对数也可以借助CORDIC直接进行定点计算】。

13.24设置定点数:

s_axis_a_tdata自动扩展为8的整数倍,如此处为18,则输出理论上为24bits,其余补零即可。

此处求对数使用medium usage:

testbench文件:

`timescale 1ns / 1ps
/*
Function: DPRAM for data aligned
Author: Gui.
Data: 2018年5月15日22:43:11
*/
module ln_tb;
//parameter //logic
logic clk,rst;
logic signed [:] data;
//initial
initial begin
clk = ;
rst = ;
data <= ;
#
rst = ;
#
data <= 'b011010011110101110;//+13.24
#
$stop;
end always # clk = ~clk;
//main
logic s_axis_a_tready;
logic m_axis_result_tvalid;
logic [:] m_axis_result_tdata; //fix to float
fix_to_float fix_to_float_inst
(
.aclk(clk),
.s_axis_a_tvalid('b1),
.s_axis_a_tready(s_axis_a_tready),
.s_axis_a_tdata({'b0,data}),
.m_axis_result_tvalid(m_axis_result_tvalid),
.m_axis_result_tready('b1),
.m_axis_result_tdata(m_axis_result_tdata)//output
);
//float calculation: ln(outout)
logic [:] result;
floating_point_0 floating_point_0_inst
(
.aclk(clk),
.s_axis_a_tvalid('b1),
.s_axis_a_tready(),
.s_axis_a_tdata(m_axis_result_tdata),
.m_axis_result_tvalid(),
.m_axis_result_tready('b1),
.m_axis_result_tdata(result)
);
//float to fix , ignored
endmodule

第一步定点转浮点:MATLAB输出

>> dec2bin(hex2dec(num2hex((single(13.24))))) %浮点的定点显示

%如果给了定点显示,计算对应的浮点值的指令?

这涉及到:浮点数与16进制数的转化,以32bit单精度为例:

  • 浮点数转十六进制数
num2hex(single(13.24))
  • 十六进制转浮点数(正数为例,负数提取一个符号位即可,同时浮点->十六进制,只算绝对值)
function output = hex2float(a)
%convert hex to float
num = dec2bin(hex2dec((a)));
L = length(num);
exppos = num((L-23):-1:1);
expnum = 0;
for i = 1:length(exppos)
expnum = expnum + str2num(exppos(i))*2^(i-1);
end
expnum = expnum - 2^7 + 1;
fracpos = num(end-23:end);
fracnum = 0;
for i = 2:length(exppos);
fracnum = fracnum + str2num(fracpos(i))*2^(-i+1);
end
fracnum = fracnum + 1;
output = fracnum*2^expnum;

  从浮点角度对比FPGA与MATLAB输出:

二者非常接近。

对应VIVADO输出:

对数运算结果:

MATLAB结果:

可以看出与MATLAB计算结果基本一致。另外,可写入module模块,综合后分析CLB、DSP等器件资源。

查看使用的器件资源:

定、浮点转化,消耗的仅仅是逻辑资源LUT、FF,求对数过程中,由于选择的是medium usage,对应四个DSP,仿真结果与理论一致,此为资源评估的依据。

基础008_定浮点转化[floating point IP]的更多相关文章

  1. 零java基础搞定微信Server

    自从打通了微信client到BLE设备端的通道.我的工作就转移到了server端了.微信的BlueDemoServer是以java编写,而本尊仅仅懂得嵌入式,对JavaWeb一窍不通. 本尊贵为IOT ...

  2. 阿里云Open API自动化脚本—ECS公网IP转化弹性公网IP

    1.OpenAPI Explorer 记录一下使用阿里云 Open API 自动化/脚本化 “ECS 公网 IP 转化弹性公网 IP”的实现 全过程.原博客地址:https://www.markedi ...

  3. 【转载】[基础知识]【网络编程】TCP/IP

    转自http://mc.dfrobot.com.cn/forum.php?mod=viewthread&tid=27043 [基础知识][网络编程]TCP/IP iooops  胖友们楼主我又 ...

  4. 编程语言的基础——搞定JavaIO

    关键字:IO基础,JUnit生命周期,字节流,字符流,字符编码,对象流,序列化,反序列化 Java I/O 流是一组有顺序的,有起点和终点的字节集合.是对设备文件间数据传输的总称和抽象. 在IO中涉及 ...

  5. 网络编程基础之C/S架构和TCP/IP协议

    一.何谓C/S架构 C指的是client(客户端软件),S指的是Server(服务端软件),既然我们的的标题是网络编程基础, 那我们就一起来学习怎样写一个C/S架构的软件,实现服务端与客户端软件基于网 ...

  6. 一、java基础-数据类型_数据类型转化_字符编码_转义字符

    1.Java  支持的8种基本数据类型: java的四种整数数据类型:byte 1    short 2     int4     long8   byte     8位带符号整数 -128到127之 ...

  7. Python3基础 try-指定except-as reason 捕获打开一个不存在的文件的时候,会产生OSError异常的示例

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  8. 第12章 网络基础(2)_数据封装和IP地址

    4. 数据封装和IP地址 (1)数据封装 (2)IP地址 ①在TCP/IP网络中,每个主机都有唯一的地址,它是通过IP协议族实现的. ②IP协议要求在每次与TCP/IP网络建立连接时,每台主机都必须为 ...

  9. 三步搞定Vmware固定虚拟机的IP

    1.修改vmware的虚拟网络编辑器 按照图中红色方框的方法设置,子网IP可以设置成自己想要的,点击NAT设置,记住网关IP. 2.进入centos虚拟机系统 编辑 vim /etc/sysconfi ...

随机推荐

  1. Springboot集成ES启动报错

    报错内容 None of the configured nodes are available elasticsearch.yml配置 cluster.name: fans node.name: no ...

  2. 每月学习数理统计--《统计学习方法—李航》(3): SVM

    1. SVM的最优化问题 2.拉格朗日乘数法,对偶条件KKT条件 3.软件隔支持向量机 4.非线性支持向量机,核函数 5.SMO算法 1. SVM的最优化问题 支持向量机(Support Vector ...

  3. asp.net core 依赖注入实现全过程粗略剖析(3)

    接着 前面,前面的过程是普遍常用的依赖注入解析过程,我们正常都是在startup类中注入依赖服务,但是,笔者这周开发的时候遇到个问题,不同服务的生命周期不同,不能调用服务.举个例子,AddDbCont ...

  4. ORM(一)

    1.什么是ORM ORM,即Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,这样,我们在具体的操作业务对象的时候,就不需要再去 ...

  5. 自己总结的C#编码规范--5.如何写好注释篇

    本文是读完前言中提到的几本书后,结合自身的想法总结出来的如何写好注释的一些比较实用的方法. 另外本文是上一篇 注释篇 的一个补充 如何写好注释 避免使用不明确的代词 有些情况下,"it&qu ...

  6. IIS 注册 ASP.NET 2.0 4.0

    在CMD窗体,运行如下命令: 2.0:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -i 4.0:C:\WINDOWS ...

  7. Win userAccountControl 基本属性

    userAccountControl 基本属性 属性标志 十六进制 十进制 说明 SCRIPT 0x0001 1 运行登录脚本 ACCOUNTDISABLE 0x0002 2 账户禁用 HOMEDIR ...

  8. 动画库NineOldAndroids

    动画库NineOldAndroids   NineOldAndroids组件是一个向下兼容的动画库,主要是使低于API 11的系统也能够使用View的属性动画.该动画库支持旋转.移动.透明渐变.缩放等 ...

  9. luogu P2962 [USACO09NOV]灯Lights 高斯消元

    目录 题目链接 题解 题目链接 luogu P2962 [USACO09NOV]灯Lights 题解 可以折半搜索 map合并 复杂度 2^(n / 2)*logn 高斯消元后得到每个点的翻转状态 爆 ...

  10. JAVA的8种基本数据类型和类型转换

    byte 字节型                        1字节(8bit) 初始值:0 char 字符型 2字节 空格 short 短整型 2字节 0 int 整形    4字节 0 long ...