elsecout:
=0;
endif;
endif;
endprocess;
endbhv;
2、键盘模块程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityjianpanis
port(clk:
instd_logic;
reset:
instd_logic;
col:
instd_logic_vector(3downto0);
row:
outstd_logic_vector(3downto0);
key_code:
outstd_logic_vector(7downto0));
endjianpan;
architecturebhvofjianpanis
signalcnt:
std_logic_vector(1downto0);
signalkey:
std_logic;
begin
key<=col(3)andcol
(2)andcol
(1)andcol(0);
p2:
process(clk)
begin
ifclk'eventandclk='1'then
ifkey='1'then
cnt<=cnt+1;
endif;
endif;
endprocess;
P3:
process(col,cnt,reset)
begin
ifreset='0'then
row<="1111";
elsifcnt<="00"then
row<="1110";
casecolis
when"1110"=>key_code<="11101110";
when"1101"=>key_code<="11011110";
when"1011"=>key_code<="10111110";
when"0111"=>key_code<="01111110";
whenothers=>key_code<="11111111";
endcase;
elsifcnt<="01"then
row<="1101";
casecolis
when"1110"=>key_code<="11101101";
when"1101"=>key_code<="11011101";
when"1011"=>key_code<="10111101";
when"0111"=>key_code<="01111101";
whenothers=>key_code<="11111111";
endcase;
elsifcnt<="10"then
row<="1011";
casecolis
when"1110"=>key_code<="11101011";
when"1101"=>key_code<="11011011";
when"1011"=>key_code<="10111011";
when"0111"=>key_code<="01111011";
whenothers=>key_code<="11111111";
endcase;
elsifcnt<="11"then
row<="0111";
casecolis
when"1110"=>key_code<="11100111";
when"1101"=>key_code<="11010111";
when"1011"=>key_code<="10110111";
when"0111"=>key_code<="01110111";
whenothers=>key_code<="11111111";
endcase;
endif;
endprocess;
endarchitecture;
3、消抖模块程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
entityxiaodouis
port(clk:
instd_logic;
reset:
instd_logic;
din:
instd_logic_vector(7downto0);
dout:
outstd_logic_vector(7downto0));
endxiaodou;
architecturebhvofxiaodouis
begin
process(clk,reset,din)
variablecnt:
integerrange0to2;
variablestore:
std_logic_vector(7downto0);
variabled1,d2,d3:
std_logic:
='1';
begin
ifreset='0'then
dout<="11111111";
elsifclk'eventandclk='1'then
casecntis
when0=>store:
=din;
cnt:
=cnt+1;
when1=>
ifdin=storethen
cnt:
=cnt+1;
else
store:
=din;
cnt:
=0;
endif;
when2=>
ifdin=storethen
dout<=store;
d1:
=store(7)andstore(6)andstore(5)andstore(4);
d2:
=store(3)andstore
(2)andstore
(1)andstore(0);
d3:
=d1ord2;
ifd3='0'then
endif;
else
store:
=din;
cnt:
=0;
endif;
endcase;
endif;
endprocess;
endbhv;
4、LCD模块程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitylcdis
port(lcd_clk:
instd_logic;
dout:
instd_logic_vector(7downto0);
rs:
outstd_logic;--寄存器选择信号
rw:
outstd_logic;--液晶读写信号
en:
outstd_logic;--液晶时钟信号
data:
outstd_logic_vector(7downto0));--液晶数据信号
endlcd;
architecturebhvoflcdis
tapestatesis(set_function,set_cursor,set_display,clear_display,set_ddram1,write_data1);
signalstate:
states;
begin
process(lcd_clk,state)--状态机控制显示
begin
iflcd_clk'eventandlcd_clk='1'then
casestateis
whenset_function=>data<="00111000";--/*设置8位格式,2行,5*7*/
rs<='0';
state<=set_display;
whenset_display=>data<="00001100";--/*整体显示,关光标,不闪烁*/
rs<='0';
state<=clear_display;
whenclear_display=>data<="00000001";
rs<='0';
state<=set_cursor;
whenset_cursor=>data<="00000110";--/*显示移动格式,看最后两位,10表示光标右移
rs<='0';
state<=set_ddram1;
whenset_ddram1=>data<="10000000";
rs<='0';
state<=write_data1;
whenwrite_data1=>rs<='1';data<=dout;
endcase;
endif;
endprocess;
endbhv;
3.2.4仿真图
4系统调试及下载
程序编写完,仿真成功后,引脚设置对应好,在实验箱上连接好线,最后可以进行下载了,然后就可以在实验箱上观察实验结果了。
5设计总结
这次EDA课程设计历时一周,学到很多很多的东西,不仅可以巩固以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次设计,进一步加深了对EDA的了解,让我对它有了更加浓厚的兴趣。
特别是当每一个子模块编写调试成功时,心里特别的开心。
但是在编写顶层文件的程序时,遇到了不少问题,可以说是错误百出,系统不停报错,特别是各元件之间的连接,以及信号的定义,总是有错误,在细心的检查和请教同学后,终于找出了错误和警告,排除困难后,程序编译就通过了,心里终于舒了一口气。
其次,在连接各个模块的时候一定要注意各个输入、输出引脚的线宽,因为每个线宽是不一样的,只要让各个线宽互相匹配,才能得出正确的结果,否则,出现任何一点小的误差就会导致整个文件系统的编译出现错误提示,在器件的选择上也有一定的技巧,只有选择了合适当前电路所适合的器件,编译才能得到完满成功。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正学到东西,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
总的来说,这次设计的报时和时间调整还是比较成功的,在设计中遇到了很多问题,最后在老师的辛勤的指导下,终于游逆而解,有点小小的成就感,终于觉得平时所学的知识有了实用的价值,达到了理论与实际相结合的目的。
本次课程设计是我们俩人一起努力完成的,通过合作,我们的合作意识得到加强。
合作能力得到提高。
上大学后,很多同学都没有过深入的交流,在设计的过程中,我们用了分工与合作的方式,每个人负责一定的部分,同时在一定的阶段共同讨论,以解决分工中个人不能解决的问题,在交流中大家积极发言,和提出意见,同时我们还向别的同学请教。
在此过程中,每个人都想自己的方案得到实现,积极向同学说明自己的想法。
能过比较选出最好的方案。
在这过程也提高了我们的表现能力。
在学习的过程中,不是每一个问题都能自己解决,向老师请教或向同学讨论是一个很好的方法,不是有句话叫做思而不学者殆。
做事要学思结合。
通过本次设计,让我很好的锻炼了理论联系实际,与具体项目、课题相结合开发、设计产品的能力。
既让我们懂得了怎样把理论应用于实际,又让我们懂得了在实践中遇到的问题怎样用理论去解决。
在设计过程中,总是遇到这样或那样的问题。
有时发现一个问题的时候,需要做大量的工作,花大量的时间才能解决。
自然而然,我的耐心便在其中建立起来了。
为以后的工作积累了经验,增强了信心,不仅学到了不少知识,而且锻炼了自己的能力,使自己对以后的路有了更加清楚的认识,同时,对未来有了更多的信心。
最后,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!