基于fpga的正整数除法器设计

基于fpga的正整数除法器设计

ID:18988919

大小:143.00 KB

页数:5页

时间:2018-09-27

基于fpga的正整数除法器设计_第1页
基于fpga的正整数除法器设计_第2页
基于fpga的正整数除法器设计_第3页
基于fpga的正整数除法器设计_第4页
基于fpga的正整数除法器设计_第5页
资源描述:

《基于fpga的正整数除法器设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、1.顶层模块`timescale1ns/1ps////////////////////////////////////////////////////////////////////////////////////Company:西安电子科技大学//Engineer:piger朱////CreateDate:16:08:4205/11/2012//DesignName:基于FPGA的正整数除法器设计(被除数8位,除数4位)//ModuleName:div//ProjectName:div//TargetDevices:virtex-5//To

2、olversions:ISE12.4modelsim6.5se//Description:除法运算的过程就是被除数不断的减去除数,直到二者的差为负数为止//但这样做有一个缺点,比如100/100,只需要减一次就能得出结果,//而100/1需要减100次才能得出结果,如果一个时钟周期做一次减法的//话,100/1需要100个时钟周期,效率太低了!!!我们可以这样做//以23/3为例,23(用a表示)的二进制为0001_0111,3(用b表示)的//二进制为0011,首先设置一个16为的寄存器reg16,用以辅助计算//令reg16={8'b0,

3、a}={0000_0000,0001_0111},每个周期令//reg16左移一位,如果reg16的高8位(reg16[15:8])大于b,则令//reg16[15:8]=reg[15:8]-b,同时令reg16的最低位(reg16[0])//等于1;如果reg16的高8位小于b,则reg[16:8]保持不变,同时令//reg16[0]=0....如此重复8个周期,也就是reg16左移八次之后,//reg16[7:0]中存储的值就是最终的商,reg16[15:8]>>1的值就是//最终的余数。至于为什么会这样,大家把这个流程走一边自然就能明白

4、了//Dependencies:////Revision://Revision0.01-FileCreated//AdditionalComments:////////////////////////////////////////////////////////////////////////////////////modulediv(clk,rst,start,dividend,divisor,quotient,remainder,sample,error);inputclk;inputrst;inputstart;input[7:0]d

5、ividend;input[3:0]divisor;output[7:0]quotient;output[7:0]remainder;outputsample;outputerror;reg[15:0]divn;reg[3:0]divr;reg[1:0]state;reg[2:0]counter;regdo_sig;parameterIDLE=2'b00,ERROR=2'b01,SHIFT=2'b10;always@(posedgeclk)beginif(!rst)begindivn<=0;divr<=0;counter<=0;state<=

6、IDLE;endelsebegincase(state)IDLE:begincase(start)0:state<=IDLE;1:begindivn<={8'b0,dividend}<<1;divr<=divisor;counter<=0;do_sig<=0;if(divisor==0)state<=ERROR;elsestate<=SHIFT;endendcaseendSHIFT:begincounter<=counter+1;if(divn[15:8]>=divisor)begindivn<={divn[15:8]-divr,divn[7

7、:0]}<<1;divn[0]<=1;endelsebegindivn<=divn<<1;divn[0]<=0;endif(counter==7)beginstate<=IDLE;do_sig<=1;endelsestate<=SHIFT;endERROR:begin//state<=IDLE;enddefault:state<=IDLE;endcaseendendassignquotient=divn[7:0];assignremainder=divn[15:8]>>1;assignsample=do_sig;assignerror=(st

8、ate==ERROR);endmodule2.测试文件`timescale1ns/1psmodulediv_tb;//Inputsregclk;regrst;reg

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。