中科亿海微除法器(DIVIDE)

技术背景

 技术概述

        FPGA实现除法运算是一个比较复杂的过程,因为硬件逻辑与软件程序的区别。如果其中一个操作数为常数,可以通过简单的移位与求和操作代替,但用硬件逻辑完成两变量间除法运算会占用较多的资源,电路结构复杂,且通常无法在一个时钟周期内完成。因此,FPGA实现除法运算并不是一个“/”号可以解决的。总体来说,在FPGA中做基本的数学运算没什么难度,即使是指数、对数、开根号之类的复杂运算也有浮点IP Core的支持。如果需要实现复杂算法,可以采用HLS方式开发,仅用于算法验证。

 技术应用场景

        FPGA除法器技术主要应用于数字信号处理、通信系统、图像处理、高速计算机、测量仪器等领域。在这些领域中,需要对数据进行除法运算,而FPGA除法器可以提供高速、低功耗、低成本的除法运算解决方案。例如,在通信系统中,需要对信号进行解调、解码等操作,这些操作中需要进行除法运算,而FPGA除法器可以提供高效的解决方案。在图像处理中,需要对图像进行缩放、旋转等操作,这些操作中也需要进行除法运算,而FPGA除法器可以提供高速的图像处理能力。此外,FPGA除法器还可以应用于各种算法中,例如卷积神经网络、快速傅里叶变换等。

 优势和不足

优势:

  1. FPGA除法器可以实现高精度的除法运算,比如非恢复余数除法器可以实现更高的除法精度。
  2. FPGA除法器可以在数字电路中快速执行除法运算,比软件实现更快速。
  3. FPGA除法器可以根据需要进行定制化设计,满足不同应用场景的需求。

不足:

  1. FPGA除法器的设计和实现比较复杂,需要专业的知识和技能。
  2. FPGA除法器的资源占用比较大,需要占用较多的FPGA资源。
  3. FPGA除法器的功耗比较高,需要考虑功耗管理和优化。

技术实现

 技术原理和实现方法

        FPGA除法器是一种基于FPGA芯片实现的除法器,其原理是通过将被除数不断减去除数,直到被除数小于除数为止,每次减法操作都会使商数加1,最终被除数减去的结果就是余数。

 技术实现案例和效果展示

        实现方法一:开发一套除法器算法呢。

module DIVISION(input	wire	        	CLK,		    //系统时钟64MHZinput	wire				CCLK,		    //除法运算时钟128MHzinput	wire	        	RST_N,      	//全局复位input	wire				Start,			//除法开始input	wire	[63:0]	    iDividend,		//被除数input   wire	[31:0]	    iDivisor,		//除数output	reg	    [63:0]	    Quotient,		//商output	reg	    [31:0]	    Reminder,		//余数output	reg				    Done		    //计算完成);//=======================================================
//	REG/WIRE 声明
//=======================================================
reg	[6:0]		i;
reg				Sign;			//被除数符号
reg	[63:0]	    Dividend;	    //符号转换被除数
reg	[96:0]	    Temp_D;
reg	[32:0]	    Temp_S;//=======================================================
//	移位减除法
//=======================================================
always@(posedge CCLK or negedge RST_N) beginif(!RST_N) begini 			= 7'h0;Dividend	= 64'h0;Sign		= 1'b0;Temp_D	= 97'h0;Temp_S	= 33'h0;Done		= 1'b0;end else case( i )0:  if(Start) begin							    //被除数符号判断及绝对值获取if(iDividend[63]) beginSign			= 1'b1;Dividend 	= ~iDividend + 1'b1;end else beginSign			= 1'b0;Dividend 	= iDividend;endi 			= i + 1'b1;Done 		= 1'b0;end1:  begin									    //计算数据锁存Temp_D 	= {33'h0,Dividend};Temp_S	= {1'b0,iDivisor};i 			= i + 1'b1;end66: begin Done = 1'b1; i = i + 1'b1; end		//计算完成67: begin i = 0; enddefault : begin								    //移位减过程Temp_D  = {Temp_D[95:0],1'b0};if(Temp_D[96:64] >= Temp_S)Temp_D = ({(Temp_D[96:64] - Temp_S),Temp_D[63:0]}) + 1'b1;else Temp_D = Temp_D;i = i + 1'b1;endendcase
end//运算结果锁存
always@(posedge CLK or negedge RST_N) beginif(!RST_N) beginQuotient <= 64'd0;Reminder <= 32'd0;end else if(Done) beginif(Sign) beginQuotient <= ~Temp_D[63:0] + 1'b1;Reminder <= ~Temp_D[95:64] + 1'b1;end else beginQuotient <= Temp_D[63:0];Reminder <= Temp_D[95:64];endend
endendmodule

        实现方式二:使用IP核操作。

`timescale 1 ps/ 1 ps
//
// Company:
// Engineer:
//
// Create Date: 11-26-2023 17:11:11
// Design Name:
// Module Name: top
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Additional Comments:
//
//module top(input	wire	clk);wire		[7:0]   denom;wire		[63:0]  numer;wire	[63:0]  quotient;wire	[7:0]   remain;assign numer	=	64'd1024;assign denom	=	8'd2;lpm_divide_1 u_1(.clock			(clk			),.denom			(denom			),.numer			(numer			),.quotient		(quotient		),.remain			(remain			));endmodule

 仿真结果

总结

        使用IP核可以减少设计人员的工作量,因为IP核已经经过验证和测试,可以直接使用,而不需要重新设计和验证。提高性能:使用IP核可以提高设计的性能,因为IP核是专门为特定的任务设计的,可以充分利用FPGA的硬件资源,从而提高性能。降低功耗:使用IP核可以降低功耗,因为IP核是经过优化的,可以使用更少的资源来完成任务,从而降低功耗。提高可靠性:使用IP核可以提高设计的可靠性,因为IP核已经经过验证和测试,可以保证其正确性和稳定性。

引用

“用于加密应用的基于 FPGA 的高速分频器”,IEEE Transactions on Very Large Scale Integration (VLSI) Systems,2015 年。

“基于FPGA的高速分频器的设计与实现”,《国际可重构计算杂志》,2016年。

“用于数字信号处理应用的基于 FPGA 的高性能分频器”,IEEE Transactions on Circuits and Systems II:Express Briefs,2017 年。

“使用Verilog HDL设计和实现基于FPGA的高速分频器”,国际电子与通信工程与技术杂志,2018年。

“一种用于高速应用的新型基于FPGA的分频器”,《信号处理系统学报》,2019年。

FPGA64位除法器(Verilog)_verilog取余资源-CSDN文库

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

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

相关文章

【虚拟机Ubuntu 18.04配置网络】

虚拟机Ubuntu 18.04配置网络 1.配置网络连接方式,查看自己网关 2.修改主机名 3.修改系统配置1.配置网络连接方式,查看自己网关 选择虚拟机镜像设置网络连接模式,可以选择桥接或者NAT连接(我这里选择是NAT连接) 确定自己网关&#xff0c;可以在虚拟机 -》 编辑 -》虚拟网络编…

Android 10.0 mtp模式下连接pc后显示的文件夹禁止删除copy重命名功能实现

1.前言 在10.0的系统开发中,usb连接pc端的时候有好几种模式,在做otg连接pc端的时候,改成mtp模式的时候,在pc端可以看到产品设备 的显示的文件夹的内容,对于产品设备里面的文件在pc端禁止做删除重命名拷贝等操作功能的实现 2.mtp模式下连接pc后显示的文件夹禁止删除copy重命…

【计算机视觉】【图像处理综合应用】路沿检测

实验内容&#xff1a;针对给定的视频&#xff0c;利用图像处理基本方法实现道路路沿的检测&#xff1b; 提示&#xff1a;可利用Hough变换进行线检测&#xff0c;融合路沿的结构信息实现路沿边界定位&#xff08;图中红色的点位置&#xff09;。 处理视频文件 处理视频文件的主…

springboot函数式web

1.通常是路由(请求路径)业务 2.函数式web&#xff1a;路由和业务分离 一个configure类 配置bean 路由等 实现业务逻辑 这样实现了业务和路由的分离

Spring MVC程序开发

所谓的Spring MVC程序开发&#xff0c;其实也是一个Spring Boot项目。 MVC是Model View Controller的缩写&#xff0c;它是软件工程中的一种软件架构模式&#xff0c;它把软件系统分为模型&#xff0c;视图&#xff0c;控制器三个部分。 项目使用什么技术实现的&#xff1f;&a…

【nowcoder】BM3 链表中的节点每k个一组翻转

题目&#xff1a; 题目分析&#xff1a; 题目解析转载&#xff1a; 代码实现&#xff1a; package BMP3;import java.util.List;class ListNode {int val;ListNode next null;public ListNode(int val) {this.val val;} } public class BM3 {/*** 代码中的类名、方法名、参…

一般将来时

一般将来时 概念 表示将要发生的动作或打算、计划准备做某事 时间 tomorrow 明天 the day after tomorrow 后天 next week 下周 next weekend 下周末 next month 下个月 next year 明年 ...句子结构 主语 be&#xff08;am/is/are&#xff09;going to do … 计划,…

B树你需要了解一下

介绍B树的度数主要特点应用场景时间复杂度代码示例拓展 介绍 B树&#xff08;B-tree&#xff09;是一种自平衡的树&#xff0c;能够保持数据有序&#xff0c;常被用于数据库和文件系统的实现。 B树可以看作是一般化的二叉查找树&#xff0c;它允许拥有多于2个子节点。与自平衡…

2023.11.25 关于 MyBatis 的配置与使用

目录 引言 MyBatis 介绍 掌握两个点 在框架中的定位 创建数据库 配置 MyBatis 引入依赖 配置文件 创建实体类 构建 Mapper 层代码实现 添加 mapper 接口 添加 UserMapper.xml 实现 Service 层 实现 Controller 层 最终测验 阅读下面文章之前建议了解并创建…

树状数组专题

折叠 区间修改&#xff0c;区间查询&#xff0c;这一类题通常都可以使用线段树解决&#xff0c;但对于此题&#xff0c;树状数组同样可以&#xff0c;而且常数较小&#xff0c;代码简单。 思路&#xff1a; 考虑使用树状数组去维护差分数组&#xff0c;即对于 a i a_i ai​,我们…

使用qemu调试arm内核

参考书籍《奔跑吧Linux内核》–笨叔 下载Linux-5.0源码 https://benshushu.coding.net/public/runninglinuxkernel_5.0/runninglinuxkernel_5.0/git/files或者直接git源码 git clone https://e.coding.net/benshushu/runninglinuxkernel_5.0/runninglinuxkernel_5.0.git安装必…

【React】Memo

组件重新渲染时缓存计算的结果。 实例&#xff1a;count1计算斐波那契数列&#xff0c;count2和count1可以触发数值变化。使用memo可以使只有在count1变化时触发斐波那契数列计算函数&#xff0c;而count2变化时不触发斐波那契数列计算函数。 import { useMemo } from "r…

SpringCloud微服务网关Gateway:gateway基本实现、断言工厂、过滤器工厂、浏览器同源策略、跨域问题解决方案

Gateway网关 Spring Cloud Gateway 是 Spring Cloud 的一个全新项目&#xff0c;该项目是基于 Spring 5.0&#xff0c;Spring Boot 2.0和Project Reactor 等响应式编程和事件流技术开发的网关&#xff0c;它旨在为微服务架构提供一种简单有效的统一的 API路由管理方式 为什么…

【面试题】介绍一下类加载过程,什么是双亲委派模型

背景 java 文件在运行之前&#xff0c;必须经过编译和类加载两个过程&#xff1a; 编译过程&#xff1a;把 .java 文件 编译成 .class 文件类加载过程&#xff1a;把 .class 文件加载到 JVM 内存里&#xff0c;加载完成后就会得到一个 class 对象&#xff0c;我们就可以使用 n…

Vue快速实践总结 · 上篇

文章目录 模板语法数据绑定事件处理计算属性监视属性&#xff08;监听器&#xff09;条件渲染列表渲染数据监视原理内置指令总结生命周期组件化编程组件使用步骤组件的嵌套this指向单文件组件ref、props 脚手架(Vue CLI)render函数 参考自己的Vue专栏以及Vue官方文档 模板语法 …

Java PriorityQueue

一般情况下, 我们使用队列是为了能够建造队列的先进先出 (First-In-First-Out) 模式的, 达到一种资源的公平分配, 先到达的任务 (元素) 先处理, 但有时需要在队列中基于优先级处理对象。 存入队列中的任务 (元素) 具有优先级, 需要根据优先级修复里面的数据。而在 JDK 1.5 引入…

Java 泛型知识总结

1、基础知识 泛型是 JDK5 引入的参数化类型特性&#xff0c;所谓参数化类型就是把类型当成参数一样传递&#xff0c;它使得一个类型在定义类、接口和方法时成为一个参数&#xff0c;类似于方法声明中的形式参数&#xff0c;不同之处在于形式参数的输入是值&#xff0c;而类型形…

微机原理_5

一、单项选择题(本大题共15小题,每小题3分,共45分。在每小题给出的四个备选项中,选出一个正确的答案,请将选定的答案填涂在答题纸的相应位置上。) 8086微处理器CLK引脚输入时钟信号是由(提供。 A. 8284 B. 8288 C.8287 D. 8289 2.下面4个寄存器中,不能作为间接寻址的寄存器是(…

Java + openCV更换证件照背景色

最近在小红书上看到很多更换证件照背景色的需求&#xff0c;联想到以前自己也更换过证件照背景色而且还是付费的&#xff0c;碰巧最近在看一本书《JavaOpenCV高效入门》&#xff0c;于是查找资料&#xff0c;找到了通过技术解决这个需求的办法。 先看效果图&#xff08;图片来自…

62 权限提升-烂土豆dll劫持引号路径服务权限

目录 演示案例:Win2012-烂士豆配合令牌窃取提权-Web权限Win2012-DLL劫持提权应用配合MSF-Web权限Win2012-不安全的服务权限配合MSF-本地权限Win2012-不带引号服务路径配合MSF-Web&#xff0c;本地权限补充说明: dll劫持提权及AlwaysInstallElevated等说明关于Windows相关知识点…