中科亿海微除法器(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.hqwc.cn/news/223043.html

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

相关文章

了解静态测试?

静态测试是一种软件测试方法&#xff0c;它主要通过分析软件或代码的静态属性来检查潜在的问题和缺陷&#xff0c;而无需实际执行程序。这种测试方法侧重于检查源代码和其他软件文档&#xff0c;以发现错误并提高软件质量。 为什么要做静态测试&#xff1f; 提前发现和修复错…

简易版王者荣耀

所有包和类 GameFrame类 package newKingOfHonor;import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.io.File; import java.util.ArrayList;im…

C语言你爱我么?(ZZULIOJ 1205:你爱我么?)

题目描述 LCY买个n束花准备送给她暗恋的女生&#xff0c;但是他不知道这个女生是否喜欢他。这时候一个算命先生告诉他让他查花瓣数&#xff0c;第一个花瓣表示"爱"&#xff0c;第二个花瓣表示"不爱"&#xff0c;第三个花瓣表示"爱"..... 为了使最…

为啥网络安全那么缺人,但很多人却找不到工作?

文章目录 一、学校的偏向于学术二、学的东西太基础三、不上班行不行 为什么网络安全的人才缺口那么大&#xff0c;但是大学毕业能找到网安工作的人却很少&#xff0c;就连招聘都没有其他岗位多&#xff1f; 明明央视都说了网络安全的人才缺口还有300多万&#xff0c;现在找不到…

鸿蒙应用开发-初见:ArkTS

作者&#xff1a;HarderCoder ArkTS ArkTS围绕应用开发在 TypeScript &#xff08;简称TS&#xff09;生态基础上做了进一步扩展&#xff0c;继承了TS的所有特性&#xff0c;是TS的超集 ArkTS在TS的基础上扩展了struct和很多的装饰器以达到描述UI和状态管理的目的 基本语法 …

零基础编程入门视频教程,零基础编程从哪学起,分享中文编程工具构件实例

零基础编程入门视频教程&#xff0c;零基础编程从哪学起&#xff0c;分享中文编程工具构件实例 1、零基础编程入门视频教程&#xff0c;系统化编程教程链接 https://jywxz.blog.csdn.net/article/details/134073098?spm1001.2014.3001.5502 2、零基础编程从哪学起 建议初学…

【C语言】深入理解数据类型转换与运算

文章目录 1.数据类型转换在分析源程序之前&#xff0c;我们需要了解几个基本概念&#xff1a;现在来分析源程序中的变量及其对应的十进制真值以及扩展操作方式&#xff1a; 1.1. short si -32768;1.2. unsigned short usi si;1.3. int i si;1.4. unsigned ui usi; 2&#x…

TIME_WAIT状态套接字重新使用

《TIME_WAIT相关知识》里边有相关理论知识。 《TIME_WAIT状态TCP连接导致套接字无法重用实验》有相关实验。 现代Linux的TCP协议栈已经做了许多升级&#xff0c;所以可以让我们直接重用TIME_WAIT状态套接字而不会引起问题。下边是优化的内容&#xff1a; 1.新连接的SYN告知序列…

在Spring Boot中隔离@Async异步任务的线程池

在异步任务执行的时候&#xff0c;我们知道其背后都有一个线程池来执行任务&#xff0c;但是为了控制异步任务的并发不影响到应用的正常运作&#xff0c;我们需要对线程池做好相关的配置&#xff0c;以防资源过度使用。这个时候我们就考虑将线程池进行隔离了。 那么我们为啥要…

C语言生成随机数的方法

文章目录 一、rand函数&#xff1a;二、srand函数&#xff1a;三、time函数&#xff1a;四、生成范围随机数公式&#xff1a;五、实战练习&#xff1a;总结 一、rand函数&#xff1a; int rand( void ); 我们先来看一下rand函数的基本信息&#xff1a; rand函数根据种子生成随…

C++相关闲碎记录(1)

1、C绘制爱心图像 #include <iostream> #include <cmath>using namespace std;int main() {// 心形曲线公式 (x^2 y^2 - a)^3 - x^2*y^3 0double a 1;double bound 1.5 * sqrt(a);double step 0.05;for (double y bound; y > -bound; y - step) {for (do…

【面试题】JavaScript高级循环方法

给大家推荐一个实用面试题库 1、前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;web前端面试题库 除了for循环♻️&#xff0c;for-of,for-each循环♻️也是一个不错的选择 先说for-of循环♻️ 认识for-of循环♻️…