高效除法器verilog实现

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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.

相关文档
最新文档