16位定点数原码一位乘法器的设计与实现课程设计报告.docx
《16位定点数原码一位乘法器的设计与实现课程设计报告.docx》由会员分享,可在线阅读,更多相关《16位定点数原码一位乘法器的设计与实现课程设计报告.docx(10页珍藏版)》请在冰豆网上搜索。
16位定点数原码一位乘法器的设计与实现课程设计报告
(此文档为word格式,下载后您可任意编辑修改!
)
计算机科学与工程学院
课程设计报告
题目全称:
16位定点数原码一位乘法器的设计与实现
课程名称:
计算机组成原理
指导老师:
谭浩职称:
序号
学生姓名
学号
班号
成绩
1
刘晓窗
6
2
李育桥
5
3
郭建准
4
李浩
5
李志飞
6
7
8
9
10
(注:
学生姓名填写按学生对该课程设计的贡献及工作量由高到底排列,分数按排名依次递减。
序号排位为“1”的学生成绩最高,排位为“10”的学生成绩最低。
)
指导老师评语:
签字:
摘要
VerilogHDL语言具有下述描述能力:
设计的行为特性、设计的数据流特性、设计的结构组成以及包含响应监控和设计验证方面的时延和波形产生机制。
本实验用VerilogHDL语言设计了全加器实现的组合乘法器,通过功能仿真,验证了结果。
关键词:
乘法器,Verilog,组合逻辑,全加器
ABSTRACT
Text….
Keywords:
目录
(自动插入目录)
第一章绪论1
1.1选题背景及意义1
1.2国内外研究现状1
1.3主要内容与章节安排1
1.4本章小结1
第二章课程设计的需求分析3
2.1环境需求3
2.2功能需求3
2.3性能需求3
2.3本章小结3
第三章****的设计5
3.1总体设计5
3.2功能模块设计5
3.3本章小结5
第四章****的实现7
4.1开发环境介绍7
4.2主要功能模块的实现7
4.3本章小结7
第五章测试及成果展示9
5.1测试环境9
5.2测试用例和结果9
5.3成果展示9
5.4本章小结9
第六章总结与展望11
参考文献12
第一章绪论
1.1选题背景及意义
随着计算机科学技术的发展,人们获得信息的途径更加多样,获取信息的速度更加快捷。
硬件的发展允许程序员编出很多精彩的使用软件,也使得计算机更加普及。
中央处理器CPU的好坏是影响和制约计算机速度和性能的关键因素。
而加法器是组成CPU的的重要部件,一般运算速度的快慢就取决与每秒执行加法的次数,加法器是算术逻辑单元中的基本逻辑器件。
例如:
为了节省资源,减法器和硬件乘法器都可由加法器来构成。
1.2国内外研究现状
1.3主要内容与章节安排
1.4本章小结
第二章课程设计的需求分析
2.1环境需求
PC、win7、ise7.1、xc3s100e-4vq100芯片、
2.2功能需求
x、y为两个16位定点数,z为32位数,作为输出。
实现16位定点数乘法。
2.3性能需求
2.3本章小结
第三章16位乘法器的设计
3.1总体设计
3.2功能模块设计
3.3本章小结
第四章****的实现
4.1开发环境介绍
4.2主要功能模块的实现
modulemulti16(x,y,clock,z);
input[15:
0]x,y;定义乘数
inputclock;定义时钟clock
output[31:
0]z;定义和的输出z
reg[15:
0]reg_x;定义寄存器x
reg[15:
0]reg_y;定义寄存器y
reg[31:
0]reg_z;定义寄存器z
wire[16:
0]p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15;定义分别用来存储a十六位与b的每一位相与的结果
wire[75:
0]j1,k1;
wire[50:
0]j2,k2;
wire[32:
0]j3,k3;
wire[22:
0]j4,k4;
wire[15:
0]j5,k5;
wire[6:
0]j6,k6;
wire[2:
0]j7,k7;
wire[8:
0]j8,k8;
wire[21:
0]j9,k9;
assignz=reg_z;将寄存器z的内容赋给输出和z
always@(posedgeclock)时序逻辑语句块
begin
reg_x<=x;将加数x的值存到寄存器reg_x中
reg_y<=y;将被加数y的值存到寄存器reg_y中
reg_z<={j9[21],k9[21],k9[20],k9[19],k9[18],k9[17],k9[16],k9[15],k9[14],k9[13],k9[12],
k9[11],k9[10],k9[9],k9[8],k9[7],k9[6],k9[5],k9[4],k9[3],k9[2],k9[1],k9[0],k8[0],k7[0],
k6[0],k5[0],k4[0],k3[0],k2[0],k1[0],p0[0]};分别求得的和的每一位赋给reg_z
end
对a的16位与b的每一位相与
pppp0(reg_x,reg_y[0],p0);
pppp1(reg_x,reg_y[1],p1);
pppp2(reg_x,reg_y[2],p2);
pppp3(reg_x,reg_y[3],p3);
pppp4(reg_x,reg_y[4],p4);
pppp5(reg_x,reg_y[5],p5);
pppp6(reg_x,reg_y[6],p6);
pppp7(reg_x,reg_y[7],p7);
pppp8(reg_x,reg_y[8],p8);
pppp9(reg_x,reg_y[9],p9);
pppp10(reg_x,reg_y[10],p10);
pppp11(reg_x,reg_y[11],p11);
pppp12(reg_x,reg_y[12],p12);
pppp13(reg_x,reg_y[13],p13);
pppp14(reg_x,reg_y[14],p14);
pppp15(reg_x,reg_y[15],p15);
调用全加器与半加器,通过实例化求得和的每一位与每位的进位信号
sum,co);
inputa,b,cin;加数a,b,低位进位信号cin
outputsum,co;和sum,进位信号co
assignsum=a^b^cin;对sum求值
assignco=(a&b)|(a&cin)|(b&cin);对co求值
endmodule
定义半加器模块
modulesum=a^b;对sum求值
assignco=a&b;对co求值
endmodule
用来对被加数b的每一位是1,0进行判别及与加数a相与
modulepp(a,b,c);
input[16:
0]a;
inputb;
output[16:
0]c;
assignc[0]=a[0]&b;
assignc[1]=a[1]&b;
assignc[2]=a[2]&b;
assignc[3]=a[3]&b;
assignc[4]=a[4]&b;
assignc[5]=a[5]&b;
assignc[6]=a[6]&b;
assignc[7]=a[7]&b;
assignc[8]=a[8]&b;
assignc[9]=a[9]&b;
assignc[10]=a[10]&b;
assignc[11]=a[11]&b;
assignc[12]=a[12]&b;
assignc[13]=a[13]&b;
assignc[14]=a[14]&b;
assignc[15]=a[15]&b;
endmodule
4.3本章小结
第五章测试及成果展示
5.1测试环境
5.2测试用例和结果
一下截图为3*5和3*7的结果截图:
Copyright(c)Xilinx,Inc.
AllRightReserved.
________
\
___\Vendor:
Xilinx
\\\Version:
7.1i
\\Application:
ISEFoundation
Filename:
tett.tfw
___\Timestamp:
WedDec1720:
41:
282014
\\\
\___\\___\
Command:
DesignName:
tett
Device:
Xilinx
`timescale1ns1ps
moduletett;
reg[15:
0]x=16'b0011;
reg[15:
0]y=16'b0101;
regclock=1'b0;
wire[31:
0]z;
parameterPERIOD=200;
parameterrealDUTY_CYCLE=0.5;
parameterOFFSET=0;
initialClockprocessforclock
begin
#OFFSET;
forever
begin
clock=1'b0;
#(PERIOD-(PERIOD*DUTY_CYCLE))clock=1'b1;
#(PERIOD*DUTY_CYCLE);
end
end
multi16UUT(
.x(x),
.y(y),
.clock(clock),
.z(z));
integerTX_FILE=0;
integerTX_ERROR=0;
initialbeginOpentheresultsfile...
TX_FILE=$fopen("results.txt");
#1200Finaltime:
1200ns
if(TX_ERROR==0)begin
$display("Noerrorsorwarnings.");
$fdisplay(TX_FILE,"Noerrorsorwarnings.");
endelsebegin
$display("%derrorsfoundinsimulation.",TX_ERROR);
$fdisplay(TX_FILE,"%derrorsfoundinsimulation.",TX_ERROR);
end
$fclose(TX_FILE);
$stop;
end
initialbegin
-CurrentTime:
285ns
#285;
y=16'b0111;
-
end
taskCHECK_z;
input[31:
0]NEXT_z;
#0begin
if(NEXT_z!
==z)begin
$display("Errorattime=%dnsz=%b,expected=%b",$time,z,NEXT_z);
$fdisplay(TX_FILE,"Errorattime=%dnsz=%b,expected=%b",$time,z,NEXT_z);
$fflush(TX_FILE);
TX_ERROR=TX_ERROR+1;
end
end
endtask
endmodule
5.3成果展示
5.4本章小结
第六章总结与展望
参考文献