FPGA课程设计实验报告.docx

上传人:b****7 文档编号:8697193 上传时间:2023-02-01 格式:DOCX 页数:13 大小:180.03KB
下载 相关 举报
FPGA课程设计实验报告.docx_第1页
第1页 / 共13页
FPGA课程设计实验报告.docx_第2页
第2页 / 共13页
FPGA课程设计实验报告.docx_第3页
第3页 / 共13页
FPGA课程设计实验报告.docx_第4页
第4页 / 共13页
FPGA课程设计实验报告.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

FPGA课程设计实验报告.docx

《FPGA课程设计实验报告.docx》由会员分享,可在线阅读,更多相关《FPGA课程设计实验报告.docx(13页珍藏版)》请在冰豆网上搜索。

FPGA课程设计实验报告.docx

FPGA课程设计实验报告

合肥工业大学大学

实验报告

课程名称:

FPGA设计

实验名称:

移位乘法器设计&8位Booth乘法器设计

姓名:

陶辉

学号:

20114712

班级:

电子科学与技术11-1班

指导教师:

倪伟

合肥工业大学电子科学与应用物理学院制

移位乘法器

移位和相加乘法原理,乘法通过逐项移位相加原理来实现,从被乘数的最低位开始,若为1,则乘数右移后与上一次的和相加;若为0,左移后以全零相加,直至被乘数的最高位。

移位乘法器工作流程图

算法主程序

moduleMUL(A,B,data

);

input[7:

0]A;

input[7:

0]B;output[15:

0]data;

wire[15:

0]data;

reg[7:

0]D;

reg[7:

0]A1;

reg[7:

0]B1;

regC;

always@(AorB)

begin

A1=A;

B1=B;

D=0;

C=0;

repeat(8)

beginif(A1[0]==1){C,D}=D+B1;else

{C,D}=D+0;{C,D,A1}={C,D,A1}>>1;end

end

assigndata={D,A1};

endmodule

移位乘法器测试文件

moduletest;

reg[7:

0]A;

reg[7:

0]B;

//Outputs

wire[15:

0]data;

//InstantiatetheUnitUnderTest(UUT)

MULuut(

•A(A),

.data(data)

);

initialbegin

//InitializeInputs

A=0;

B=0;

//Wait100nsforglobalresettofinish

#20;

A=8'b0000_0010;

B=8'b0000_1101;

//Addstimulushere

end

endmodule

三、实验结果及分析

2进制输入输出结果

nffx

10进制输入输出结果

四、体会

通过移位乘法器的设计,简单的了解了ISE软件的基本功能,主要菜单选项,以及如何建

立一个工程,如何在工程里面写程序和进行编译和综合等。

总体来说最困难的部分就是把这个移位乘法器的算法弄明白。

可能我们平常自己算乘法没有任何困难,但是要通过编码的形式,让计算机能够了解整个算法的流程却不是一件容易的事情。

在整个编写移位乘法器的过程中,看懂整个流程图花费了我很长的时间。

了解整个算法的流程之后编程自然顺理成章了。

所以,我在之后做自己的课题“booth乘

法器”的时候我也花费了很长的时间通过上网查询,详细了解这个算法的确切含义。

虽然花费了很长的时间在研究算法上,但是我觉得是值得的,因为那是最根本的地方。

最后结果也如愿出来了。

所以,我觉得以后在编程的时候,了解你要编写模块的作用以及通过什么算法来实现是一件很重要的事情。

8位booth乘法器设计

实验原理

Booth算法是一种十分有效的计算有符号数乘法的算法。

算法的新型之处在于减法也可用

于计算乘积。

Booth发现加法和减法可以得到同样的结果。

因为在当时移位比加法快得多,所

以Booth发现了这个算法,Booth算法的关键在于把1分类为开始、中间、结束三种,如下图所示

Hcoth算法中1的分类

当nm

雪前15右边的位

分类

1

0

1灼开给

1

1

1的中同

0

1

1的林

0

0

"的中同

Booth算法根据乘数的相邻2位来决定操作,第一步根据相邻2位的4中情况来进行加或减操作,第二部仍然是将积寄存器右移,算法描述如下:

(1)根据当前为和其右边的位,做如下操作:

00:

0的中间,无任何操作;

01:

1的结束,将被乘数加到积的左半部分;

10:

1的开始,积的左半部分减去被乘数;

11:

1的中间,无任何操作。

(2)将积寄存器右移1位。

因为Booth算法是有符号数的乘法,因此积寄存器移位的时候,为了保留符号位,进行算术右移。

同时如果乘数或者被乘数为负数,贝U其输入为该数的补码,若积为负数,贝U输出结果同样为该数的补码。

Aft

歩0

a

0

0010

oooniioio

1

1:

m-枳一机-岐JS

(MIO

DIOHOI0

0010

miohoi

2

1:

01—ft—ft

ooia

onoinuoi

10

oooaioiu)

1

1:

iDr軸■和一做秦號

0010

IIID10110

1:

0010

Illi01011

4

L:

H—nop

0010

Illi01011

Is机韦您Ifit

0010

Illi10101

对于boo曲算泡準帆切卜\2<必一九=一舀即dt看遴是ooiopai叫⑹务

$6-1*RMrth尊轶坯黄过丹

 

实验步骤

主程序代码:

modulebooth8(data_on,data_out);

inputdata_on;

wire[15:

0]data_on;

output[19:

0]data_out;

wire[19:

0]data_out;

reg[7:

0]R0,R1,R2;

regc1,p;

reg[4:

0]i;

reg[3:

0]tmp;

reg[19:

0]data;

always@(data_on)

begin

R0=0;

R仁data_on[7:

0];

R2=data_on[15:

8];

p=0;

repeat(8)

begin

case({R2[0],p})

2'b00:

R0=R0;

2'b01:

R0=R0+R1;

2'b10:

R0=R0-R1;

2'b11:

R0=R0;

endcase

c仁R0[7];

{c1,R0,R2,p}={c1,R0,R2,p}>>1;end

data=0;

repeat(16)

begin

repeat(5)

begin

{tmp,data}={tmp,data}<<4;

if(tmp>=5)

tmp=tmp+3;

else

tmp=tmp;

data[3:

0]=tmp;

end

{data,R0,R2}={data,R0,R2}<<1;end

end

assigndata_out=data;

endmodule

顶层模块:

moduletop(

clk,rst,data_out,data_in);

inputclk,rst;

output[19:

0]data_out;

output[15:

0]data_in;

wire[15:

0]data_in;

reg[2:

0]addra,ct;

regclk1;

always@(posedgeclkornegedgerst)

begin

if(rst==0)

begin

ct<=0;

clk1<=0;

end

elseif(ct==7)

begin

clk1<=~clk1;

ct<=0;

end

else

ct<=ct+1;

end

booth8U1(

.data_out(data_out),.data_on(data_in)

);

romU2(

.clka(clkl),//inputclka

.addra(addra),//input[2:

0]addra

.douta(data_in)//output[15:

0]douta

);

always@(posedgeclk1ornegedgerst)

begin

if(rst==0)

addra<=0;

else

addra<=addra+1;

end

endmodule

测试模块:

moduletest;

//Inputs

regclk;

regrst;

//Outputs

wire[19:

0]data_out;

wire[15:

0]data_in;

//InstantiatetheUnitUnderTest(UUT)

topuut(

.clk(clk),

.rst(rst),

.data_out(data_out),

.data」n(data_in)

);

initialbegin

//InitializeInputs

clk=0;

rst=1;

#10rst=0;

#10rst=1;

//Wait100nsforglobalresettofinish

#800$stop;

//Addstimulushere

end

always#5clk=~clk;

endmodule

三、实验结果及分析

COE文件,输入的8组数据

f

pCOEFileContents

Radix:

16

COEVector:

memoryjnitialization.

_vector

Index

V^lue

0

0000

1

0407

2

0805

30703

0509

5

0808

6

0609

7

0709

Close

Help

cdc输出结果:

A:

乘数B:

被乘数data_booth:

BCD输出积

BusTSignal

X07X00X0+)

【06)

H07X05X08

<07XOBX(JJX05X07J

{05X00

、叩厂国f的丁仙血x

lQQ\07吨鼻的厂血~x丽Y

09

D9

而矗"XQOOQQYOQQ羽、[、0QQ72X(JOO71XODQ45而QQM*XQQQE3炕(JOOX\0022XQ0021X00Q殆~X(WO钳

0002】

A:

乘数B:

被乘数data_booth:

十进制输出积

 

®尸oolc兰七r

11■L

1

754)皿

11

7S0.54;

2ns

BOO口耳

ilia

S50口鼻

ii■u

900口耳

ij—■»

950口s

1FlI1

lig

l

3卞

9J

、:

xzz

£

Z2X

7*

5)

1Q1000

X-

-X«wow

KJOTlOOQOUX~i

^XKKXKXXUWQlDl^

n1

TLTLn

JTT

rLTLTLrLr

rLTLTLrLr

TLrLTLTLT

TLTLTLrLr

Xli7S0.M205

测试波形

Value

□I

Default,wcfg*

OOOOOQODOOl

 

四、体会

经过两个礼拜的不懈努力,终于把最后的实验结果按要求完成了。

从一开始的一头雾水到逐渐明白了方向,了解了该如何操作。

一切都是对未知知识上下求索。

虽然团队只有三个人,但是我们互相协助,各司其职,每个人分派自己的任务,并且每天按时按量完成;虽然我们三个人的基础不是很好,但是我们齐心协力,把劣势变成优势,把压力当成动力,每天在实验室忙完了还会主动的在寝室把没有做完的模块继续完善,或者把不了解的部分通过网上查资料、查课本、问同学等方式逐渐弄明白。

整个课程设计的过程中,老师和研究生学长以及周围的同学也给了我们很大的帮助,对于一些我们不了解的知识他们都无私的分享给我们。

在此,特别向课程设计过程中那些帮助过我们的人表示我诚挚的谢意!

虽然两个礼拜时间不是很长,但那种做项目时沉心静气的心态以后值得继续保持!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 小升初

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1