fpga实操训练(硬件乘法器)

news2025/1/9 16:24:52

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        fpga上面的资源一般分成lut、pin、dff、dsp、pll。至于rom、ram、fifo,一般也是基于dff和lut来创建的,之前我们也讨论过。今天正好可以讨论下乘法器的使用。

        硬件乘法器在fpga上也是紧俏资源。对于fpga来说,加减运算、逻辑运算、移位运算,这些都是比较简单的。但是如果涉及到乘法,就比较麻烦一点了。而除法运算,对于fpga的开发者来说,一般也是转换成乘法运算。至于说浮点运算,通常是不会涉及的,这也不是fpga的强项所在。

1、创建一个ip_dsp工程

        这一步骤和之前其他工程的创建方法没有太多的不同。

2、调用lpm_mult乘法器

        在ip catalog中输入mult,在提示的选项中选择lpm_mult,

         命名好文件之后,就可以开始配置了。这里面最重要的部分就是设置字节的宽度,

         设置好宽度信息之后,其他部分都采用默认配置即可。

3、准备测试verilog文件

        有了ip之后,下面需要做的工作就是开始编写测试verilog文件,


module top(clk, rst);

input clk;
input rst;

wire clk;
wire rst;

reg[7:0] data1;
reg[7:0] data2;
wire[15:0] result;


always@(posedge clk or negedge rst)
	if(!rst)
		data1 <= 8'd0;
	else
		data1 <= data1 + 1'b1;
		
always@(posedge clk or negedge rst)
	if(!rst)
		data2 <= 8'd0;
	else
		data2 <= data2 + 1'b1;
		
lpm_mult_demo lpm_mult_demo0(
	.dataa(data1),
	.datab(data2),
	.result(result)
);


endmodule

        测试的方法比较简单,就是data1和data2不断自增,然后查看lpm_mult_demo的结果是多少。如果结果正确,那代表ip调用没有问题;反之则代表ip使用上面存在错误。这个时候,如果编译的话,通过compile report就会发现dsp资源确实被占用了,

4、配置sdc文件

        前面说过,在fpga过程中,有必要调试编译器哪一个pin是时钟,时钟的频率是多少,这样综合器才能帮助我们做更好的优化和检查。

# Clock constraints

create_clock -name "clk" -period 20.000ns [get_ports {clk}]


# Automatically constrain PLL and other generated clocks
derive_pll_clocks -create_base_clocks

# Automatically calculate clock uncertainty to jitter and other effects.
derive_clock_uncertainty

# tsu/th constraints

# tco constraints

# tpd constraints

        有了这一步,就可以在compile report中获取到当前最大允许的时钟频率、最差运行路径这些信息了。 比如下图,第一张是1.2v、室温85度时的最大允许频率,

         最差路径信息,

5、配置pin引脚

        pin的引脚部分只使用到了clk和rst,所以只要绑定到E1和N13即可。

6、配置stc文件

        因为整个fpga工程没有信号输出,所以如果需要验证我们的测试有没有成功,有必要借助于signal tap来完成这个事情。

7、测试和验证

        等这一切都准备好之后,就可以生成sof文件,烧入到fpga里面查看一下运行情况了。

        通过观察可以看到一个有意义的现象,那就是和rom、ram不同,硬件乘法器是会立马给出运算结果的。比如说,当data1和data2都是120的时候,这个时候结果14400就出来了。这和之前的ip会在下一个节拍才给出结果是完全不一样的,这是需要注意的地方。

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

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

相关文章

ABAP 之ALV展示及下钻弹窗数据页面

序 HELLO, 这里是百里一个学习中的ABAPER,这里记录工作学习中遇到的bug,知识内容等内容.今天讲的是在工作中经常会使用的数据下钻,通过跳出小界面的方式展示关联数据.今天结合工作经验这里做下技术总结. 下钻简介 在ALV报表展示中.会出现关键字段下钻,展示某个界面或者系统自…

C语言基础--操作符详解

文章目录一、操作符1. 算数操作符2. 移位操作符&#xff08;1&#xff09;右移操作符举例补充&#xff08;2&#xff09;左移操作符举例分析&#xff08;3&#xff09;警告3.位操作符&#xff08;1&#xff09;按位与&#xff08;2&#xff09;按位或&#xff08;3&#xff09;…

小程序之后台交互--个人中心

目录一、微信登录流程简介二、微信用户信息获取1、index.js2、index.wxml三、微信登录流程代码详解1、后台准备①导入微信小程序SDK②application.yml③WxProperties④WxConfig⑤WxAuthController1、登录-小程序①login.js②user.js③util.js四、emoji的存储1、修改配置文件my.…

ArcGIS基础实验操作100例--实验24提取栅格独立格网面

本实验专栏来自于汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 基础编辑篇--实验24 提取栅格独立格网面 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff08;…

VMware 中 克隆多台虚拟机 快速创建虚拟机集群

我们在实际开发中可能会涉及到多台虚拟机&#xff0c;所以我们这里就模仿企业的方式进行多台虚拟机的操作方法&#xff1a; 我们现在就来学习一下如何用一台已有的虚拟机克隆出多台虚拟机。 我们第一步先来进行虚拟机的克隆&#xff1a; 我们现在就有了3太虚拟机了。 启动第一…

excel超链接应用:快速生成目录的几个方法-下

在上篇文章中&#xff0c;我们说到了基本的制作目录的方法&#xff0c;以及用宏表函数和超链接函数制作目录、用快捷键CTRLF制作目录的方法。今天我们要分享的另外三种方法&#xff0c;保证小伙伴们闻所未闻见所未见&#xff0c;一个公式都不用&#xff0c;就能完成目录的制作&…

镜头分辨率的计算和理解

镜头分辨力 计算和理解 1、镜头分辨率 镜头的分辨率是指在成像平面上 1 毫米间距内能分辨开的黑白相间的线条对数&#xff0c;单位是“线对/毫米”&#xff08; lp/mm&#xff0c;line-pairs/mm &#xff09; 最小能分辨的尺寸是线对数的2倍倒数。 例如&#xff1a;镜头分辨率…

Spark 3.0 - 16.ML SVD 奇异值分解理论与实战

目录 一.引言 二.奇异值分解理论 1.行矩阵 RowMatrix 2.奇异值分解算法 三.奇异值分解实战 1.构建 RowMatrix 2.奇异值分解 SVD 四.总结 一.引言 奇异值分解是矩阵分解计算的一种常用方法&#xff0c;矩阵分解主要用于数据降维&#xff0c;通过将高维的数据映射到低维…

Navicat 16 中改进了的协同合作

几年前&#xff0c;当 Navicat 团队加入 Navicat Cloud 协同合作工具时&#xff0c;几乎没有人知道一个全球大流行的疫情会使协同合作成为大多数组织的重要组成部分&#xff0c;尤其是那些提供任何信息技术&#xff08;IT&#xff09;相关服务的组织。在 2021 年的最后几天&…

ArcGIS基础实验操作100例--实验26创建多分辨率DEM

本实验专栏来自于汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 基础编辑篇--实验26 创建多分辨率DEM 目录 一、实验背景 二、实验数据 三、实验步骤 方法一&#xff…

嵌入式C语言设计模式 --- 关于工厂模式的总结

前面三篇关于工厂模式的文章,主要介绍了三种工厂模式,分别是:简单工厂模式、工厂方法模式、抽象工厂模式。 关于这三种工厂模式,都各有利弊,应该根据不同的业务开发场景进行选择使用。 图片来源:网络 简单工厂模式 是最容易理解的一种设计模式,简单工厂模式不属于23种…

Spring循环依赖探究

1. 前言 Spring在较新版本中已经默认不允许bean之间发生「循环依赖」了&#xff0c;如果检测到循环依赖&#xff0c;容器启动时将会报错&#xff0c;此时可以通过配置来允许循环依赖。 spring.main.allow-circular-referencestrue什么是循环依赖&#xff1f; 循环依赖也叫循环…

【Python百日进阶-数据分析】Day143 - plotly箱线图:px.box()实例

文章目录四、实例4.1 plotly.express箱线图4.1.1 基本箱线图4.1.2 为 x的每个值绘制一个箱线图4.1.3 显示基础数据4.1.4 选择计算四分位数的算法4.1.5 四分位数算法之间的区别4.1.6 风格箱线图4.1.7 Dash中的箱线图四、实例 箱线图是变量通过其四分位数分布的统计表示。盒子的…

并发编程——3.共享模型之管程

目录3.共享模型之管程3.1.共享带来的问题3.1.1.Java中的体现3.1.2.问题分析3.1.3.临界区 (Critical Section)3.1.4.竞态条件 (Race Condition)3.2.synchronized 解决方案3.3.方法上的 synchronized3.4.变量的线程安全分析3.4.1.成员变量和静态变量是否线程安全&#xff1f;3.4.…

SpringBoot+VUE前后端分离项目学习笔记 - 【07 SpringBoot实现增删改查】

增删改查代码编写 UserController.java package com.zj.demo.controller;import com.zj.demo.entity.User; import com.zj.demo.mapper.UserMapper; import com.zj.demo.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.sp…

CVPR 2017|Deep Feature Flow for Video Recognition论文复现(pytorch版)

&#x1f3c6;引言&#xff1a;深度卷积神经网络在图像识别任务中取得了巨大的成功。然而&#xff0c;将最先进的图像识别网络转移到视频上并非易事&#xff0c;因为每帧评估速度太慢且负担不起。我们提出了一种快速准确的视频识别框架——深度特征流DFF。它只在稀疏关键帧上运…

数据结构与算法_五大算法之--回溯算法

1 回溯算法 回溯算法具有通用性&#xff0c;但是算法的效率不高&#xff0c;通常可以通过剪枝等操作提高算法的效率。 算法思想&#xff1a; 在包含问题的所有解空间树中&#xff0c;按照深度优先搜索的策略&#xff0c;从根节点出发&#xff0c;深度搜索解空间树。当搜索到某…

APSIM作物生长模型学习

由于研究需要&#xff0c;将对APSIM模型使用进行一定学习&#xff0c;特做此笔记&#xff0c;也供该模型的初学者共同进步。 首先是版本选择&#xff0c;这个模型发展较长&#xff0c;有经典的classic版本和次世代版本&#xff0c;而经过实际验证&#xff0c;次世代版本和经典版…

RHCSA 第六天笔记

网络配置 1&#xff0c;ip 命令 ip a 2,修改配置文件&#xff08;不推荐&#xff09; 3&#xff0c;nmcli命令 4&#xff0c;nmtui命令 5&#xff0c;cockpit 网络接口是指网络中的计算机或网络设备与其他设备实现通讯的进出口。这里&#xff0c;主要是指计算机的网络接口即网…

学习笔记之Vue组件化编程(二)

Vue组件化编程&#xff08;二&#xff09;Vue组件化编程一、模块与组件&#xff0c;模块化与组件化1.1 对组件的理解1.2 模块1.3 组件1.4 模块化1.5 组件化&#xff08;二&#xff09;Vue组件化编程 一、模块与组件&#xff0c;模块化与组件化 1.1 对组件的理解 在传统式编写…