利用拨码开关控制点阵进行汉字.docx
《利用拨码开关控制点阵进行汉字.docx》由会员分享,可在线阅读,更多相关《利用拨码开关控制点阵进行汉字.docx(11页珍藏版)》请在冰点文库上搜索。
![利用拨码开关控制点阵进行汉字.docx](https://file1.bingdoc.com/fileroot1/2023-5/8/d5b6b974-4bf2-4f8b-b43e-1b206c33b666/d5b6b974-4bf2-4f8b-b43e-1b206c33b6661.gif)
利用拨码开关控制点阵进行汉字
1、课程设计目的
1.学习操作数字电路设计实验开发系统,掌握点阵显示模块的工作原理及应用。
2.掌握组合逻辑电路、时序逻辑电路的设计方法。
3.学习掌握可编程器件设计全过程。
2、课程设计内容和要求:
2.1、设计内容
利用拨码开关控制点阵进行汉字显示,包括可调数字信号源、拨码开关控制模块以及点阵显示模块。
2.2、设计要求
1.学习掌握拨码开关控制模块、点阵模块的工作原理及应用;
2.熟练掌握VHDL编程语言,编写拨码开关控制模块的控制逻辑;
3.仿真所编写的程序,模拟验证所编写的模块功能;
4.下载程序到芯片中,硬件验证所设置的功能,能够实现汉字的显示;
5.整理设计内容,编写设计说明书。
3、设计方案及实现情况
3.1、设计思路
根据题目设计要求,本系统拟采用自顶向下设计方法,顶层采用原理图设计方法,将整个系统分为分频模块、拨码开关控制模块、点阵显示三个模块。
通过对各模块编写程序实现模块功能,最后将三个模块进行综合实现整个系统的功能,通过拨码开关控制点阵进行汉字显示。
3.2、工作原理及框图
系统的输入信号有:
分频器时钟信号clk,按键控制cn[1..0]。
系统的输出信号有:
点阵数据输出q[0..15],列选择信号输出sel[0..3]。
系统通过拨码开关高低电位来控制按键cn[1..0],外加分频时钟信号clk控制输出sel[0..3],控制最终的输出端q[0..15]。
整体设计原理图如图1:
图1系统整体设计原理图
3.3、各模块功能描述
(1)分频模块,对时钟进行分频,原理图如图2
图2分频模块原理图
程序代码如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
useieee.std_logic_arith.all;
entityfenpinis
port(clk:
instd_logic;
clkout:
outstd_logic);
endfenpin;
architecturexxxoffenpinis
signala:
std_logic;
signaln:
std_logic_vector(2downto0);
begin
process(clk)
begin
ifclk'eventandclk='1'then
ifn="100"then
n<="000";
a<=nota;
else
n<=n+1;
endif;
endif;
endprocess;
clkout<=a;
endxxx;
(2)功能控制模块模块(cnta):
利用时钟进行十六进制计数,控制列信号从0000-1111变化,原理图如图3
图3cnta模块原理图
程序代码如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycntais
port(clk:
instd_logic;
q:
outstd_logic_vector(0to3));
endcnta;
architecturexxxofcntais
begin
process(clk)
variableqwe:
std_logic_vector(3downto0);
begin
ifclk'eventandclk='1'then
ifqwe="1111"then
qwe:
="0000";
else
qwe:
=qwe+1;
endif;
endif;
q<=qwe-1;
endprocess;
endxxx;
(3)点阵显示模块(cora):
此模块对应产生列选择信号,通过拨码开关ch[1..0]控制汉字的显示,原理图如图4
图4cora模块原理图
程序代码如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycorais
port(ch:
instd_logic_vector(1downto0);
sel:
instd_logic_vector(0to3);
q:
outstd_logic_vector(15downto0));
endcora;
architecturexxxofcorais
begin
process(ch,sel)
begin
casechis
when"00"=>
caseselis
when"0000"=>q<="0000000000000000";
when"0001"=>q<="0000000000000000";
when"0010"=>q<="0000100000000000";
when"0011"=>q<="0001111111111111";
when"0100"=>q<="0000100001000010";
when"0101"=>q<="0000100001000010";
when"0110"=>q<="0000100001000010";
when"0111"=>q<="0000100001000010";
when"1000"=>q<="0000100001000010";
when"1001"=>q<="0000100001000010";
when"1010"=>q<="1100100001000010";
when"1011"=>q<="0010100001000010";
when"1100"=>q<="0001111111111111";
when"1101"=>q<="0000100000000000";
when"1110"=>q<="0000000000000000";
when"1111"=>q<="0000000000000000";
whenothers=>null;
endcase;
when"01"=>
caseselis
when"0000"=>q<="0000000000000000";
when"0001"=>q<="0000000000000000";
when"0010"=>q<="0000111111111110";
when"0011"=>q<="0000100000000100";
when"0100"=>q<="0000100000000100";
when"0101"=>q<="0000100000000100";
when"0110"=>q<="0000111111111110";
when"0111"=>q<="0000000000000000";
when"1000"=>q<="0000100000000010";
when"1001"=>q<="0000111110000100";
when"1010"=>q<="0000100001001000";
when"1011"=>q<="0111100000010000";
when"1100"=>q<="0000101110101000";
when"1101"=>q<="0000100001000100";
when"1110"=>q<="0000000000000000";
when"1111"=>q<="0000000000000000";
whenothers=>null;
endcase;
when"10"=>
caseselis
when"0000"=>q<="0000000000000000";
when"0001"=>q<="0000000000000000";
when"0010"=>q<="0000110000000110";
when"0011"=>q<="0110010000001000";
when"0100"=>q<="0010010111110011";
when"0101"=>q<="0011010101010001";
when"0110"=>q<="0010110101010001";
when"0111"=>q<="0110010101010111";
when"1000"=>q<="1010010101010101";
when"1001"=>q<="0010110101010001";
when"1010"=>q<="0011010101010001";
when"1011"=>q<="0010010111110111";
when"1100"=>q<="0010010000000100";
when"1101"=>q<="0000010000000011";
when"1110"=>q<="0000000000000000";
when"1111"=>q<="0000000000000000";
whenothers=>null;
endcase;
whenothers=>null;
endcase;
endprocess;
endxxx;
3.4、仿真结果
(1)分频模块仿真图如图5
图5分频模块仿真图
(2)功能控制模块(cnta)仿真图如图6
图6功能控制模块仿真图
(3)点阵显示模块(cora)仿真图如图7
图7点阵显示模块仿真图
(4)整体模块仿真图如图8
图8整体模块仿真图
3.5、实验箱验证情况
通过拨码开关cn[1..0]控制汉字的显示
4、课程设计总结
通过这学期课程设计,使我对可编程逻辑器件这门课程有了更加深刻的认识,并且对VHDL语言有了进一步的了解。
学习了如何利用拨码开关控制点阵进行汉字显示的输出。
最初拿到课程设计说明书时,感觉每个模块在实验时都用过,心想只要把每个模块组合到一起就能实现系统功能,但结果其实不然。
在用VHDL语言进行设计时,时序问题需要我们特别关注。
否则在实验箱上进行验证时不会输出正确结果。
完成此次设计后,不仅能对QuartusⅡ开发仿真软件的操作更加熟练,真正做到学以致用;同时掌握了点阵显示的工作原理。
通过此次课程设计,感受到平常的学习在注重理论知识掌握的基础上,要特别重视实验环节。
只有通过不断的实践,我们才能把知识掌握的更牢固,理解的更透彻。
5、参考文献
(1)侯伯亨,顾新.VHDL硬件描述语言与数字逻辑电路设计.西安:
西安电子科技大学出版社,1999
(2)求是科技.CPLD/FPGA应用开发技术与工程实践.北京:
人民邮电出版社,2005
(3)罗苑棠.CPLD/FPGA常用模块与综合系统设计实例精讲.北京:
电子工业出版社,2007
(4)任勇峰,庄新敏.VHDL与硬件实现速成.北京:
国防工业出版社,2005