数字逻辑与数字系统课程设计简单计算器.docx
- 文档编号:29750634
- 上传时间:2023-07-26
- 格式:DOCX
- 页数:14
- 大小:449.86KB
数字逻辑与数字系统课程设计简单计算器.docx
《数字逻辑与数字系统课程设计简单计算器.docx》由会员分享,可在线阅读,更多相关《数字逻辑与数字系统课程设计简单计算器.docx(14页珍藏版)》请在冰豆网上搜索。
数字逻辑与数字系统课程设计简单计算器
简单计算器
一、设计分析
1、功能描述
设计一个简单0-9数之间的加、减、乘法运算的计算器,,输入和输出均可以显示在数码管上。
2、实现工具
1、用VHDL语言文本形式输入;
2、maxplusII行语言编写时序仿真和综合。
二、设计思想
采用自顶向下的设计方式,分层进行设计。
设计分为五个模块进行;
计算器模块、八位二进制数转化成8421BCD码模块,四选一数据选择器模块,七段显示译码器模块、模4计数器模块、模8计数器块、3—8译码器块。
顶层设计可以完全独立于目标器件芯片物理结构的硬件描述语言。
使用VHDL模型在所综合级别上对硬件设计进行说明、建模和仿真。
1、顶层原原理框图
2、具体实现
1、计算器模块、
2、八位二进制数转化成8421BCD码模块
3、四选一数据选择器模块
4、七段显示译码器模块
5、模4计数器模块
6、模8计数器块
7、3—8译码器块
三、设计过程
1、建立工程
建立一个Project,命名为jiandanjisuanqi。
将各个模块生成的文件放在同一个文件夹下。
2、文本输入
将各个模块的VHDL代码输入,保存并综合。
3、仿真
建立各个模块的gdf图,设置输入波形并仿真。
4、顶层原理图输入
利用各个模块生成的sym文件建立顶层原理图,编译并仿真。
5、硬件实现
实验室提供的器件为FLEX10K,型号为EPF10K10LC84-4,将文件下载到器件当中,在实验箱中进行模拟。
四、整体框图
五、VHDL部分代码及说明
1、计算器模块、
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
entityjisuanqiis
Port(a,b:
inSTD_LOGIC_VECTOR(3downto0);
sel:
inSTD_LOGIC_VECTOR(1downto0);-----加减乘控制端
s:
outSTD_LOGIC_VECTOR(7downto0));
endjisuanqi;
architectureBehavioralofjisuanqiis
signalq1,q2:
STD_LOGIC_VECTOR(3downto0);
signalq3:
STD_LOGIC_VECTOR(7downto0);
signalq4:
STD_LOGIC_VECTOR(1downto0);
begin
q1<=a;
q2<=b;
q4<=sel;
process(q4,q3)
begin
caseq4is
when"00"=>----加减乘算法
q3<=q1+q2;
s<=q3;
when"01"=>
if(q1>q2)then
q3<=q1-q2;
s<=q3;
else
q3<=q2-q1;
s<=q3;
endif;
when"10"=>
q3<=q1*q2;
s<=q3;
when"11"=>
q3<=q1*q2;
s<=q3;
whenothers=>
q3<="00000000";
s<=q3;
endcase;
endprocess;
endBehavioral;
2、八位二进制数转化成8421BCD码模块
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
entitybcdis
Port(s:
inSTD_LOGIC_VECTOR(7downto0);
a:
outSTD_LOGIC_VECTOR(3downto0);
b:
outSTD_LOGIC_VECTOR(3downto0));
endbcd;
architectureBehavioralofbcdis
signalq0:
STD_LOGIC_VECTOR(7downto0);
signalq1:
STD_LOGIC_VECTOR(3downto0);
signalq2:
STD_LOGIC_VECTOR(3downto0);
begin
process(s)
begin
q0<=s;
caseq0is----把八位二进制数转化为8421BCD码
when"00000000"=>
q1<="0000";q2<="0000";
when"00000001"=>
q1<="0000";q2<="0001";
when"00000010"=>
q1<="0000";q2<="0010";
when"00000011"=>
…………………………….
3、四选一数据选择器模块
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_signed.all;
entitymux4_1is
port(
d0,d1,d2,d3:
instd_logic_vector(3downto0);
q:
outstd_logic_vector(3downto0);
sel:
instd_logic_vector(1downto0));
endmux4_1;
architecturertlofmux4_1is
begin
process(sel)
begin------实现从四个数据中选择一个出来
if(sel="00")then
q<=d0;
elsif(sel="01")then
q<=d1;
elsif(sel="10")then
q<=d2;
elsif(sel="11")then
q<=d3;
endif;
endprocess;
endrtl;
4、七段显示译码器模块
libraryieee;
useieee.std_logic_1164.all;
entitybcd_7disis
port(bcdm:
instd_logic_vector(3downto0);
a,b,c,d,e,f,g:
outstd_logic);
endbcd_7dis;
architectureartofbcd_7disis
signalw:
std_logic_vector(6downto0);
begin
process(bcdm)
begin
a<=w(6);b<=w(5);c<=w(4);d<=w(3);e<=w
(2);f<=w
(1);g<=w(0);
casebcdmis-----实现8421码转化为2进制码的转换
when"0000"=>w<="1111110";
when"0001"=>w<="0110000";
when"0010"=>w<="1101101";
when"0011"=>w<="1111001";
when"0100"=>w<="0110011";
when"0101"=>w<="1011011";
when"0110"=>w<="1011111";
when"0111"=>w<="1110000";
when"1000"=>w<="1111111";
when"1001"=>w<="1111011";
when"1100"=>w<="0000001";
whenothers=>w<="0000000";
endcase;
endprocess;
endart;
5、模4计数器模块
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_signed.all;
entitymo4is
port(
q:
outstd_logic_vector(1downto0);
clk:
instd_logic);
endmo4;
architecturertlofmo4is
signalqcl:
std_logic_vector(1downto0);
begin
process(clk)
begin----实现模为4的计数
if(clk'eventandclk='1')then
if(qcl="11")then
qcl<="00";
else
qcl<=qcl+'1';
endif;
endif;
q<=qcl;
endprocess;
endrtl;
6、模8计数器块
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycount_8is
port(clk:
instd_logic;
ql:
outstd_logic_vector(2downto0));
endcount_8;
architecturert1ofcount_8is
signalqcl:
std_logic_vector(2downto0);
begin
process(clk)
begin----实现模8的计数
if(clk'eventandclk='1')then
if(qcl="111")then
qcl<="000";
else
qcl<=qcl+'1';
endif;
endif;
ql<=qcl;
endprocess;
endrt1;
7、3—8译码器块
libraryieee;
useieee.std_logic_1164.all;
entitydecode3_8is
port(d:
instd_logic_vector(2downto0);
y:
outstd_logic_vector(7downto0));
enddecode3_8;
architecturert1ofdecode3_8is
begin
process(d)
begin
casedis------实现3对8的译码
when"000"=>y<="10000000";
when"001"=>y<="01000000";
when"010"=>y<="00100000";
when"011"=>y<="00010000";
whenothers=>y<="00000000";
endcase;
endprocess;
endrt1;
六、各模块仿真结果
1、计算器模块
2、八位二进制数转化成8421BCD码模块
3.、四选一数据选择器模块
4、七段显示译码器模块
5、模4计数器模块
6、模8计数器块
7、3—8译码器块
8、整体仿真
七、管脚锁定及硬件实现
1、管脚锁定
2、文件下载
将文件下载完后在硬件实验箱中进行仿真检查。
八、总结
1问题及改正
经过几天的学习和上,,完成了文本的输入形式简单计算器的电路,在设计过程中出现了诸多问题。
首先是对VHDL语言接触的时间,小学期时间短,做课程设计感受很仓促,没有过多的时间去系统的学习这门课程。
不像C++这门语言课程设计是先经过了一个学期的学习再做的,那样感觉起来能从最根本的原理入手,在逐步提高,收获也较多。
其次是实验过程中解决问题的方法不多,实验室不能上网,无法从网上搜索解决的办法,书上有些知识描述的也不是太清楚。
最后是自己的原因,由于课程设计遇到的问题较多,自己没能保持好一个良好的心态,遇到问题很着急,影响了问题的解决和思考。
2、心得体会
经过几天的课程设计获益良多,有成功也有失败,有喜悦也有着急,但学习只是一个过程,在这个过程中才能使我们积累经验和逐渐成熟,在今后的学习和生活当中,要提高自己的分析问题和解决问题的能力,学会从不同的角度考虑问题。
九、感谢
几天的课程设计就要结束了,在此特别感谢沈老师孜孜不倦,呕心呖血,为了我们课程设计所做的一切,谢谢老师!
数字逻辑与数字系统课程设计
简单计算器
姓名_________邓燕周______________________
学院______计算机学院___________
班级______计101—2_____________
学号______201058501219_________
时间______2012-01-03_____________
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字 逻辑 系统 课程设计 简单 计算器