FPGA流水线除法器(Verilog)原理及实现

2023-11-01

FPGA流水线除法器(Verilog)原理及实现

流水线除法器原理

  除法器的计算过程如下图所示。
在这里插入图片描述

计算步骤

假设数值的位宽为N。
Step1:分别将被除数和除数扩展至原来2倍位宽(2N),被除数在其左边补N位0,除数在其右边补N位0;
Step2:将被除数依次左移(每次左移1位),末位补数值(该数值为被除数高N位与除数高N位的商),高N位为被除数高N位与除数高N位的余数。移位执行N次,执行N次后,进入Step3;
Step3:此时被除数的低N位为计算得到的商,被除数的高N位为计算得到的余数。

流水线除法器Verilog代码

module pipeline_divider
#(
	parameter		N = 8
)
(
	input					clk		,	//时钟信号
	input					rst_n	,	//复位信号
	input					start	,	//开始信号
	input		[N-1:0]		dividend,	//被除数
	input		[N-1:0]		divisor	,	//除数
	
	output		[N-1:0]		quotient	,	//商
	output		[N-1:0]		remainder	,	//余数
	output					finish			//计算结束信号
);

//============================================
//                  变量声明
//============================================

//------------------内部变量------------------
reg		[2*N-1:0]		dividend_temp ;
reg		[2*N-1:0]		divisor_temp;
reg						finish_temp;
reg						state;
reg		[$clog2(N):0]	cnt;

//-----------------状态机状态-----------------
parameter	Init = 'd0;
parameter	Calc = 'd1;

//============================================
//                流水线除法器
//============================================

always @(posedge clk or negedge rst_n) begin
	if(!rst_n) begin
		dividend_temp <= 0;
		divisor_temp <= 0;
		finish_temp <= 0;
		cnt <= 0;
		state <= Init;
	end
	else begin
		case(state)
			Init:
				begin
					if(start) begin
						cnt <= 0;
						finish_temp <= 0;
						dividend_temp <= {{N{1'b0}},dividend};
						divisor_temp <= {divisor,{N{1'b0}}};
						state <= Calc;
					end
				end
			Calc:
				begin
					if(cnt == N) begin
						finish_temp <= 1'b1;
						state <= Init;
					end
					else begin
						if(dividend_temp[2*N-2:N-1] >= divisor_temp[2*N-1:N]) begin
							dividend_temp <= {dividend_temp[2*N-2:0],1'b0} - divisor_temp + 1'b1;
						end
						else begin
							dividend_temp <= {dividend_temp[2*N-2:0],1'b0};
						end
						cnt <= cnt + 1'b1;
					end
				end
		endcase
	end
	
end

//============================================
//                	模块输出
//============================================
assign	finish = finish_temp;	
assign	quotient = finish ? dividend_temp[N-1:0] : 0;
assign	remainder = finish ? dividend_temp[2*N-1:N] : 0;


endmodule

Test_Bench

   这里简单的写个测试文件对流水线除法器进行功能测试,判断是否符合预期的计算结果。

`timescale 1ns/1ps
module tb_pipeline_divider();

parameter		N = 8;
reg		clk,rst_n,start;
reg		[N-1:0]		dividend;	//被除数
reg		[N-1:0]		divisor	;	//除数
wire	[N-1:0]		quotient;
wire	[N-1:0]		remainder;
wire				finish;

initial begin
	clk = 1'b0;
	rst_n = 1'b0;
	start = 1'b0;
	dividend = 'd23;
	divisor = 'd3;
	#20
	rst_n = 1'b1;
	
	#100
	start = 1'b1;

end


always #10 clk = ~clk;

pipeline_divider
#(
	.N(N)
)
pipeline_divider_inst
(
	.clk		(clk		),	//时钟信号
	.rst_n		(rst_n		),	//复位信号
	.start		(start		),	//开始信号
	.dividend	(dividend	),	//被除数
	.divisor	(divisor	),	//除数
	
	.quotient	(quotient	),	//商
	.remainder	(remainder	),	//余数
	.finish     (finish     )	//结束信号
);

endmodule

仿真结果

在这里插入图片描述
  这里被除数为23,除数为3,得到商为7,余数为2,仿真所得计算结果正确,验证通过。

注:本博客仅为个人学习笔记,如有错误之处,请指正,如有转载请备注出处,谢谢。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FPGA流水线除法器(Verilog)原理及实现 的相关文章

  • 数字IC手撕代码-兆易创新笔试真题

    前言 本专栏旨在记录高频笔面试手撕代码题 以备数字前端秋招 本专栏所有文章提供原理分析 代码及波形 所有代码均经过本人验证 目录如下 1 数字IC手撕代码 分频器 任意偶数分频 2 数字IC手撕代码 分频器 任意奇数分频 3 数字IC手撕代
  • HDLBits — Verilog Practice(每日一题)

    HDLBits Verilog Practice 每日一题 一 Getting Started 1 Getting Started 一 Getting Started 1 Getting Started 问题描述 Build a circu
  • 【FPGA入门】第八篇、FPGA驱动VGA实现动态图像移动

    目录 第一部分 实现效果 第二部分 动态VGA显示的原理 1 将动态显示的区域提前进行赋值 2 图像块的移动是每张图片叠加后的效果 3 如何实现图像块位置的改变 第三部分 系统结构和驱动波形 1 系统的Top down结构 2 图像块移动的
  • 关于Keil中Memory中观察不到数据变化的问题以及启动文件栈的初始化

    关于Keil中Memory中观察不到数据变化的问题 在KEIL中观察Memory数据变化 一定要记得只能在RAM地址或ROM之内观察 如下图所示 RAM的地址设置在地址为0x20000000开始的地方 大小为0x20000 因此只有在这个范
  • 数码管电子时钟

    文章目录 前言 一 回顾数码管 二 任务描述 三 系统框图 四 模块调用 五 模块原理图 六 工程源码 6 2 时钟计数模块代码 6 2 数码管驱动模块代码 6 3 顶层模块代码 七 仿真测试 7 1 测试代码 7 2 仿真结果 八 管脚信
  • 上拉电阻和下拉电阻

    一 定义 上拉电阻 将一个不确定的信号 通过一个电阻与电源VCC相连 固定在高电平 下拉电阻 将一个不确定的信号 通过一个电阻与地GND相连 固定在低电平 二 作用 提高输出信号驱动能力 确定输入信号电平 防干扰 限流 阻抗匹配 抗回波干扰
  • 小梅哥Xilinx FPGA学习笔记9——语法(阻塞与非阻塞赋值)

    阻塞赋值与非阻塞赋值详解 注意 阻塞赋值 1 设计文件 2 激励文件 3 原理图 4 仿真图 非阻塞赋值 1 设计文件 2 激励文件 3 原理图 4 仿真图 注意 阻塞赋值与非阻塞赋值 只有在时序逻辑中才有 不是阻塞赋值 也不是非阻塞赋值
  • Verilog之assign

    Verilog中的关键词assign主要用于如下两个地方 数据流建模 用于数据流建模的显示连续赋值语句语法格式如下
  • 关于xilinx BRAM IP的延迟以及流程

    关于RAM IP的延迟 1 选择了output registers 可以在RAM输出端口添加register 也可以在core的输出添加 在primitives添加 降低clock to out到primitive的延迟 在core添加re
  • PAJ7620U2手势识别——配置0x00寄存器(3)

    文章目录 前言 一 为啥要配置0x00寄存器 二 配置步骤 1 单个读操作步骤图 2 模块状态转移图绘制 3 模块波形图绘制 4 上板验证 5 参考代码 总结 前言 在前面的教程中 小编带领各位读者学习了如何通过I2C协议去唤醒PAJ762
  • 使用七牛云进行文件上传

    目录 一 七牛云入门测试 1 注册七牛云账号 完成后选择对象存储 2 在里面创建空间 一个空间相当于一个文件夹 就是将对象上传到的地方 3 查看个人秘钥 注册完成账号后 会有一个秘钥 上传文件的时候进行授权和认证 4 文件上传测试 二 封装
  • ALLEGRO等长时如何将PIN DELAY和VIA长度计算在内

    在PCB设计中 对于时序要求严格的线路 Via和IC pin delay的长度必须得到重视 通过下面的操作 可将Via和Pin delay加入到线路长度的计算中 1st 计算Pin delay 打开Constraint Manager 选择
  • 【FPGA多周期时序约束详解】- 解读FPGA多周期时序约束的全过程

    FPGA多周期时序约束详解 解读FPGA多周期时序约束的全过程 FPGA作为数字电路设计的常见工具 其设计中必然会遇到时序约束的问题 而多周期时序约束更是FPGA设计中不可避免的难点之一 本文将详细介绍FPGA多周期时序约束的全过程 并结合
  • 画时序图软件——TimeGen和Timing Designer下载

    在写实验报告的时候需要画波形图 但是手头没有很好的软件 就上网搜了一些 分享出来 这里分享的是TimeGen和Timing Designer两个软件 资源均来自网上 有侵权请联系 TimeGen使用和安装都比较简单 我发的应该里面有破解方法
  • 【FMC141】基于VITA57.4标准的4通道2.8GSPS 16位DA播放子卡(2片DAC39J84)

    FMC141是一款基于VITA57 4标准的4通道2 8GSPS 2 5GSPS 1 6GSPS采样率16位DA播放FMC子卡 该板卡为FMC 标准 符合VITA57 4与VITA57 1规范 16通道的JESD204B接口通过FMC 连接
  • 硬核 | 从零制作一个激光雷达需要多久?

    编辑 ADS智库 点击下方 卡片 关注 自动驾驶之心 公众号 ADAS巨卷干货 即可获取 点击进入 自动驾驶之心 硬件交流 技术交流群 本文只做学术分享 如有侵权 联系删文 激光雷达 LiDAR 是激光探测及测距系统的简称 目前广泛应用在无
  • [Verilog] Verilog 基本格式和语法

    主页 元存储博客 全文 3000 字 文章目录 1 声明格式 1 1 模块声明 1 2 输入输出声明 1 3 内部信号声明 1 4 内部逻辑声明
  • Matlab图像处理系列——图像复原之噪声模型仿真

    微信公众号上线 搜索公众号 小灰灰的FPGA 关注可获取相关源码 定期更新有关FPGA的项目以及开源项目源码 包括但不限于各类检测芯片驱动 低速接口驱动 高速接口驱动 数据信号处理 图像处理以及AXI总线等 本节目录 一 图像复原的模型 二
  • TRICONEX MA2211-100 芯片上相互连接

    TRICONEX MA2211 100 芯片上相互连接 TRICONEX MA2211 100 所有相同的组件 io的电源 处理器 和内存将需要 但是 你可以看到所有这些带存储器和处理器的OO板 针不能嵌入到一个小的单片机上 现在是 普拉克
  • ESP10B 锁定连接器

    ESP10B 锁定连接器 ESP10B 电机新增内容包括双极型号标准 NEMA 尺寸 17 23 和 34 的步进电机现在包括输出扭矩范围从 61 盎司英寸到 1291 盎司英寸的双极型号 该电机配有带锁定连接器的尾缆 可轻松连接 每转可步

随机推荐

  • SQL server无法启动服务,提示“错误1069: 由于登录失败而无法启动服务”

    转自 http www 111cn net database mssqlserver 52624 htm 今天在启动sqlserver2008时碰到了遇到SQL server无法启动服务 提示 错误1069 由于登录失败而无法启动服务 提示
  • C语言字符串完成大小写转换

    4 编写一个程序 可以一直接收键盘字符 如果是小写字符就输出对应的大写字符 如果接收的是大写字符 就输出对应的小写字符 如果是数字不输出 此题第一步需要遍历整个输入字符串 第二部完成循环判断赋值将符合条件的值赋值到新的字符串数组中即可 de
  • 线程的五种状态

    1 新建状态 New 创建一个新的线程对象 2 就绪状态 Runnable 线程创建对象后 其他线程调用start 方法 该线程处于就绪状态 资源已经准备就绪 等待CPU资源 3 运行状态 Running 处于就绪状态的线程获取到CPU资源
  • javascript 琐碎知识点1

    1 Javascript是一种基于对象和事件驱动 并具有安全性能的脚本语言 2 Javascript的特点 1 一种脚本编写语言 它的基本结构与C C 十分类似 但它不像这些语言需要先编译 而是在程序运行的过程中被逐行地进行解释 2 基于对
  • Redis分布式锁的实现原理看这篇就够了~

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 一 写在前面 现在面试 一般都会聊聊分布式系统这块的东西 通常面试官都会从服务框架 Spring Cloud Dubbo 聊起 一路聊到分布式事务 分布式锁 ZooKeep
  • ffmpeg编译iOS的.a库

    一 编译环境 系统 本人编译是在mac下的 此方法同样适用于linux yasm 接下来介绍yasm的安装 二 yasm的安装 打开终端 不用管当前目录是在哪 直接执行 brew install yasm 如果提示brew not foun
  • VTM遇到的问题集锦

    文章目录 一 待更新中 1 配置好VTM后 并在调试界面输入命令参数后 点击运行 既不报错 也没有任何结果 2 未加载符号文件 3 编码闪退问题 4 VTM AI编码帧数为总帧数八分之一 一 待更新中 1 配置好VTM后 并在调试界面输入命
  • 因果分析系列4--基于python的因果图模型学习

    因果分析系列4 因果图模型 1 因果图模型介绍 2 基于python绘制因果图模型 3 三种常见的因果图结构 3 1 链结构 chain 3 2 叉结构 fork 3 3 对撞结构 collider 4 巩固思考示例 在上一节中 介绍了因果
  • NodeJS优缺点及适用场景讨论

    http www xprogrammer com 159 html 概述 NodeJS宣称其目标是 旨在提供一种简单的构建可伸缩网络程序的方法 那么它的出现是为了解决什么问题呢 它有什么优缺点以及它适用于什么场景呢 本文就个人使用经验对这些
  • MongoDB设置自增字段

    在使用mongoDB数据库的时候有时候想要对数据库空的数字字段直接进行加减操作 可以用到 inc来实现 比如我想要把网站访问量的数据存到mongoDB数据库中 每次进入网站都可以把该数据进行一次 1操作 通过node js的mongoose
  • 【千律】C++基础:通过文件指针获取文件大小(字节数)

    include
  • Idea导入Eclipse项目

    文章目录 1 选择从已有文件导入 2 配置依赖 3 配置tomcat 在学习过程中经常遇到 eclipse 开发的项目 但是由于和 idea 配置有差异不能直接运行 需要做一些修改 1 选择从已有文件导入 使用 idea 导入文件 注意这里
  • vs2019 MFC 如何在框架类中实现添加一个按钮button

    首先 在框架类CMainFrame中添加一个CButton m btn的成员 然后 在框架类CMainFrame中OnCreate 函数最后添加创建button的函数并显示button 注意 在创建button函数create中如果使用了W
  • 安装VTK8.2.0-win 实际操作

    Windows下安装VTK8 2 0 1 依赖 VS2017 Qt5 cmake 2 前期准备 2 1 访问vtk官方下载VTK8 2 0源码 VTK源码下载地址 https vtk org download 2 2 配置环境变量 配置CM
  • Cookie与Session之(简单购物车示例)

    Cookie 实际上是一小段的文本信息 客户端请求服务器 如果服务器需要记录该用户状态 就使用 response 向客户端浏览器颁发一个 Cookie 客户端浏览器会把 Cookie 保存起来 当浏览器再请求该网 站时 浏览器把请求的网址连
  • tailwind css_带有Tailwind CSS和Nuxt.js的深色和浅色主题

    tailwind css Dark and light mode support has been a recent trend due to the impact on our eyesight caused by the time sp
  • 软件测试面试题--(含mysql,linux,出现最频繁)

    这些是我觉得会问道 但不限于所有的 我列出一些 但并不是所有 软件测试是一个漫长的过程 这需要我们有耐心 和细心 还有一个好学习和认真的态度去进行 小伙伴们可以通过背诵然后结合自己的陈述去进行完善和结果专业知识去进行解答 一 软件测试基础
  • DOS命令查询局域网内在线电脑IP

    COLOR 0A CLS ECHO Off Title 查询局域网内在线电脑IP send ECHO off setlocal enabledelayedexpansion ECHO 正在获取本机的IP地址 请稍等 for f tokens
  • 自己个人总结,Android Studio 中SVN的使用步骤

    要使用SVN 首先需要下载SVN的软件 在这里需要下载两款软件 第一款是Svn的服务器端 第二款是Svn的客户端 俗称的小乌龟 软件的下载地址 Svn客户端软件的下载 64位 http download csdn net detail la
  • FPGA流水线除法器(Verilog)原理及实现

    FPGA流水线除法器 Verilog 原理及实现 流水线除法器原理 除法器的计算过程如下图所示 计算步骤 假设数值的位宽为N Step1 分别将被除数和除数扩展至原来2倍位宽 2N 被除数在其左边补N位0 除数在其右边补N位0 Step2