设计思路:
通过verilog实现除法有两大类,分别是:
基于减法操作。
基于乘法操作的算法。


8bit/8bit的除法实现
附录:

`timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date: 2019/07/29 16:11:22
// Design Name:
// Module Name: test_div
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//      testbench         //
module test_div();   reg               I_clk;
reg               I_rst_p;
reg               I_data_valid;      //输入有效信号
reg       [7:0]   I_data_a;        //被除数
reg       [7:0]   I_data_b;        //除数
wire                O_data_valid;
wire      [7:0]    O_data_shang;
wire      [7:0]    O_data_yushu;
c u_c(.I_clk(I_clk),.I_rst_p(I_rst_p),.I_data_valid(I_data_valid),.I_data_a(I_data_a),.I_data_b(I_data_b),.O_data_valid(O_data_valid),.O_data_shang(O_data_shang),.O_data_yushu(O_data_yushu)
);
always #3.125  I_clk <= ~I_clk;
initial beginI_clk  = 0;I_rst_p = 1;I_data_valid = 0;I_data_a = 0;I_data_b = 0;#10;I_rst_p = 0;#30;@(posedge I_clk ) begin I_data_valid = 1;I_data_a = {$random}%256; I_data_b = {$random}%20;endrepeat(18) @(posedge I_clk)    I_data_valid = 0;@(posedge I_clk ) begin I_data_valid = 1;I_data_a = {$random}%256; I_data_b = {$random}%20;endrepeat(18) @(posedge I_clk)    I_data_valid = 0;@(posedge I_clk ) begin I_data_valid = 1;I_data_a = {$random}%256; I_data_b = {$random}%20;endrepeat(10) @(posedge I_clk)    I_data_valid = 0;      @(posedge I_clk ) begin I_data_valid = 1;I_data_a = {$random}%256; I_data_b = {$random}%20;endrepeat(18) @(posedge I_clk)    I_data_valid = 0;;
endendmodule
module c(input               I_clk,input               I_rst_p,input               I_data_valid,input       [7:0]   I_data_a,input       [7:0]   I_data_b,output reg          O_data_valid,output reg [7:0]    O_data_shang,output reg [7:0]    O_data_yushu);
reg  [7:0]   tempa;
reg  [7:0]   tempb;
reg  [15:0]  temp_a;
reg  [15:0]  temp_b;
reg          div_start;
reg          div_start_d1;
wire         div_start_neg;
reg  [4:0]   div_cnt;
always@(posedge I_clk or posedge I_rst_p)beginif(I_rst_p)begintempa <= 8'h0;            tempb <= 8'h0;            endelse if(I_data_valid)begintempa <= I_data_a;            tempb <= I_data_b;            endelsebegintempa <= tempa;            tempb <= tempb;            endendalways@(posedge I_clk or posedge I_rst_p)beginif(I_rst_p)div_start <= 1'b0;else if(I_data_valid && div_start == 1'b0)div_start <= 1'b1;           //开始计算else if(div_cnt == 5'd16 )  //每16个时钟后开始下一次计算div_start <= 1'b0;elsediv_start <= div_start;end
//========================================================div_cnt  计数器
always@(posedge I_clk or posedge I_rst_p)if(I_rst_p)div_cnt <= 5'd0;else if(div_start)div_cnt <= div_cnt + 1;elsediv_cnt <= 5'd0;
//=======================================================
always@(posedge I_clk or posedge I_rst_p)beginif(I_rst_p)begintemp_a <= 16'h0;temp_b <= 16'h0;            endelse if(div_start )if(div_cnt == 4'd0)begintemp_a <= {8'h0,tempa};temp_b <= {tempb,8'h0};endelse if(div_cnt[0] == 1'b1)begintemp_a <= {temp_a[14:0],1'b0};   //相当于乘2   或者左移一位elsebegintemp_a <= (temp_a[15:8] >= temp_b[15:8])?(temp_a - temp_b + 1):temp_a;//判断temp_a乘2之后取高8位与输入的除数比较大小 ,  8次移动完temp_a[15:8]<temp_b[15:8])//结果就是左边高temp_a[15:8]是余数,右边temp_a[7:0]是商endelsebegintemp_a <= 16'h0;temp_b <= 16'h0;              endend
always@(posedge I_clk)begindiv_start_d1 <= div_start;                                      //延一拍end
assign div_start_neg = div_start_d1 & (~div_start);   //产生一个脉冲always@(posedge I_clk or posedge I_rst_p)beginif(I_rst_p)beginO_data_valid <= 1'b0;O_data_shang <= 1'b0;O_data_yushu <= 1'b0;         endelse if(div_start_neg)beginO_data_valid <= 1'b1;O_data_shang <= temp_a[7:0];O_data_yushu <= temp_a[15:8];              endelsebeginO_data_valid <= 1'b0;O_data_shang <= 1'b0;O_data_yushu <= 1'b0;          endend
endmodule

仿真结果:

verilog实现简单的除法运算相关推荐

  1. java简单的除法运算_Java除法运算的陷阱

    3.求余:和除法差不多. System.out.println(23%4); System.out.println(23%-4); System.out.println(-23%4); System. ...

  2. 数字电路基础知识——组合逻辑电路实现一些简单逻辑电路 (一)(用Verilog实现:绝对值函数运算(补码问题),取对数函数(移位寄存器),取整函数)

    数字电路基础知识--组合逻辑电路实现一些简单逻辑电路 (一)(用Verilog实现:绝对值函数运算(补码问题),取对数函数(移位寄存器),取整函数) 在数字逻辑设计中,本节介绍绝对值运算函数如何用Ve ...

  3. 2.4 定点除法运算

    学习目标: 学习如何实现一个基于余数查商法的定点除法运算,并能够正确地进行除法计算,包括处理舍入误差和溢出等问题.具体要求包括: 熟悉定点数的表示方法和定点数的基本运算法则,理解定点除法运算的基本概念 ...

  4. 1.14 实例:完善除法运算的错误信息

    本次实例的目的很简单,就是由用户输入两个数字,然后进行相除并输出结果.但是要求程序对除法运算过程中的各种异常进行捕捉并提示用户,例如除数是字符.被除数是零等. 在这个实例中定义了一个数组来存放要执行运 ...

  5. (34)Verilog HDL算术运算:加减乘除运算

    (34)Verilog HDL算术运算:加减乘除运算 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)Verilog HDL算术运算:加减乘除运算 5)结语 1.2 FP ...

  6. python除法保留两位小数_Python对小数进行除法运算的正确方法示例

    Python对小数进行除法运算的正确方法示例 求一个算式 代码如下: a=1 b=2 c=3 print c*(a/b) 运行结果总是0,反复检查拆开以后,发现在Python里,整数初整数,只能得出整 ...

  7. c语言for循环除法运算,C语言入门这一篇就够了

    c语言入门 C语言一经出现就以其功能丰富.表达能力强.灵活方便.应用面广等特点迅速在全世界普及和推广.C语言不但执行效率高而且可移植性好,可以用来开发应用软件.驱动.操作系统等.C语言也是其它众多高级 ...

  8. 定点数的除法C语言,FPGA定点小数计算(二)——除法运算

    0 引言 在四则运算中,除法最为复杂,在时间上和空间上的开销都比较大.因此很多算法都极力避免进行除法运算,或者采用其他的方案来代替除法运算.但是,除法运算作为基本的四则运算之一,在很多情况下依旧是不可 ...

  9. Java除法运算(保留小数)

    编程的人都知道,java中的"/"."%"运算,其中前者为取整,后者取余数.那么有没有快捷的运算方法取正常的运算结果呢? 查了资料,发现很简单.代码如下: /* ...

最新文章

  1. javaweb回顾第十二篇监听器
  2. jbpm_工作流框架笔记
  3. angular2 如何使用websocket
  4. 碎片时间学习前端,我推荐这些~
  5. slope one 推荐算法python 代码_基于协同的SlopeOne推荐算法原理介绍和实现
  6. python注册登陆程序未响应_SpringBoot实现登录注册常见问题解决方案
  7. 【好文链接】环形队列、串口数据处理
  8. Html前端基础(select下拉选标签、table表格标签)
  9. WebSocket 实现原理
  10. 关于协程和 ES6 中的 Generator
  11. tcp总结与简单实现
  12. iweboffice之word——功能简介
  13. 计算机用固态硬盘无法启动不了,windows10系统安装固态硬盘开启AHCI后开不了机怎么办...
  14. c++用贪心算法解决汽车加油问题
  15. 什么是雅可比矩阵?利用雅可比矩阵分析动力学
  16. theano环境配置
  17. linux中的dns中的hint,DNS问题
  18. 长沙有哪些点餐系统服务商?长沙点菜软件哪家好?
  19. 电子化时代到来,电子印章助力构建网络时代互信环境
  20. 软考高级 真题 2009年下半年 信息系统项目管理师 综合知识

热门文章

  1. 数据结构课程设计(考试管理系统)
  2. Rtabmap+ORB_SLAM2+D435i(稠密地图)
  3. 2.查询平均成绩大于60分的同学的学号和平均成绩
  4. 游戏行业使用高防IP有什么优势?
  5. WA4320-ACN-E刷胖AP固件过程及问题
  6. 抖音直播间我打的字别人看不见,抖音直播打字看不见怎么回事
  7. 武大计算机科学与技术考研,2018武汉大学计算机考研复试经验贴
  8. 智能型超声波塑料焊接电源发生器
  9. WIFI与移动网络下IP地址是否使用NAT
  10. NAT技术之NAT server