定点原码一位乘法器.docx
《定点原码一位乘法器.docx》由会员分享,可在线阅读,更多相关《定点原码一位乘法器.docx(19页珍藏版)》请在冰豆网上搜索。
定点原码一位乘法器
课程设计报告
课程设计名称:
计算机组成原理课程设计
课程设计题目:
定点原码一位乘法器的设计
院(系):
计算机学院
专业:
计算机科学与技术
班级:
学号:
姓名:
指导教师:
完成日期:
第1章总体设计方案
设计原理
原码一位乘,两个原码数相乘,其乘积的符号为相乘两数符号的异或值,数值则为两数绝对值之积。
例:
X=,Y=,计算乘积X*Y。
*
0000
1100
1100
1100
0.
在计算时,逐次按乘数每1位上的值是1还是0,决定相加数取被乘数的值还是取零值,而且相加数逐次向左偏移1位,最后一起求积。
由于在计算机内多个数据一般不能同时相加,一次加法操作只能求出两数之和,因此每求得一个相加数,就与上次部分积相加每次计算时,相加数逐次向左偏移一位,由于最后的乘积位数是乘数(被乘数)的两倍,因此加法器也需增到两倍。
部分积右移时,乘数寄存器同时右移一位,所以用乘数寄存器的最低位来控制相加数取被乘数或零,同时乘数寄存器接收部分积右移出来的一位,完成运算后,部分积寄存器保存乘积的高位部分,乘数寄存器中保存乘积的低位部分。
根据人工算法可以知道,原码一位乘法的整体设计应包括乘数寄存器,被乘数寄存器,移位电路,控制器,部分积五大模块,包含一个输入、输出、控制器模块,并作为顶层设计,以上五大模块作为底层设计,采用硬件器件设计实现。
因此,可以得出以下原理框图设计如图所示:
图原码一位乘的逻辑电路框图
如上逻辑框图中所示,其中B为被乘数寄存器,用来存放被乘数,C为乘数寄存器,用来存放乘数并且移位,A为部分积寄存器,存放每次相加并移位后的数据,ALU加法器实现加法操作,移位电路用来对相加后的数据作移位处理,计数器控制移位次数和输出结果。
设计环境
·硬件环境:
伟福COP2000型计算机组成原理实验仪、XCV200实验板、微机;
·EDA环境:
Foundation设计软件。
该设计由设计入口工具,设计实现工具,验证工具三大部分组成.入口工具包括原理图设计,有限状态编辑器,硬件描述语言编辑器等。
第2章详细设计方案
顶层方案图的设计与实现
顶层方案图实现原码一位乘的逻辑功能,采用原理图设计输入方式完成,电路实现基于XCV200可编程逻辑芯片。
在完成原理图的功能设计后,把输入/输出信号安排到XCV200指定的引脚上去,实现芯片的引脚锁定。
创建顶层图形设计文件
顶层图形文件由一个运算器模块组成,乘数X[7:
0],被乘数Y[7:
0],符号位XA,YA,脉冲CLK,清零端CLR,打入端LOAD,结果OUT[16:
0],顶层图设计如下:
图原码一位乘顶层图形文件结构
器件的选择与引脚锁定
(1)器件的选择
由于硬件设计环境是基于伟福COP2000型计算机组成原理实验仪和XCV200实验板,故采用的目标芯片为XlinxXCV200可编程逻辑芯片。
另外,在这次的设计中还有的涉及Verilog语言编程。
(2)引脚锁定
把顶层图形文件中的输入/输出信号安排到XlinxXCV200芯片指定的引脚上去,实现芯片的引脚锁定,各信号及XlinxXCV200芯片引脚对应关系如表所示。
表信号和芯片引脚对应关系
图形文件中的输入/输出信号
XCV200芯片引脚
X[0]
P47
X[1]
P48
X[2]
P49
X[3]
P50
X[4]
P53
X[5]
P54
X[6]
P55
X[7]
P56
Y[0]
P41
Y[1]
P40
Y[2]
P39
Y[3]
P38
Y[4]
P36
Y[5]
P35
Y[6]
P34
Y[7]
P33
CLK
P98
CLRR
P94
LOAD
P97
XA
P96
YA
P95
OUT[0]
P213
OUT[1]
P215
OUT[2]
P216
OUT[3]
P217
OUT[4]
P218
OUT[5]
P220
OUT[6]
P221
OUT[7]
P222
OUT[8]
P223
OUT[9]
P224
OUT[10]
P228
OUT[11]
P229
OUT[12]
P230
OUT[13]
P231
OUT[14]
P232
OUT[15]
P234
OUT[16]
P235
2.2第二层模块的设计与实现
根据以上原理设计分析与大概框图,可得出以下的第二层模块的设计,其中各大模块实现各部分功能。
图第二层模块框图
功能模块的设计与实现
根据第二层模块设计可知,整体设计由乘数寄存器,被乘数寄存器,移位电路,控制器,部分积五大模块,以下介绍各个模块的具体实现。
2.3.1移位模块的设计与实现
为了简化设计,采用了Verilog语言设计,用语言实现移位功能,XX[7:
0]表示输入,CO表示加法器的进位,CE表示使能端,CLR表示清零端,YY[7:
0]表示移位后的输出,CI标记移出去的那一位,其设计过程如下。
(1)创建Verilog源文件
moduleYIWEIDIANLU(YY,XX,CE,CO,CI,CLR);
output[7:
0]YY;
reg[7:
0]YY;
input[7:
0]XX;
inputCE;
inputCLR;
inputCO;
outputCI;
regCI;
always@(CLR)
begin
if(CLR)YY<=0;
else
begin
YY[7]<=CO;
YY[6]<=XX[7];
YY[5]<=XX[6];
YY[4]<=XX[5];
YY[3]<=XX[4];
YY[2]<=XX[3];
YY[1]<=XX[2];
YY[0]<=XX[1];
CI<=XX[0];
end
end
endmodule
(2)创建元件图形符号
图形符号如下:
(3)功能仿真
对创建的移位器件YIWEIDIANLU进行功能仿真,验证其功能的正确性。
可用XilinxFoundation编译器的Simulator模块实现。
功能仿真图如下:
表2.3.1移位器件功能表描述
XX[7:
0]
YY[7:
0]
CI
CO
CE
CLR
0F
07
1
0
1
0
0F
87
1
1
1
0
0F
00
0
0
1
1
从以上表中数据可以看出,当CLR为1时,该器件清零,输出YY[7:
0]为零,为零时,有移位功能,CO为移位后高位的补充值。
CI标记移出的那一位,用来送往乘数寄存器中移位的高位补充,CE为此器件的使能端,保证该器件工作,该器件成功创建。
2.3.2乘数移位模块的设计与实现
为了标记乘数移位前的最低位,设计CHENG寄存器,输入分别用DIN[7:
0]表示,移位后结果用Q[7:
0]表示,高位补充用SIN表示,移出的一位用KIN表示,其设计过程如下。
(1)创建Verilog源文件
moduleCHENG(LOAD,SIN,DIN,CLK,CLR,Q,KIN);
inputLOAD;
inputSIN;
input[7:
0]DIN;
inputCLK;
inputCLR;
output[7:
0]Q;
reg[7:
0]Q;
outputKIN;
regKIN;
always@(posedgeCLKorposedgeCLR)
begin
if(CLR)Q<=0;
elseif(LOAD)Q<=DIN;
else
begin
KIN<=Q[0];
Q<=Q>>1;
Q[7]<=SIN;
end
end
endmodule
(2)创建元件图形符号
元件符号如下:
(3)功能仿真
对创建的乘数移位寄存器(CHENG)进行功能仿真,验证其功能的正确性,可用XilinxFoundation编译器的Simulator模块实现。
功能仿真图如下:
表2.3.2乘数移位寄存器功能表描述
DIN
SIN
LOAD
CLK
CLR
KIN
Q7
09
0
1
上升沿
1
1
00
09
1
1
上升沿
0
1
09
09
0
0
上升沿
0
1
04
09
1
0
上升沿
0
1
84
从以上表中数据可以看出,当CLR为1时,该器件清零,输出Q[7:
0]为零,CLR为零时,有移位功能,SIN为移位后高位的补充值。
KIN标记移出的那一位,用来判断下次加法加零还是被乘数,CLK上升沿有效,保证该器件工作,该器件成功创建。
2.3.3选择模块的设计与实现
选择器XUAN2的输入分别用0,B[7:
0]表示,选择后结果输出用QOUT[7:
0]表示,选择信号用SO表示,其设计过程如下。
(1)创建Verilog源文件
moduleXUAN2(B,SO,QOUT);
input[7:
0]B;
inputSO;
output[7:
0]QOUT;
reg[7:
0]QOUT;
always@(SO)
begin
if(SO)QOUT<=B;
elseQOUT<=0;
end
endmodule
(2)创建元件图形符号
元件图形符号:
(3)功能仿真
对创建的选择器元件(XUAN2)进行功能仿真,验证其功能的正确性,可用XilinxFoundation编译器的Simulator模块实现。
功能仿真图如下:
表2.3.3选择器功能表描述
B[7:
0]
SO
QOUT[7:
0]
0E
1
0E
0E
0
00
从以上表中数据可以看出,当选择信号为1时,该器件输出QOUT[7:
0]为输入值B[7:
0],当选择信号为0时,该器件输出00,由功能表知,该器件成功创建。
2.3.4控制模块的设计与实现
设计为6位原码一位乘,计数器为模9计数器,上升沿计数,有清零功能,其设计过程如下。
(1)创建Verilog源文件
moduleJISHU(CLK,CLR,QOUT,CO);
inputCLK;
inputCLR;
output[3:
0]QOUT;
reg[3:
0]QOUT;
outputCO;
regCO;
always@(posedgeCLKorposedgeCLR)
begin
if(CLR)
begin
QOUT<=0;
CO<=1;
end
elseif(QOUT==9)
begin
QOUT<=0;
CO<=1;
end
else
begin
QOUT<=QOUT+1;
CO<=0;
end
end
endmodule
(2)创建元件图形符号
元件图形符号如下:
(3)功能仿真
对创建的计数器元件(JISHU)进行功能仿真,验证其功能的正确性,可用XilinxFoundation编译器的Simulator模块实现。
功能仿真图如下:
表2.3.4计数器功能表描述
CLK
CLR
CO
QOUT(次数)
上升沿有效
1
0
0~8
上升沿有效
0
1
9
从以上表中数据可以看出,当脉冲信号为上升沿时,该器件输出QOUT[7:
0]记录次数从0到9,当记满9次时,该器件CO输出1,其余CO输出都为0,由功能表知,该器件是一个模9的计数器,成功创建。
2.3.5其他模块的设计与实现
采用原有的XCV200可编程逻辑芯片加法器件ADD8实现电路中的加法,采用FD8CE8位寄存器存放部分积。
ADD8:
为8位的加法器,其中A[7:
0],B[7:
0]为两个输入端口,CO为向后一位的进位标志,CI为前一位向加法器的进位,OFL为溢出,S[7:
0]为结果输出。
FD8CE:
为8位寄存器,其中D[7:
0]为数据输入端口,CE为该器件的使能端,控制该器件工作,C为脉冲控制端,CLR为清零端,CLR为1时该器件清零,Q[7:
0]为数据输出端口,当脉冲有效,CLR无效,输出等于输入。
仿真调试
仿真调试主要验证设计电路逻辑功能、时序的正确性,本次设计为原码一位乘法,设计完成主要采用功能仿真方法对设计的电路进行仿真从而验证其电路功能的正确性。
(1)建立仿真波形文件及仿真信号选择
功能仿真时,首先建立仿真波形文件,选择仿真信号CLK,CLR,LOAD,数据输入X[7:
0],Y[7:
0],符号位输入XA,YA,结果输出OUT[16:
0],对以上选定的输入信号设置参数,验证输出信号的正确性,选定仿真信号和设置的参数如表所示。
表仿真信号选择和参数设置
输入信号
输出
信号
CLK
CLR
LOAD
X[7:
0]
Y[7:
0]
XA
YA
OUT
[16:
0]
上升沿
1
1
0
0
0
0
上升沿
0
1
0
0
上升沿
0
0
0
0
上升沿
0
0
0
0
上升沿
0
0
1
0
上升沿
0
0
0
1
上升沿
0
0
0
1
上升沿
0
0
0
0
(2)功能仿真结果与分析
功能仿真波形结果如图所示,仿真数据结果如表所示。
对表与表的内容进行对比,可以看出功能仿真结果是正确的,进而说明电路设计的正确
图功能仿真波形结果
表仿真数据结果
输入信号
输出
信号
CLK
CLR
LOAD
X[7:
0]
Y[7:
0]
XA
YA
OUT
[16:
0]
上升沿
1
1
0
0
0
0
0
0
0
3
0
上升沿
0
1
0
0
上升沿
0
0
0
0
上升沿
0
0
0
0
上升沿
0
0
1
0
上升沿
0
0
0
1
上升沿
0
0
0
1
上升沿
0
0
0
0
第3章编程下载与硬件测试
编程下载
功能仿真通过以后,经过编译,若成功,则编程下载功能,将得到的*.bit文件,然后下载到XCV200实验板的XCV200可编程逻辑芯片中。
由于此次设计编译有点问题,不能通过,最终没能成功下载,试验没能完美的完成,有点遗憾,分析其原因,可能是由于Verilog语言设计不太成熟,编译虽然没有什么问题,可下载时要求比较严格,没能通过。
3.2硬件测试及结果分析
XCV200实验板信号对应关系
XCV200芯片引脚信号
XCV200实验板
X[7:
0]
K0
Y[7:
0]
K1
XA
K2(0)
YA
K2
(1)
LOAD
K2
(2)
CLRR
K2(3)
CLK
K2(4)
OUT[7:
0]
D0
利用表中的参数作为输入数据,逐个测试输出结果,即用XCV200实验板的开关输入数据,观察输出OUT[16:
0]。
参考文献
[1]曹昕燕.EDA技术实验与课程设计[M].北京:
清华大学出版社,2006
[2]范延滨.微型计算机系统原理、接口与EDA设计技术[M].北京:
北京邮电大学出版社,2006
[3]王爱英.计算机组成与结构(第4版)[M].北京:
清华大学出版社,2006
[4]李勇.计算机原理与设计(修订本).长沙:
国防科技大学出版社,1989
[5]王尔乾.数字逻辑与数字集成电路.北京:
清华大学出版社,1996
[6]白中英.计算机组成原理.北京:
科学出版社,1994
[7]杨天行.计算机技术.北京:
国防工业出版社,1999
附录(电路原理图)
图
(一)
课程设计总结:
主要从以下几方面总结:
1.在这次组成原理设计实验中,遇到了很多问题,刚开始的设计思想有点麻烦,用了三个8位的寄存器,两个8位的移位寄存器,总体有三个不同的脉冲控制端,两个不同的LOAD打入端,一个总清零端CLR,有X,Y,两个8位的数据输入,一个17位的结果输出,但封装下载有相当大的困难,因为下载时只可以有一个脉冲控制端口,在老师的提点下,改进了原有的电路图,去掉一个8位的移位寄存器,,省掉了原有的很多不必要的麻烦。
另外又加入了计数器控制原有电路,解决了很多原有的问题。
2.这次题目为原码一位乘法器的设计,通过运用库中原有器件或运用Verilog语言编程实现所需模块的设计,最终实现原码一位乘,输入X,Y,及其符号XA,YA,即可求得并输出结果。
3.通过这次实验设计,了解了许多计算机组成原理知识,并学会了简单运用Verilog语言编程实现所需各个器件,知道了自己在设计方面的不足和所需要学习的知识,在这次设计中指导老师给予了我很大的帮助,在以后的学习和实验中会更加努力的学习,弥补自己的不足。
指导教师评语:
指导教师(签字):
年月日
课程设计成绩