Verilog的整数除法

1、可变系数除法实现----利用除法的本质

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2025/04/15 13:45:39
// Design Name: 
// Module Name: divide_1
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//module divide_1(// clk and rst_ninput   wire            sys_clk         ,input   wire            sys_rst_n       ,// dividend and divisor        input   wire            enIn            ,input   wire [7:0]      dividend        ,input   wire [3:0]      divisor         ,output  wire            busy            ,output  wire            enOut           ,output  wire            warning         ,output  wire [7:0]      quotient        ,output  wire [3:0]      remainder);localparam  IDLE    =   1'b0    ;localparam  S_CALC  =   1'b1    ;reg         current_state   ;reg         next_state      ;reg         lockDivs        ;reg  [7:0]  DivA            ;reg  [3:0]  DivB            ;reg         counting , ending   ;reg  [7:0]  counter         ;reg         out_busy        ;reg         out_enOut       ;reg         out_warning     ;reg  [7:0]  out_quotient    ;reg  [3:0]  out_remainder   ;wire [7:0]  extDivB =   { 4'b0,DivB }   ;always@( posedge sys_clk )beginif( sys_rst_n == 1'b0 )begincurrent_state   <=  IDLE    ;DivA            <=  8'b0    ;DivB            <=  4'b0    ; counter         <=  8'b0    ;out_enOut       <=  1'b0    ;out_warning     <=  1'b0    ;out_quotient    <=  8'b0    ;out_remainder   <=  4'd0    ;endelsebegincurrent_state   <=  next_state  ;// DivA  DivB  counterif( lockDivs == 1'b1 )beginDivA    <=  dividend    ;DivB    <=  divisor     ;counter <=  8'b0        ;endelse if( counting == 1'b1 )beginDivA    <=  DivA - extDivB  ;counter <=  counter + 1'b1  ;end//out_enOutout_enOut   <=  ending  ;// out_warningif( ending == 1'b1 )beginif( DivB == 4'b0 )beginout_warning <=  1'b1    ;endelsebeginout_warning <=  1'b0    ;end// out_quotientout_quotient    <=  counter ;// our_remainderout_remainder   <=  DivA[3:0]   ;endendendalways@( current_state , enIn , DivA , extDivB )beginout_busy    <=  1'b0    ;lockDivs    <=  1'b0    ;counting    <=  1'b0    ;ending      <=  1'b0    ;case( current_state )IDLE    :beginif( enIn == 1'b1 )beginlockDivs    <=  1'b1    ;next_state  <=  S_CALC  ;endelsebeginnext_state  <=  IDLE    ;endendS_CALC  :beginout_busy    <=  1'b1    ;if( DivA < extDivB || extDivB == 8'b0 )beginending      <=  1'b1    ;next_state  <=  IDLE    ;  endelsebegincounting    <=  1'b1    ;next_state  <=  S_CALC  ;endenddefault :beginnext_state  <=  IDLE    ;endendcaseendassign  busy        =   out_busy        ;assign  enOut       =   out_enOut       ;assign  warning     =   out_warning     ;assign  quotient    =   out_quotient    ;assign  remainder   =   out_remainder   ;endmodule

tb

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2025/04/15 15:24:32
// Design Name: 
// Module Name: tb_divide_1
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//module tb_divide_1();reg                     sys_clk         ;reg                     sys_rst_n       ;       reg                     enIn            ;reg  [7:0]              dividend        ;reg  [3:0]              divisor         ;wire                    busy            ;wire                    enOut           ;wire                    warning         ;wire [7:0]              quotient        ;wire [3:0]              remainder       ;initialbeginsys_clk     =   1'b0    ;sys_rst_n   =   1'b0    ;enIn        =   1'b0    ;dividend    =   8'b0    ;divisor     =   4'b0    ;#50enIn        =   1'b1    ;dividend    =   8'd110  ;divisor     =   4'd10   ; sys_rst_n   =   1'b1    ; #20enIn        =   1'b0    ;#200$finish ;      endalways #5beginsys_clk =   ~sys_clk    ;enddivide_1        divide_1_inst(.sys_clk         (sys_clk),.sys_rst_n       (sys_rst_n),       .enIn            (enIn),.dividend        (dividend),.divisor         (divisor),.busy            (busy),.enOut           (enOut),.warning         (warning),.quotient        (quotient),.remainder       (remainder));endmodule

 

         但是这种做法运算一次最多需要256的clk,所以需要减小消耗的实现

2、可变系数除法实现----利用除法的竖式求解

3、可变系数除法实现----利用乘法实现除法

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

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

相关文章

UniApp + Cursor + Devbox 全栏平台开发教程:从0到完整项目打造

本文基于B站热门教程《一口气学会小程序 / App / H5开发:UniApp教程 + Cursor + Devbox》,https://www.bilibili.com/video/BV1W7QZYMEus/?spm_id_from=333.1007.top_right_bar_window_history.content.click&vd_source=a1428945043b2df41c1896acb90d942a,进行全面扩展…

ESP32-idf学习(一)搭建环境和点灯

一、前言 先说一下查到的数据&#xff08;不保证准确&#xff09;&#xff1a; 1、连续四年Wi-Fi MCU全球市场份额第一&#xff0c;产品应用于智能家居、工业自动化、医疗健康等泛IoT领域‌&#xff0c;2024 年营收突破 20 亿元&#xff08;同比 40%&#xff09;&#xff0c;…

hooker frida版just_trust_me.js 2025升级 支持boringssl unpinning

曾几何时&#xff0c;我翻版了 Xposed 的 just_trust_me.apk&#xff0c; just_trust_me.js 脚本仿佛是一张通行证&#xff0c;让我们在 SSL Pinning 的高墙前轻松穿越。 但时代变了。BoringSSL、Cronet、静态 inline hook、动态 verify callback……一切都变得更加隐蔽和棘手…

通信算法之269 : OFDM信号的循环自相关特性用于无人机图传信号识别

OFDM信号的循环自相关特性是其循环平稳性的核心体现,如下: [相关仿真代码,联系,提供] 一、循环自相关特性来源 ‌循环前缀引入周期性‌ OFDM符号通过添加循环前缀(CP)形成符号周期结构,导致信号具有循环平稳性‌26。每个符号的CP与尾部数据重复,在时延等于FFT长度(N…

vue3环境搭建、nodejs22.x安装、yarn 1全局安装、npm切换yarn 1、yarn 1 切换npm

vue3环境搭建 node.js 安装 验证nodejs是否安装成功 # 检测node.js 是否安装成功----cmd命令提示符中执行 node -v npm -v 设置全局安装包保存路径、全局装包缓存路径 在node.js 安装路径下 创建 node_global 和 node_cache # 设置npm全局安装包保存路径&#xff08;新版本…

基于尚硅谷FreeRTOS视频笔记——6—滴答时钟—上下文切换

FreeRTOS滴答 FreeRTOS需要有一个时钟参照&#xff0c;并且这个时钟不会被轻易打断&#xff0c;所以最好选择systick 为什么需要时间参照 就是在高优先级任务进入阻塞态后&#xff0c;也可以理解为进入delay&#xff08;&#xff09;函数后&#xff0c;需要有一个时间参照&…

使用最新threejs复刻经典贪吃蛇游戏的3D版,附完整源码

基类Entity 建立基类Entity&#xff0c;实现投影能力、动画入场效果&#xff08;从小变大的弹性动画&#xff09;、计算自己在地图格位置的方法。 // 导入gsap动画库&#xff08;用于创建补间动画&#xff09; import gsap from gsap// 定义Entity基类 export default class …

Redis——网络模型之IO讲解

目录 前言 1.用户空间和内核空间 1.2用户空间和内核空间的切换 1.3切换过程 2.阻塞IO 3.非阻塞IO 4.IO多路复用 4.1.IO多路复用过程 4.2.IO多路复用监听方式 4.3.IO多路复用-select 4.4.IO多路复用-poll 4.5.IO多路复用-epoll 4.6.select poll epoll总结 4.7.IO多…

Jenkins 多分支流水线: 如何创建用于 Jenkins 状态检查的 GitHub 应用

使用 Jenkins 多分支流水线时&#xff0c;您可以将状态检查与 GitHub 拉取请求集成。 以下是状态检查的示例 要实现这些类型的状态检查&#xff0c;您需要创建一个与 Jenkins 主实例集成的 GitHub 应用。 在本博客中&#xff0c;我们将介绍如何创建一个 GitHub 应用&#xff…

大模型如何突破“知识盲区”?一场静悄悄的技术革命正在发生

大模型如何突破“知识盲区”&#xff1f;一场静悄悄的技术革命正在发生 凌晨三点&#xff0c;程序员李然盯着屏幕上的报错信息苦笑。他正在调试的智能客服系统&#xff0c;又一次把"北京今日体感温度"回答成了"建议穿羽绒服"。这不是代码错误&#xff0c;…

【SQL Server】数据探查工具1.0研发可行性方案

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 想抢先解锁数据自由的宝子&#xff0c;速速戳我&#xff01;评论区蹲一波 “蹲蹲”&#xff0c;揪人唠唠你的超实用需求&#xff01; 【SQL Server】数据探查工具1.0研发可行性方案…

Qt GUI 库总结

Qt GUI 库总结 Qt GUI 库&#xff08;QtGui&#xff09;是 Qt 框架中负责图形用户界面&#xff08;GUI&#xff09;开发的核心模块。本文将一步步详解 QtGui&#xff0c;从基础入门到高级应用&#xff0c;帮助你全面掌握其功能。以下内容包括环境配置、基本功能、核心特性及进…

如何在米尔-STM32MP257开发板上部署环境监测系统

本文将介绍基于米尔电子MYD-LD25X开发板&#xff08;米尔基于STM35MP257开发板&#xff09;的环境监测系统方案测试。 摘自优秀创作者-lugl4313820 一、前言 环境监测是当前很多场景需要的项目&#xff0c;刚好我正在论坛参与的一个项目&#xff1a;Thingy:91X 蜂窝物联网原型…

网络互连与互联网3

1.SMTP简单邮件传输协议&#xff0c;用于发送电子邮件&#xff0c;默认情况下是明文传输&#xff0c;没有加密机制。 SSL是一种安全协议&#xff0c;对电子邮件进行加密传输。 POP3主要用于接收电子邮件 IMAP用于接收电子邮件 2.采用存储-转发方式处理信号的设备是交换机 …

DICOM通讯(ACSE->DIMSE->Worklist)

DICOM 通讯协议中的 ACSE → DIMSE → Worklist 这条通讯链路。DICOM 通讯栈本身是一个多层的协议结构&#xff0c;就像 OSI 模型一样&#xff0c;逐层封装功能。 一、DICOM 通讯协议栈总体架构 DICOM 通讯使用 TCP/IP 建立连接&#xff0c;其上面封装了多个协议层次&#xf…

优化自旋锁的实现

在《C11实现一个自旋锁》介绍了分别使用TAS和CAS算法实现自旋锁的方案&#xff0c;以及它们的优缺点。TAS算法虽然实现简单&#xff0c;但是因为每次自旋时都要导致一场内存总线流量风暴&#xff0c;对全局系统影响很大&#xff0c;一般都要对它进行优化&#xff0c;以降低对全…

Excel 中让表格内容自适应列宽和行高

Excel 中让表格内容自适应列宽和行高 目录 Excel 中让表格内容自适应列宽和行高自适应列宽自适应行高在Excel中让表格内容自适应列宽和行高,可参考以下操作: 自适应列宽 方法一:手动调整 选中需要调整列宽的列(如果是整个表格,可点击表格左上角行号和列号交叉处的三角形全…

JWT令牌:实现安全会话跟踪与登录认证的利器

摘要&#xff1a;本文深入探讨了JWT令牌在实现会话跟踪和登录认证方面的应用&#xff0c;详细介绍了JWT令牌的概念、组成、生成与校验方法&#xff0c;以及在实际案例中如何通过JWT令牌进行会话跟踪和登录认证的具体实现步骤&#xff0c;为系统的安全认证机制提供了全面且深入的…

Mybtis和Mybatis-Plus区别

MyBatis 和 MyBatis-Plus 是 Java 中常用的持久层框架&#xff0c;MyBatis-Plus 是在 MyBatis 基础上增强的工具包&#xff0c;让开发更便捷、高效。下面是两者主要的区别&#xff1a; ✅ 核心区别总结&#xff1a; 特性MyBatisMyBatis-Plus配置复杂度需要手写大量 XML 或注解…

JavaScript 性能优化实战

一、代码执行效率优化 1. 减少全局变量的使用 全局变量在 JavaScript 中会挂载在全局对象(浏览器环境下是window,Node.js 环境下是global)上,频繁访问全局变量会增加作用域链的查找时间。 // 反例:使用全局变量 var globalVar = example; function someFunction() {con…