合肥工业大学大学。
实验报告。课程名称fpga设计。
实验名称: 移位乘法器设计 & 8位booth乘法器设计。
姓名陶辉。学号20114712
班级电子科学与技术11-1班。
指导教师倪伟。
合肥工业大学电子科学与应用物理学院制。
移位乘法器。
一、 实验原理。
移位和相加乘法原理,乘法通过逐项移位相加原理来实现,从被乘数的最低位开始,若为1,则乘数右移后与上一次的和相加;若为0,左移后以全零相加,直至被乘数的最高位。
移位乘法器工作流程图。
二、 实验步骤。
算法主程序。
module mul(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;
reg c;
always @(a or b)
begina1 = a;
b1 = b;
d = 0;
c = 0;
repeat(8)
beginif(a1[0]==1)
c,d} =d + b1;
elsec,d} =d + 0;
c,d,a1} =1;
endend
assign data =
endmodule
移位乘法器测试文件。
module test;
reg [7:0] a;
reg [7:0] b;
// outputs
wire [15:0] data;
// instantiate the unit under test (uut)
mul uut (
.a(a),
.b(b),
.data(data)
initial begin
initialize inputs
a = 0;
b = 0;
wait 100 ns for global reset to finish
#a = 8'b0000_0010;
b = 8'b0000_1101;
add stimulus here
endendmodule
三、 实验结果及分析。
2进制输入输出结果。
10进制输入输出结果。
四、 体会。
通过移位乘法器的设计,简单的了解了ise软件的基本功能,主要菜单选项,以及如何建立一个工程,如何在工程里面写程序和进行编译和综合等。
总体来说最困难的部分就是把这个移位乘法器的算法弄明白。可能我们平常自己算乘法没有任何困难,但是要通过编码的形式,让计算机能够了解整个算法的流程却不是一件容易的事情。在整个编写移位乘法器的过程中,看懂整个流程图花费了我很长的时间。
了解整个算法的流程之后编程自然顺理成章了。所以,我在之后做自己的课题“booth乘法器”的时候我也花费了很长的时间通过上网查询,详细了解这个算法的确切含义。
虽然花费了很长的时间在研究算法上,但是我觉得是值得的,因为那是最根本的地方。最后结果也如愿出来了。
所以,我觉得以后在编程的时候,了解你要编写模块的作用以及通过什么算法来实现是一件很重要的事情。
8位booth乘法器设计。
一、 实验原理。
booth算法是一种十分有效的计算有符号数乘法的算法。算法的新型之处在于减法也可用于计算乘积。booth发现加法和减法可以得到同样的结果。
因为在当时移位比加法快得多,所以booth发现了这个算法,booth算法的关键在于把1分类为开始、中间、结束三种,如下图所示。
当然一串0或者1的时候不操作,所以booth算法可以归类为以下四种情况:
booth算法根据乘数的相邻2位来决定操作,第一步根据相邻2位的4中情况来进行加或减操作,第二部仍然是将积寄存器右移,算法描述如下:
1) 根据当前为和其右边的位,做如下操作:
00: 0的中间,无任何操作;
01: 1的结束,将被乘数加到积的左半部分;
10:1的开始,积的左半部分减去被乘数;
11: 1的中间,无任何操作。
2) 将积寄存器右移1位。
因为booth算法是有符号数的乘法,因此积寄存器移位的时候,为了保留符号位,进行算术右移。同时如果乘数或者被乘数为负数,则其输入为该数的补码,若积为负数,则输出结果同样为该数的补码。
二、 实验步骤。
主程序**:
module booth8(data_on,data_out);
input data_on;
wire [15:0] data_on;
output [19:0] data_out;
wire [19:0] data_out;
reg [7:0] r0,r1,r2;
reg c1,p;
reg [4:0] i;
reg [3:0] tmp;
reg [19:0] data;
always@(data_on)
beginr0=0;
r1=data_on[7:0];
r2=data_on[15:8];
p=0;repeat(8)
begincase()
2'b00: r0=r0;
2'b01: r0=r0+r1;
2'b10: r0=r0-r1;
2'b11: r0=r0;
endcase
c1=r0[7];
c1,r0,r2,p}=>1;
enddata=0;
repeat(16)
beginrepeat(5)
begintmp,data}=<4;
if(tmp>=5)
tmp=tmp+3;
elsetmp=tmp;
data[3:0]=tmp;
enddata,r0,r2}=<1;
endend
assign data_out=data;
endmodule
顶层模块:module top(
clk,rst,data_out,data_in);
input clk,rst;
output [19:0] data_out;
output [15:0] data_in;
wire [15:0] data_in;
reg [2:0] addra,ct;
reg clk1;
always@(posedge clk or negedge rst)
beginif(rst ==0)
beginct<=0;
clk1<=0;
endelse if(ct==7)
beginclk1<=~clk1;
ct<=0;
endelse
ct<=ct+1;
endbooth8 u1(
.data_out(data_out),.data_on(data_in)
rom u2(
.clka(clk1), input clka
.addra(addra), input [2 : 0] addra
.douta(data_in) /output [15 : 0] douta
always@(posedge clk1 or negedge rst)
beginif (rst==0)
addra <=0;
elseaddra <=addra + 1;
endendmodule
测试模块:module test;
// inputs
reg clk;
reg rst;
// outputs
wire [19:0] data_out;
wire [15:0] data_in;
// instantiate the unit under test (uut)
top uut (
.clk(clk),
.rst(rst),
.data_out(data_out),
.data_in(data_in)
initial begin
initialize inputs
clk = 0;
rst = 1;
#10 rst=0;
#10 rst=1;
wait 100 ns for global reset to finish
#800 $stop;
add stimulus here
endalways #5 clk=~clk;
endmodule
三、 实验结果及分析。
coe文件,输入的8组数据。
cdc输出结果:
a:乘数 b:被乘数 data_booth:bcd输出积。
a:乘数 b:被乘数 data_booth:十进制输出积。
测试波形。四、 体会。
经过两个礼拜的不懈努力,终于把最后的实验结果按要求完成了。从一开始的一头雾水到逐渐明白了方向,了解了该如何操作。一切都是对未知知识上下求索。
虽然团队只有三个人,但是我们互相协助,各司其职,每个人分派自己的任务,并且每天按时按量完成;虽然我们三个人的基础不是很好,但是我们齐心协力,把劣势变成优势,把压力当成动力,每天在实验室忙完了还会主动的在寝室把没有做完的模块继续完善,或者把不了解的部分通过网上查资料、查课本、问同学等方式逐渐弄明白。
整个课程设计的过程中,老师和研究生学长以及周围的同学也给了我们很大的帮助,对于一些我们不了解的知识他们都无私的分享给我们。在此,特别向课程设计过程中那些帮助过我们的人表示我诚挚的谢意!
虽然两个礼拜时间不是很长,但那种做项目时沉心静气的心态以后值得继续保持!
课程设计实验报告
成都理工大学。课程名称程序设计。院系信科院数字 技术系 班级。所属小组。姓名。学号。指导教师何建军。2012年月日。课程设计要求 课程设计的目的检验学生对相应知识体系掌握程度。对学生来说是全面展示自己的理论知识掌握程度 综合编程实践能力以及写作能力。这对未来的工作有较好的帮助,希望各位同学认真对待,...
课程设计报告FPGA
课程设计报告。自动售货机。学院 电子与通信工程学院。班级 微电子1班。姓名 刁飞鹏。学号 09110038 自动售货机设计。任务分析。任务要求利用开发系统板,设计一个自动售货机控制芯片。自动售货机平时处于待机状态,当有钱投入之后开始工作。利用三个按键作为投币信号,分别代表投币5元 10元 20元,投...
FPGA课程设计报告
课程名称 fpga 系部信息工程系 专业班级。学生姓名。班级学号。指导老师。一 实验目的与要求。1 要独立完成测试题目,通过使用matlab simulink system generator进行模型的设计,锻炼自己综合运用所学知识的能力。2 熟练掌握matlab simulink system g...