高效除法器verilog实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
西北工业大学 《FPGA 技术实验》
实验报告二 (高效除法器)
微电子学 2011.10.12 毅字楼335
西北工业大学
学 院 学 号 姓 名 专 业 实验时间 实验地点 指导教师
软件与微电子学院
Start
为了能清楚的展示以上算法我们看下面例子:为了简单期间我们假设被除数
(did)是4位,除数(dis)是2位,商(quo)是4位,余数(rem)是4位,设did=0110,dis=10,我们来看看是怎么执行的•首先余数和商都清零,即rem=0,quo=0;把被除数的最高位0拼接到rem的最低位,此时rem=0000B,由于rem小于除数dis=10,则商quo[3]=0;下面进行第二次计算,把did[2]拼接到rem 最低位,此时rem=0001,dis=10>rem,故
quo[2]=0;继续计算,把did[1]拼接到rem 最低位,此时rem=0011,dis=10 quo[1]=1,rem=rem-quo=0011-10=0001; 进行最后一轮运算,把did[0] 拼接至U rem 最低位,此时rem=0010,dis=10=rem. 因此quo[0]=1,rem=rem-dis=0010-10=0000,至此我们已计算元毕商quo=0011, 余数rem=0000;计算简单快速. 2. 测试平台设计 模块设计 'timescale 1ns/1ns module divider_8_4(did. dis, quo, // Quotie nt rem, // Rema inder error // ); parameter M=7; parameter N=3; // in put [M:0] did; in put [N:0] dis; output [M:0] quo; output [M:0] rem; output error; reg [M:0] quo; reg [M:0] rem; reg error; in teger i; always (did or dis) // // Divide nt 被除数 // Divisor 除数 商 余数 错误,如果除数为0.则error置1 // 被除数,余数,商的位数 除数的位数 // 整数,用于计数 被除数,除数 beg in quo=0; rem=O; // 开始余数和商清零 if(dis==O) error=1; // 若除数为0则显示错误else if(did rem=dis; quo=0; error=0; end else beg in error=O; for (i=8;i>0;i=i-1) // 循环8次 beg in rem={rem[M-1:0],did[i-1]}; //把did[i-1] 连接到rem后 quo=quo<<1; // 商左移一位 if(rem>=dis) // 若拼接后rem>=除数dis beg in quo=quo+1; // 商值自加1 rem=rem-dis; // 新余数变为旧余数减除数 end end end end // 结束en dmodule Tesebench 如下: 'timescale 1ns/1ns module divider_be nch; reg [7:0] did; reg [3:0] dis; wire [7:0] quo; wire [7:0] rem; in teger i; // in teger j; // divider_8_4 d1(did,dis,quo,rem,error); // 整数,用于控制被除数变化整数,用于控制除数变化实例化 in itial beg in for(i=0;i<=255;i=i+1) beg in did=i; for(j=0;j<=15;j=j+1) #1 dis=j; // 被除数从0到255 // 除数从0到15变化 end end in itial beg in $mon itor($time,"divide nt=% divisor=%d quotie nt=%d remai nder=%d",did,dis,quo,rem); end in itial beg in #1000 $fini sh; // 1000ns 时停止仿真 end en dmodule 四、实验结果与数据处理 1. Modelsim仿真结果,波形图,代码覆盖率图等 为了严谨,把所有的数值都测了一遍(did从0到255,dis从0到15),从modeldim仿真结果看到程序的正确性,鉴于数据较多这里只选择几组数据给予 展示 : 上图中从上到下一次代表被除数,除数,错误,商和余数,当被除数是4.除数分别是9,10,11,12,13,14,15 时商为0,余数分别9,10,11,12,13,14,15.