FPGA课程设计实验报告.docx
《FPGA课程设计实验报告.docx》由会员分享,可在线阅读,更多相关《FPGA课程设计实验报告.docx(13页珍藏版)》请在冰豆网上搜索。
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
四、体会
经过两个礼拜的不懈努力,终于把最后的实验结果按要求完成了。
从一开始的一头雾水到逐渐明白了方向,了解了该如何操作。
一切都是对未知知识上下求索。
虽然团队只有三个人,但是我们互相协助,各司其职,每个人分派自己的任务,并且每天按时按量完成;虽然我们三个人的基础不是很好,但是我们齐心协力,把劣势变成优势,把压力当成动力,每天在实验室忙完了还会主动的在寝室把没有做完的模块继续完善,或者把不了解的部分通过网上查资料、查课本、问同学等方式逐渐弄明白。
整个课程设计的过程中,老师和研究生学长以及周围的同学也给了我们很大的帮助,对于一些我们不了解的知识他们都无私的分享给我们。
在此,特别向课程设计过程中那些帮助过我们的人表示我诚挚的谢意!
虽然两个礼拜时间不是很长,但那种做项目时沉心静气的心态以后值得继续保持!