【教程4>第1章>第10节】FPGA浮点与定点设计应用

这篇具有很好参考价值的文章主要介绍了【教程4>第1章>第10节】FPGA浮点与定点设计应用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本课程目录

1.软件版本

2.FPGA浮点和定点仿真概述

3.FPGA浮点运算方式2

4.FPGA浮点运算方式3

5.视频操作步骤演示

6.参考


欢迎订阅

《★教程1:matlab入门100例》

《★教程2:fpga入门100例》

《★教程3:simulink入门60例》

​​​​​​《★教程4:FPGA/MATLAB/Simulink联合应用开发入门与进阶X例》

教程4·目录·

【教程4>第1章>第10节】FPGA浮点与定点设计应用,# 01·FPGA/MATLAB联合开发软件,fpga开发,fpga浮点运算

1.软件版本

vivado2019.2

2.FPGA浮点和定点仿真概述

       FPGA作为一种灵活且高效的硬件实现方式,在数字信号处理、控制系统等领域得到了广泛应用。在FPGA上进行浮点设计和定点设计时,需要根据算法特点、资源消耗和性能要求等因素进行权衡。在一般的设计过程中,FPGA的数据都以二进制方式参与运算,其为定点格式。如果用使用FPGA来表示浮点来进行运算。一般有以下几种方式:

      方法1:将小数数据进行量化,得到整数,然后再以定点方式进行运行。

      方式2:将二进制数据,分割为符号位,整数位,小数位,比如一个二进制数据的位宽为24位,最高位表示符号位,使用次高7位来表示小数的整数部分,低16位来表示小数的小数部分。比如:24'b00000011_00100000_00000000表示为小数3.125,其中小数部分0.125其计算过程为2^14/2^17得到,2^14即上述小数部分二进制对应的整数,2^17即为1对应的整数。

24'b10000011_00100000_00000000表示为小数-3.125。

     方式3:使用浮点运算IP核,如下图所示。

【教程4>第1章>第10节】FPGA浮点与定点设计应用,# 01·FPGA/MATLAB联合开发软件,fpga开发,fpga浮点运算

   方式1,本质还是定点运算,在本课程中,我们重点学习下上面的方式2和方式3.

3.FPGA浮点运算方式2

订阅过《★教程2:fpga入门100例》的读者,可以用【FPGA教程案例26】在FPGA中通过verilog来实现小数的基础运算_verilog 中使用小数-CSDN博客中的步骤再复习下。

没有订阅过的读者,我们按如下的步骤做一次操作学习。

先编写verilog主程序如下:

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2022/07/05 23:32:25
// Design Name: 
// Module Name: tops
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//
 
 
 
 
module tops(
input signed[23:0] x1,x2,
 
output signed[23:0]o_sum,
output signed[23:0]o_prod   
);
 
 
assign o_sum=x1+x2;
 
wire signed[47:0]w_prod;
assign w_prod=x1*x2;
assign o_prod=w_prod[39:16];
 
 
 
 
endmodule

        注意,加法计算可以直接相加得到。而乘法部分,我们需要分两个部分来看,首先是小数部分,16个位宽乘以16个位宽,将得到32个位宽的小数,因此,需要将最低的16个位宽去除。只保留高16位作为乘积的小数部分。而对于整数部分,8个位宽乘以8个位宽,将得到16个位宽的整数,这里,我们假设输入的整数较小,因此可以直接截取整数部分的低8位作为乘积的整数部分。因此,就有了程序中的assign o_prod=w_prod[39:16]的截取方法。       

        编写如下的testbench进行测试仿真:

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2022/07/05 23:33:06
// Design Name: 
// Module Name: test_tops
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//
 
 
module test_tops;
 
reg signed[23:0] x1,x2;
 
wire signed[23:0]o_sum;
wire signed[23:0]o_prod;  
 
tops tops_u(
.x1         (x1),
.x2         (x2),
.o_sum      (o_sum),
.o_prod     (o_prod)
);
 
initial
begin
x1 = 24'd0;
x2 = 24'd0;
#100
x1 = 24'b00000010_1100000000000000;
x2 = 24'b00000011_0010000000000000;
 
 
end
 
 
 
endmodule

得到如下的仿真结果:

【教程4>第1章>第10节】FPGA浮点与定点设计应用,# 01·FPGA/MATLAB联合开发软件,fpga开发,fpga浮点运算

如上图仿真结果可知,我们假设输入的小数是 

x1 = 24'b00000010_1100000000000000;
x2 = 24'b00000011_0010000000000000;

这两个小数对应的实际数值为2.75,和3.125,

其和o_sum为:    24'b00000101_1110000000000000;对应的实际数值为5.875,这说明小数加法计算正确。

其乘积o_prod为:24'b00001000_1001100000000000;对应的实际数值为8.5938,这说明小数乘法计算正确。通过对比,可以看到计算的正确性。

4.FPGA浮点运算方式3

       这里,我们主要学习浮点运算IP核的使用方式。首先定义IP核配置:

【教程4>第1章>第10节】FPGA浮点与定点设计应用,# 01·FPGA/MATLAB联合开发软件,fpga开发,fpga浮点运算

然后我们选择乘法器作为案例,如下图所示:

【教程4>第1章>第10节】FPGA浮点与定点设计应用,# 01·FPGA/MATLAB联合开发软件,fpga开发,fpga浮点运算

【教程4>第1章>第10节】FPGA浮点与定点设计应用,# 01·FPGA/MATLAB联合开发软件,fpga开发,fpga浮点运算

这个界面是设置整数和小数部分的位宽。这里设置为单精度single。

【教程4>第1章>第10节】FPGA浮点与定点设计应用,# 01·FPGA/MATLAB联合开发软件,fpga开发,fpga浮点运算

【教程4>第1章>第10节】FPGA浮点与定点设计应用,# 01·FPGA/MATLAB联合开发软件,fpga开发,fpga浮点运算

然后写一个程序进行调用ip核,程序如下图所示:

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2024/02/15 17:05:44
// Design Name: 
// Module Name: tops_float
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module tops_float(
input i_clk,
input signed[31:0] x1,x2,
 
 
output signed[31:0]o_prod   
    );
    
    
    
    
floating_point_0 your_instance_name (
  .aclk(i_clk),                                  // input wire aclk
  .s_axis_a_tvalid(1'b1),            // input wire s_axis_a_tvalid
  .s_axis_a_tdata(x1),              // input wire [31 : 0] s_axis_a_tdata
  .s_axis_b_tvalid(1'b1),            // input wire s_axis_b_tvalid
  .s_axis_b_tdata(x2),              // input wire [31 : 0] s_axis_b_tdata
  .m_axis_result_tvalid(),  // output wire m_axis_result_tvalid
  .m_axis_result_tdata(o_prod)    // output wire [31 : 0] m_axis_result_tdata
);
    
    

endmodule

定义testbench如下:

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2024/02/15 17:07:22
// Design Name: 
// Module Name: test_tops_float
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module test_tops_float;
reg i_clk;
reg signed[31:0] x1,x2;
wire signed[31:0]o_prod;  
 
tops_float tops_float_u(
.i_clk      (i_clk),
.x1         (x1),
.x2         (x2),
.o_prod     (o_prod)
);

initial
begin
i_clk = 1'b1;
x1 = 32'd0;
x2 = 32'd0;
#100
x1 = 32'h3F000000;//0.5
x2 = 32'h4019999A;//2.4


end
always #5 i_clk=~i_clk;
endmodule

程序中,我们定义单精度0.5的十六进制=32'h3F000000,2.4的十六进制=32'h4019999A

仿真结果如下:

【教程4>第1章>第10节】FPGA浮点与定点设计应用,# 01·FPGA/MATLAB联合开发软件,fpga开发,fpga浮点运算

结果为3F99999A,即对应单精度1.2,说明结果正确。

5.视频操作步骤演示

如果上述操作有什么不熟悉的地方,也可以参考如下的视频教程完成课程学习。

B站:【教程4>第1章>第10节】FPGA浮点与定点设计应用_哔哩哔哩_bilibili

6.参考

[1]Li Shuo,李硕.基于FPGA的定点实数除法器设计[C]//2012云计算与信息技术应用学术会议.2012.

[2]王冬冬.基于FPGA的浮点运算器设计[D].大连海事大学,2009.DOI:CNKI:CDMD:2.2009.107781.

【FPGA教程案例26】在FPGA中通过verilog来实现小数的基础运算_verilog 中使用小数-CSDN博客[3]【FPGA教程案例26】在FPGA中通过verilog来实现小数的基础运算_verilog 中使用小数-CSDN博客文章来源地址https://www.toymoban.com/news/detail-826042.html

到了这里,关于【教程4>第1章>第10节】FPGA浮点与定点设计应用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于fpga的图像处理之图像灰度化处理(Vivado+Modelsim+Matlab联合仿真验证)

    微信公众号上线,搜索公众号 小灰灰的FPGA ,关注可获取相关源码,定期更新有关FPGA的项目以及开源项目源码,包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 源码工程链接 https://download.csdn.net/download/m0_50111463/88529260

    2024年02月10日
    浏览(59)
  • [ZYNQ]开发之MATALB与FPGA联合仿真平台设计

    本实验在之前两篇文章的基础上设计的MATLAB与FPGA联合仿真平台设计,主要用于在MATLAB于FPGA之前提供收发数据的通道。该实验的应用背景为极化码的编译码流程,极化码的编译码的仿真流程如下: [ZYNQ]开发之基于 AN108 模块的ADC 采集以太网传输_Laid-back guy的博客-CSDN博客 [ZYNQ

    2024年02月04日
    浏览(58)
  • 学习笔记01:ASIC、FPGA、SOC设计流程比较

    图1:ASIC设计流程 图2:ASIC设计流程 图3:FPGA设计流程 图4:Soc设计流程 SoC设计与传统的ASIC设计最大的不同在于以下两方面:①是SoC设计更需要了解整个系统的应用,定义出合理的芯片架构,使得软硬件配合达到系统最佳工作状态,如 总线的设计 使得总线传输吞吐量满足操

    2024年04月29日
    浏览(64)
  • 基于 ARM SoC 的视频传输系统设计(10-01-01)引言

    新芯设计:专注,积累,探索,挑战   对于 《基于 SoC 的卷积神经网络车牌识别系统设计》 这个极具竞争的项目而言,其主要是 通过 CPU 软核 IP 在纯 FPGA 平台上构建一个 AI SoC 卷积神经网络车牌识别系统,其中,缩放、填充层、卷积层、ReLU、池化层、全连接层 IP 都是 V

    2024年01月25日
    浏览(35)
  • Win10/11平台OBS-Studio 源码联合QT6.3和VS2019编译教程

    本文默认编译64位程序。 下载源码可以通过Git下载,也可以直接下载zip文件。 通过Git下载 打开OBS-Studio的GitHub编译安装指导页[obs-studio wiki](Build Instructions For Windows · obsproject/obs-studio Wiki (github.com)),按照Option B: Custom Windows builds方法安装(当然,这种方法需要你提前装好[Git](

    2024年02月10日
    浏览(65)
  • FPGA开发必备技能:MATLAB应用

    FPGA开发必备技能:MATLAB应用 FPGA作为一种高性能的可编程逻辑器件,在各个领域都有着广泛的应用。而MATLAB作为一个重要的科学计算软件,也能够在FPGA开发中发挥巨大的作用。本文将介绍如何使用MATLAB来进行FPGA开发。 首先,我们需要了解MATLAB的特点和功能。MATLAB是一款强大

    2024年03月16日
    浏览(48)
  • 数字信号处理-10-并行FIR滤波器MATLAB与FPGA实现

    本文介绍了设计滤波器的FPGA实现步骤,并结合杜勇老师的书籍中的并行FIR滤波器部分进行一步步实现硬件设计,对书中的架构做了复现以及解读,并进行了仿真验证。 FIR滤波器的结构形式时,介绍了直接型、级联型、频率取样型和快速卷积型4种。在FPGA实现时,最常用的是最

    2023年04月09日
    浏览(48)
  • FPGA 设计中经常犯的 10 个错误

    本文列出了FPGA设计中常见的十个错误。我们收集了 FPGA 工程师在其设计中犯的 10 个最常见错误,并提供了解决方案的建议和替代方案。本文假定读者已经具备 RTL 设计和数字电路方面的基础。接下来让我们深入探讨在FPGA 设计中要避免的 10 大错误。 FPGA 设计适用于同步系统,

    2024年02月04日
    浏览(42)
  • 基于FPGA的脉冲压缩设计(Matlab+vivado)

    前言: 本科学了四年机械,后面转头去了电子信息读研,以FPGA的脉压入手,在从零开始的路上CSDN对我的帮助很大,现整理所学,与诸君共勉。本文不少代码均是参考CSDN上的前辈们一步一步理解做出来的,如有冒犯之处,烦请谅解。 目录 一:脉冲压缩原理介绍 1.我们简单了

    2024年01月19日
    浏览(41)
  • FPGA项目(10)——基于FPGA的倒计时显示电路的设计与仿真

            本次做的题目是:基于FPGA的倒计时显示电路设计,         题目要求如下:         详细要求如下:         本次设计的代码通过了仿真。(用的是quartus自带的仿真器)         这次设计分为两个模块,一个是倒计时的控制模块,另一个是数码管

    2024年02月11日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包