verilog实现除法
0 2023-03-22

对于FPGA来说尽量不要做除法,因为比较消耗资源,可以用截位的方式实现对2的N次方的除法,比如N/2就等于N右移一位。

我们今天来讲使用移位减的方法实现一般的除法操作:

实现流程为:

1、将除数、被除数转换为正数,2、确定符号位;3、被除数从最高位开始取数,与除数比较: 被除数大于等于除数:商为1,余数为差值 被除数小于除数 :商为0,余数不变4、依次向下,直至结束输入数据I_data_ina为被除数,I_data_inb为除数:




input  wire                     I_data_en    , // 输入数据有效标志input  wire [C_DATA_WITH-1:0]   I_data_ina   , // 输入被除数input  wire [C_DATA_WITH-1:0]   I_data_inb   , // 输入除数output reg                      O_data_en    , // 输出数据有效标志

首先对符号位进行判断:




always @(posedge I_sys_clk) if(I_data_en) S_out_flag <= I_data_ina[C_DATA_WITH-1]^I_data_inb[C_DATA_WITH-1] ;

然后将被除数和除数进行取绝对值(这里为了方便做移位减法中的减法操作,将除数置为负数):


















/// 被除数转换为正数always @(posedge I_sys_clk) if(I_data_en) if(I_data_ina[C_DATA_WITH-1]) S_data_ina_abs <= ~I_data_ina + 1; else S_data_ina_abs <= I_data_ina ; else S_data_ina_abs <= (S_data_ina_abs <<1); /// 除数取负值always @(posedge I_sys_clk) if(I_data_en) if(I_data_inb[C_DATA_WITH-1]) S_data_inb_abs <= I_data_inb ; else S_data_inb_abs <= ~I_data_inb + 1;

然后就是循环移位求差值的过程了:






















/// 比较差值assign S_data_cut_temp = S_data_ina_temp + S_data_inb_abs ; /// 循环求差always @(posedge I_sys_clk) if(S_data_en[0]) begin S_data_ina_temp <= {{(C_DATA_WITH-1){1'b0}},S_data_ina_abs[C_DATA_WITH-2]}; S_data_out_temp <= {(C_DATA_WITH){1'b0}}; end else if(S_data_cut_temp[C_DATA_WITH-1]) begin S_data_ina_temp <= {S_data_ina_temp[C_DATA_WITH-2:0],S_data_ina_abs[C_DATA_WITH-2]}; S_data_out_temp <= {S_data_out_temp[C_DATA_WITH-2:0],1'b0}; end else begin S_data_ina_temp <= {S_data_cut_temp[C_DATA_WITH-2:0],S_data_ina_abs[C_DATA_WITH-2]}; S_data_out_temp <= {S_data_out_temp[C_DATA_WITH-2:0],1'b1}; end

代码在数据有效标志来了之后先将被除数的绝对值送入,将商置1,然后判断差值:差值大于等于0时,商为1,余数为差值,差值小于0时,商为0,余数不变。

最后仿真的结果为:



声明: 本文转载自其它媒体或授权刊载,目的在于信息传递,并不代表本站赞同其观点和对其真实性负责,如有新闻稿件和图片作品的内容、版权以及其它问题的,请联系我们及时删除。(联系我们,邮箱:evan.li@aspencore.com )
0
评论
  • GaN初创公司如何做出与众不同的创新?


  • 相关技术文库
  • 电源
  • DC
  • AC
  • 稳压
  • 行业内的微功率电源模块的技术瓶颈与解决方案

    传统的微功率电源模块采用自激推挽拓扑的电路,各项性能之间的相互制约(如表1所示:启动能力与容性负载能力相互加强作用,而与电源转换效率是相互制约的,启动能力强则电

    前天
  • 阻抗匹配-低频和高频两种情况讨论

    [导读]阻抗匹配是指信号源或者传输线跟负载之间的一种合适的搭配方式。阻抗匹配分为低频和高频两种情况讨论。 我们先从直流电压源驱动一个负载入手。由于实际的电压

    前天
  • TVS在电路设计中的应用方法

    瞬态电压抑制器是一种二极管形式的高效能保护器件,具有极快的响应时间和相当高的浪涌吸收能力。当TVS的两端受到

    前天
  • LDO与DC/DC相比,主要参数和典型应用

    ​LDO:LOW DROPOUT VOLTAGE LDO(是low dropout voltage regulator的缩写)低压差线性稳压器,顾名思义,为线性的稳压器,仅能使用在降压应用中。也就是输出电压必须小于输入电压。

    前天
  • 升压DC/DC的接地知识

    本文将探讨升压型DC/DC转换器的PCB布局中“接地”相关的内容。经常听到“接地很重要”、“需要加强接地设计

    前天
  • 线性稳压电源和开关电源对比

    电源是整个电路板中最重要的一块了,电源不稳定,其他啥都别谈。在电源设计上我们用得最多的场合是,从一个稳定的“

    前天
  • 开关直流升压电路原理

    开关直流升压电路(即所谓的boost或者step-up电路)原理the boost converter,或者

    前天
  • 开关电源常见拓扑结构对比

    今天给大家分享一篇常见开关电源各种拓扑结构对比与分析的知识,做硬件或者电源开发的读者建议深入了解一下。1.什

    前天
  • 为降压型DC/DC转换器选择合适的电感和电容

    在DC/DC转换器的设计上,电感和电容器的选择特別重要,必须充分理解电路工作、电流路径、各器件担负什么工作或

    前天
  • DC/DC电路板最佳布局实践

    了解DC-DC降压转换器电路的最佳布局规范。在实现DC-DC降压转换器时,电路布局与设计同样重要。布局不良会

    前天
  • 瞬态抑制二极管和稳压二极管区别对比

    瞬态抑制二极管和稳压二极管区别对比稳压二极管(齐纳二极管)A 原理它工作在电压反向击穿状态,当反向电压达到并

    前天
  • 电动汽车电机控制器如何测试?

    当前,中国为了鼓励节能减排,已将新能源汽车作为重点扶持的新兴产业,发展新能源汽车已经成为保障能源安全和转型低碳经济的重要途径。

    06-01
下载排行榜
更多
广告