有符号5位整数乘法器设计与制作.docx
- 文档编号:27167679
- 上传时间:2023-06-27
- 格式:DOCX
- 页数:17
- 大小:191.55KB
有符号5位整数乘法器设计与制作.docx
《有符号5位整数乘法器设计与制作.docx》由会员分享,可在线阅读,更多相关《有符号5位整数乘法器设计与制作.docx(17页珍藏版)》请在冰豆网上搜索。
有符号5位整数乘法器设计与制作
有符号5位整数乘法器设计与制作
论文
指导老师
专业:
姓名:
学号:
摘要3
一.设计方案与比较3
二.系统整体设计5
(一)整体设计5
(二)模块设计6
1.输入模块6
2.乘法模块7
3.选择模块7
4.符号显示模块9
5.进制转换模块10
6.显示模块11
三.设计中遇到的问题及解决方法14
四.设计心得及建议14
五.参考文献14
摘要
本设计以ALTERA公司开发的MAX+PLUS2软件为平台,以VHDL语言混合部分VerilogHDL语言为开发语言,利用MAX+PLUS2软件进行可编程逻辑器件设计,运用移位相加的原理,完成有符号5位整数乘法器的逻辑仿真功能,并下载到实验箱进行调试和验证所设计的乘法器的功能。
关键词:
有符号5位整数乘法器移位相加MAX+PLUS2VHDL语言
一、方案设计与比较
1.开发语言的选择
方案一:
采用VHDL语言。
VHDL语言具有较强的行为描述能力,对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管最终设计实现的目标器件是什么,而进行独立的设计。
但VHDL在描述门电路的能力上却不如VeriologHDL语言。
方案二:
采用VerilogHDL语言
VerilogHDL语言是一种广泛的硬件描述语言,可用于从算法,门级到开关的多种抽象层次的数字系统设计。
VerilogHDL语言在高级描述方面不如VHDL。
由于一直准备的是VHDL语言,所以主要选择VHDL,但在设计数据转换模块的设计时,选择了VerilogHDL语言,节省了空间。
2.乘法器实现方法的设计
移位相加法
两个二进制数相乘如十进制数相乘一样。
如图1为四位数做徒手乘法运算图。
首先由右至左一次检查乘数位是否为1,如为1,将被乘数做适当的移位至适当的位置;如为0,将0放置适当位置。
其次将所有移位被乘数求和就为所求子积。
图2为乘法器采用相似方法进行计算时的情形,利用累加器来完成,即每一步中一个4位加法器可用来计算其新的部分乘积。
图1徒手乘法图2乘法器
三、系统整体设计
基本要求:
设计一个两个5位数相乘的乘法器。
用发光二极管显示输入数值,用7段显示器显示十进制结果。
乘数和被乘数分两次输入。
扩展部分:
在输入乘数和被乘数时,要求显示十进制输入数据。
输入显示和计算结果显示,采用分时显示方式进行,可参见计算器的显示功能。
(一)整体设计
首先通过实验箱输入5为二进制数,首位为符号位,通过输入端使符号位与数值位分开,将数值输入乘法器,并在脉冲上升沿进行操作控制,设乘数为A(不包括符号位)由右至左依次检查数位是否为1,如为1,将被乘数输入乘法模块进行选择输出,并将乘数低位舍去;如为0,输入CHOOSE模块为0占位,每次输入乘法块的数结果都向左移一位。
其次将所有移位数求和就为所求积,利用累加器来完成,通过二进制转化十进制进行输出,输入到显示数码管显示。
符号位利用一个或非门实现两数相乘时符号的变化并用数码管显示在输出的高位。
设计的思路框图如下:
整体模块如下:
仿真整体波形如下:
(二)模块设计
1.输入模块
输入模块选择了有八位D触发器构成的8dff,输入模块图形及功能表如下:
2.乘法模块
接收由输入模块传进来的数据,定义5个变量R,T,H,S,Q分别从低到高判断乘数B每位是否为零,若不为零,将被乘数A赋值给变量R,T,H,S,若为零则赋值0,并且每位的首位递增一位0,最后实现累加,由变量R输出。
乘法模块图形如下:
仿真波形如下:
乘法模块源代码如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCHENGFAIS
PORT(A:
INSTD_LOGIC_VECTOR(4DOWNTO1);
B:
INSTD_LOGIC_VECTOR(4DOWNTO1);
Q:
OUTSTD_LOGIC_VECTOR(8DOWNTO1));
ENDCHENGFA;
ARCHITECTUREAOFCHENGFAIS
SIGNALR:
STD_LOGIC_VECTOR(4DOWNTO1);
SIGNALT:
STD_LOGIC_VECTOR(5DOWNTO1);
SIGNALH:
STD_LOGIC_VECTOR(6DOWNTO1);
SIGNALS:
STD_LOGIC_VECTOR(7DOWNTO1);
BEGIN
R<=AWHENB
(1)='1'ELSE"0000";
T<=A&'0'WHENB
(2)='1'ELSE"00000";
H<=A&"00"WHENB(3)='1'ELSE"000000";
S<=A&"000"WHENB(4)='1'ELSE"0000000";
Q<=R+T+H+S;
ENDA;
3.选择模块设计
此模块是用来对显示数码管上所显示的数据进行选择显示的,若当前输入端的端口控制变量S1和S2时显示第一个数据前四位用0占位,若当前输入端的端口控制变量S1和S2为00时显示第二个数据前四位用0占位,若当前输入端的端口控制变量S1和S2为01时显示最终结果,QOUT为输出端口。
符号位用FIN端口接收,FUHAO端口输出。
选择模块图形如下:
仿真波形如下:
选择模块源代码如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCHOOSERIS
PORT(LOADA,LOADB,CLK:
INSTD_LOGIC;
RAIN:
INSTD_LOGIC_VECTOR(4DOWNTO1);
RBIN:
INSTD_LOGIC_VECTOR(4DOWNTO1);
DIN:
INSTD_LOGIC_VECTOR(8DOWNTO1);
FA,FB,FIN:
INSTD_LOGIC;
QOUT:
OUTSTD_LOGIC_VECTOR(8DOWNTO1);
FU:
OUTSTD_LOGIC);
ENDCHOOSER;
ARCHITECTUREARTOFCHOOSERIS
BEGIN
PROCESS(LOADA,LOADB,CLK)
BEGIN
IFCLK'EVENTANDCLK='1'THEN
IFLOADA='1'ANDLOADB='0'THEN
QOUT<="0000"&RAIN;FU<=FA;
ELSIFLOADA='0'ANDLOADB='0'THEN
QOUT<="0000"&RBIN;FU<=FB;
ELSE
QOUT<=DIN;FU<=FIN;
ENDIF;
ENDIF;
ENDPROCESS;
ENDART;
4.符号显示模块
此模块是对输出符号进行输出判断的,符号位对应一数码显示管直接作为输出端口输出,当其符号位为正时—数码显示管全灭“11111111”,当其符号位为负时—数码显示管G亮“10111111”。
为使小数点去除,使最高位DOT位也为1。
符号模块图形如下:
仿真波形如下:
符号模块源代码如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYFUIS
PORT(F:
INSTD_LOGIC;
Q4:
OUTSTD_LOGIC_VECTOR(8DOWNTO1));
ENDFU;
ARCHITECTUREARTOFFUIS
BEGIN
--PROCESS(F)
--BEGIN
Q4<="11111111"WHENF='0'ELSE"10111111";
--IF(F='0')THENQ4<="11111111";
--ELSEQ4<="10111111";
--ENDIF;
--ENDPROCESS;
ENDART;
5.进制转换
进制转换模块是用来对结果进行二进制到十进制转换的,便于在显示数码管上显示。
定义3个变量A1,A2,A3,并赋初值为0,从高到低判断输入的数据LDB的个个位,首先是百位,若大于一百,则A3加1,LDB减去100;然后是十位,若大于十,则A2加1,LDB减去10;最后是个位,直接将LDB剩余值赋值给A1。
依次将A1,A2,A3赋值给Q1,Q2,Q3输出。
进制转换模块图形如下:
仿真波形如下:
进制转换源代码(VerilogHDL语言)如下:
modulefrom2to10(DB,clk,Q1,Q2,Q3);
input[7:
0]DB;
inputclk;
output[3:
0]Q1,Q2,Q3;
reg[3:
0]A1,A2,A3,Q1,Q2,Q3;
reg[8:
0]LDB;
reg[2:
0]step;
always@(posedgeclk)
begin
case(step)
0:
begin
LDB[7:
0]<=DB[7:
0];
A1<=0;
A2<=0;
A3<=0;
step<=1;
end
1:
begin
if(LDB>=100)
begin
A3<=A3+1;
LDB<=LDB-100;
end
elseif((LDB>=10)&&(LDB<100))
begin
A2<=A2+1;
LDB<=LDB-10;
end
elseif((LDB>=1)&&(LDB<10))
begin
A1<=LDB;
LDB<=0;
end
else
begin
step<=2;
end
end
2:
begin
Q1<=A1;
Q2<=A2;
Q3<=A3;
step<=0;
end
default:
step<=0;
endcase
end
endmodule
6.显示模块
此模块是用来对最终结果对应数码显示管进行显示操作的,其输入端口若为0,1,2,3,4,5,6,7,8,9,对应的输出端Q1,Q2,Q3"11000000";"11111001";"10100100";"10110000";"10011001";"10010010";"10000010";"11011000";"10000000";"10010000";"11111111";并且此显示管加入了去零功能,若百位为零且十位也为零,则不显示十位和百位,若只有百位为零则只有百位不显示,若都为零则只有个位显示0。
显示模块图形如下:
仿真波形如下:
显示模块源代码如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYjixianshiIS
PORT(Q1,Q2,Q3:
INSTD_LOGIC_VECTOR(4DOWNTO1);
D1,D2,D3:
OUTSTD_LOGIC_VECTOR(8DOWNTO1));
ENDjixianshi;
ARCHITECTUREARTOFjixianshiIS
BEGIN
PROCESS(Q1,Q2,Q3)
VARIABLET0,T1,T2,T3,T4,T5,T6,T7,T8,T9,TT:
STD_LOGIC_VECTOR(8DOWNTO1);
BEGIN
T0:
="11000000";
T1:
="11111001";
T2:
="10100100";
T3:
="10110000";
T4:
="10011001";
T5:
="10010010";
T6:
="10000010";
T7:
="11011000";
T8:
="10000000";
T9:
="10010000";
TT:
="11111111";
CASEQ1IS
WHEN"0000"=>D1<=T0;
WHEN"0001"=>D1<=T1;
WHEN"0010"=>D1<=T2;
WHEN"0011"=>D1<=T3;
WHEN"0100"=>D1<=T4;
WHEN"0101"=>D1<=T5;
WHEN"0110"=>D1<=T6;
WHEN"0111"=>D1<=T7;
WHEN"1000"=>D1<=T8;
WHEN"1001"=>D1<=T9;
WHENOTHERS=>D1<=T0;
ENDCASE;
IF(Q3/="0000")THEN
CASEQ2IS
WHEN"0000"=>D2<=T0;
WHEN"0001"=>D2<=T1;
WHEN"0010"=>D2<=T2;
WHEN"0011"=>D2<=T3;
WHEN"0100"=>D2<=T4;
WHEN"0101"=>D2<=T5;
WHEN"0110"=>D2<=T6;
WHEN"0111"=>D2<=T7;
WHEN"1000"=>D2<=T8;
WHEN"1001"=>D2<=T9;
WHENOTHERS=>D2<=T0;
ENDCASE;
ELSE
CASEQ2IS
WHEN"0000"=>D2<=TT;
WHEN"0001"=>D2<=T1;
WHEN"0010"=>D2<=T2;
WHEN"0011"=>D2<=T3;
WHEN"0100"=>D2<=T4;
WHEN"0101"=>D2<=T5;
WHEN"0110"=>D2<=T6;
WHEN"0111"=>D2<=T7;
WHEN"1000"=>D2<=T8;
WHEN"1001"=>D2<=T9;
WHENOTHERS=>D2<=T0;
ENDCASE;
ENDIF;
CASEQ3IS
WHEN"0000"=>D3<=TT;
WHEN"0001"=>D3<=T1;
WHEN"0010"=>D3<=T2;
WHENOTHERS=>D3<=T0;
ENDCASE;
ENDPROCESS;
ENDART;
三.设计中遇到的问题及解决方法
在设计中尽管在理论和仿真都正确的前提下,在实际试验中在显示了第一个输入的数字以后,在输入乘数时则立即显示积,当运算结束后,才能显示乘数,一直没能找出原理,清老师指点。
四.设计心得及建议
这次课程设计让我对数字电路有了一个新的认识,在上学期学习数字电路时做过的实验只是去验证一些老师给的实验,但是这次课程设计是给我们一个课题,让同学们自行去设计,去把上学期学习的数字电路的知识根据自己的需要选择运用,组合成一个系统,我觉得这就是工科大学的特点,所有东西都要考虑整个系统,也为我们以后的学习工作打下基础。
同时要求我们在一定的时间内去掌握一门新的硬件描述语言,这是在对我们的效率意识的训练。
同时建议实验室更新一下实验设备,在调试过程中很多都只能等着用一个试验箱。
五.参考文献:
[1]《基础电子设计与实践》 戴伏生主编 北京 国防工业出版社2002
[2]《硬件描述语言实验指导》曲波主编 苏州大学出版社2004
[3]《数字逻辑与VHDL设计》侯树文主编中国水利水电出版社2004
[4]《VHDL设计实力与仿真》姜雪松等编著机械工业出版社2007
[5]《VerilogHDL程序设计教程》王金明编著人民邮电出版社2005
[6]《数字电子技术基础》阎石编著高等教育出版社2006
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 符号 整数 乘法器 设计 制作
![提示](https://static.bdocx.com/images/bang_tan.gif)