EDA课程设计实验报告详解.docx
- 文档编号:8876981
- 上传时间:2023-05-15
- 格式:DOCX
- 页数:17
- 大小:91.39KB
EDA课程设计实验报告详解.docx
《EDA课程设计实验报告详解.docx》由会员分享,可在线阅读,更多相关《EDA课程设计实验报告详解.docx(17页珍藏版)》请在冰点文库上搜索。
EDA课程设计实验报告详解
EDA课程设计报告
课题名称:
16*16点阵显示
专业:
通信工程
班级:
2013级通信工程
(2)班
学号:
姓名:
刘乐
指导教师:
杨泽林
完成时间:
2015年12月18号
一、设计目的
二、课题的主要功能
三、课题的功能模块划分
四、主要功能的实现
五、实验程序
六、系统调试与仿真
七、总结与体会
一、设计目的
全面熟悉、掌握VHDL语言基本知识,掌握利用VHDL语言对常用的的组合逻辑电路和时序逻辑电路编程,把编程和实际结合起来,熟悉编制和调试程序的技巧,掌握分析结果的若干有效方法,进一步提高上机动手能力,培养使用设计综合电路的能力,养成提供文档资料的习惯和规范编程的思想。
二、课题的主要功能
问题描述
本实验主要完成汉字字符在LED上的显示,16*16扫描LED点阵的工作原理与8位扫描数码管类似,只是显示的方式与结果不一样而已。
下面就本实验系统的16*16点阵的工件原理做一些简单的说明。
16*16点阵由此256个LED通过排列组合而形成16行*16列的一个矩阵式的LED阵列,俗称16*16点阵。
单个的LED的电路如下图1所示:
图1单个LED电路图
由上图可知,对于单个LED的电路图当Rn输入一个高电平,同时Cn输入一个低电平时,电路形成一个回路,LED发光。
也就是LED点阵对应的这个点被点亮。
16*16点阵也就是由16行和16列的LED组成,其中每一行的所有16个LED的Rn端并联在一起,每一列的所有16个LED的Cn端并联在一起。
通过给Rn输入一个高电平,也就相当于给这一列所有LED输入了一个高电平,这时只要某个LED的Cn端输入一个低电平时,对应的LED就会被点亮。
具体的电路如下图2所示:
图216*16点阵电路原理图
在点阵上显示一字符是根据其字符在点阵上的显示的点的亮灭来表示的,如下图3所示:
图3字符在点阵上的显示
在上图中,显示的是一个“汉”字,只要将被“汉”字所覆盖的区域的点点亮,则在点阵中就会显示一个“汉”字。
根据前面我们所介绍的点阵显示的原理,当我们选中第一列后,根据要显示汉字的第一列中所需要被点亮的点对应的Rn置为高电平,则在第一列中需要被点亮的点就会被点亮。
依此类推,显示第二列、第三列……第N列中需要被点亮的点。
然后根据人眼的视觉原理,将每一列显示的点的间隔时间设为一定的值,那么我们就会感觉显示一个完整的不闪烁的汉字。
同时也可以按照这个原理来显示其它的汉字。
下图4是一个汉字显示所需要的时序图:
图4显示时序图
功能描述
本实验的示例程序依次显示的是“宁大物电学院”,要求每隔一秒换下一个字显示。
三、课题的功能模块的划分
系统的总体框图
图5
此程序分为五个模块,两个计数器和一个行驱动程序和一个显示字体控制程序,最后再加上一个顶层文件,用来连接前四个模块,程序简图如下:
CNT8
CNT16
HANG
XIANSHI
Q1
W1
CLK1
CLK
图6电路连接简图
四、主要功能的实现
8进制加法器设计
是8进制的计数器,其每计一次数,输出一个字。
例如当计数为“000B”时显示“宁”,当计数为“001B”时显示“大”。
给其脉冲周期为1S。
16进制计数器设计
是16进制的计数器,其输出端控制行和列驱动控制器的输出数据。
列驱动设计
为列驱动控制器,该模块控制所亮的行,当输出为0001H时,给点阵的第一行高电平,输出为0010H时,给点阵的第二行高电平,依次类推,逐次给每行高电平。
字体显示控制器
为字体显示控制器,SHI控制的是所显示的字。
例如当SHI为00H时,表示显示第一个字;当SHI为01H时,表示显示第二个字,依次类推。
WEI控制所显示的为字的第几行,例如当WEI为0000B时,表示输出字的第一行文字信息;WEI为0001B时,表示输出字的第二行文字信息,依次类推。
顶层文件设计
是顶层文件设计,文件在实体中首先定义了顶层设计元件的端口信号,然后在architecture和begin之间利用component语句对准备调用的元件做了声明,并定义了c,d两个信号作为器件内部的连接线。
最后利用端口映射语句PORTMAP()将两个计数器和列驱动,字体显示驱动连接起来构成一个完整的器件。
五、实验程序
LIBRARYIEEE;
USECNT8IS
PORT(CLK1:
INSTD_LOGIC;
QOUT:
OUTSTD_LOGIC_VECTOR(2DOWNTO0));
ENDENTITYCNT8;
ARCHITECTUREBEHVOFCNT8IS
SIGNALCQI:
STD_LOGIC_VECTOR(2DOWNTO0);
BEGIN
PROCESS(CLK1)
BEGIN
IF(CLK1'EVENTANDCLK1='1')THEN
CQI<=CQI+1;
ENDIF;
QOUT<=CQI;
ENDPROCESS;
ENDARCHITECTUREBEHV;
LIBRARYIEEE;
USECNT16IS
PORT(CLK:
INSTD_LOGIC;
QOUT:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDENTITYCNT16;
ARCHITECTUREBEHVOFCNT16IS
SIGNALCQI:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(CLK)
BEGIN
IF(CLK'EVENTANDCLK='1')THEN
CQI<=CQI+1;
ENDIF;
QOUT<=CQI;
ENDPROCESS;
ENDARCHITECTUREBEHV;
LIBRARYIEEE;
USEHANGIS
PORT(DATAIN:
INSTD_LOGIC_VECTOR(3DOWNTO0);
ROW:
OUTSTD_LOGIC_VECTOR(15DOWNTO0));
ENDENTITYHANG;
ARCHITECTUREBEHVOFHANGIS
SIGNALHANG:
STD_LOGIC_VECTOR(15DOWNTO0);
BEGIN
PROCESS(DATAIN)
BEGIN
CASEDATAINIS
WHEN"0000"=>ROW<="000";
WHEN"0001"=>ROW<="000";
WHEN"0010"=>ROW<="000";
WHEN"0011"=>ROW<="000";
WHEN"0100"=>ROW<="0000";
WHEN"0101"=>ROW<="00000";
WHEN"0110"=>ROW<="00000000";
WHEN"0111"=>ROW<="00000000";
WHEN"1000"=>ROW<="00000000";
WHEN"1001"=>ROW<="0000000001000000";
WHEN"1010"=>ROW<="0000000000100000";
WHEN"1011"=>ROW<="0000000000010000";
WHEN"1100"=>ROW<="0000000000001000";
WHEN"1101"=>ROW<="0000000000000100";
WHEN"1110"=>ROW<="0000000000000010";
WHEN"1111"=>ROW<="0000000000000001";
WHENOTHERS=>ROW<="0000000000000000";
ENDCASE;ENDPROCESS;
ENDARCHITECTUREBEHV;
LIBRARYieee;
USEXIANSHIIS
PORT(WEI:
INSTD_LOGIC_VECTOR(3downto0);
SHI:
INSTD_LOGIC_VECTOR(2downto0);
Q:
OUTSTD_LOGIC_VECTOR(15downto0));
ENDXIANSHI;
ARCHITECTUREXIANSHI_architectureOFXIANSHIIS
BEGIN
process(shi,wei)
variableb:
std_logic_vector(15downto0);
begin
caseshiis
When"000"=>
caseweiis
when"0000"=>b:
="111";
when"0001"=>b:
="111";
when"0010"=>b:
="000";
when"0011"=>b:
="110";
when"0100"=>b:
="110";
when"0101"=>b:
="000";
when"0110"=>b:
="001";
when"0111"=>b:
="110";
when"1000"=>b:
="000";
when"1001"=>b:
="110";
when"1010"=>b:
="110";
when"1011"=>b:
="110";
when"1100"=>b:
="110";
when"1101"=>b:
="110";
when"1110"=>b:
="110";
when"1111"=>b:
="111";
whenothers=>null;endcase;
When"001"=>
caseweiis
when"0000"=>b:
="111";
when"0001"=>b:
="111";
when"0010"=>b:
="111";
when"0011"=>b:
="111";
when"0100"=>b:
="111";
when"0101"=>b:
="111";
when"0110"=>b:
="111";
when"0111"=>b:
="111";
when"1000"=>b:
="111";
when"1001"=>b:
="111";
when"1010"=>b:
="111";
when"1011"=>b:
="111";
when"1100"=>b:
="111";
when"1101"=>b:
="111";
when"1110"=>b:
="111";
when"1111"=>b:
="111";
whenothers=>null;endcase;
When"010"=>
caseweiis
when"0000"=>b:
="111";
when"0001"=>b:
="111";
when"0010"=>b:
="011";
when"0011"=>b:
="111";
when"0100"=>b:
="111";
when"0101"=>b:
="111";
when"0110"=>b:
="111";
when"0111"=>b:
="111";
when"1000"=>b:
="111";
when"1001"=>b:
="111";
when"1010"=>b:
="111";
when"1011"=>b:
="111";
when"1100"=>b:
="011";
when"1101"=>b:
="0000000000000001";
when"1110"=>b:
="111";
when"1111"=>b:
="111";
whenothers=>null;endcase;
When"011"=>
caseweiis
when"0000"=>b:
="111";
when"0001"=>b:
="111";
when"0010"=>b:
="111";
when"0011"=>b:
="111";
when"0100"=>b:
="111";
when"0101"=>b:
="111";
when"0110"=>b:
="111";
when"0111"=>b:
="111";
when"1000"=>b:
="011";
when"1001"=>b:
="111";
when"1010"=>b:
="011";
when"1011"=>b:
="011";
when"1100"=>b:
="011";
when"1101"=>b:
="011";
when"1110"=>b:
="111";
when"1111"=>b:
="111";
whenothers=>null;endcase;
When"100"=>
caseweiis
when"0000"=>b:
="111";
when"0001"=>b:
="111";
when"0010"=>b:
="111";
when"0011"=>b:
="111";
when"0100"=>b:
="001";
when"0101"=>b:
="101";
when"0110"=>b:
="011";
when"0111"=>b:
="111";
when"1000"=>b:
="111";
when"1001"=>b:
="011";
when"1010"=>b:
="0000000000000001";
when"1011"=>b:
="111";
when"1100"=>b:
="111";
when"1101"=>b:
="111";
when"1110"=>b:
="111";
when"1111"=>b:
="111";
whenothers=>null;endcase;
When"101"=>
caseweiis
when"0000"=>b:
="111";
when"0001"=>b:
="111";
when"0010"=>b:
="111";
when"0011"=>b:
="001";
when"0100"=>b:
="110";
when"0101"=>b:
="110";
when"0110"=>b:
="111";
when"0111"=>b:
="001";
when"1000"=>b:
="111";
when"1001"=>b:
="111";
when"1010"=>b:
="111";
when"1011"=>b:
="111";
when"1100"=>b:
="101";
when"1101"=>b:
="000";
when"1110"=>b:
="111";
when"1111"=>b:
="111";
whenothers=>null;endcase;
whenothers=>null;
endcase;
q<=b;
endprocess;
ENDXIANSHI_architecture;
LIBRARYIEEE;
USEJUZHEN16IS
PORT(a,b:
INSTD_LOGIC;
Q1,W1:
OUTSTD_LOGIC_VECTOR(15DOWNTO0));
ENDENTITYJUZHEN16;
ARCHITECTUREJZ16OFJUZHEN16IS
COMPONENTCNT8
PORT(CLK1:
INSTD_LOGIC;
QOUT:
OUTSTD_LOGIC_VECTOR(2DOWNTO0));
ENDCOMPONENT;
COMPONENTCNT16
PORT(CLK:
INSTD_LOGIC;
QOUT:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDCOMPONENT;
COMPONENTHANG
PORT(DATAIN:
INSTD_LOGIC_VECTOR(3DOWNTO0);
ROW:
OUTSTD_LOGIC_VECTOR(15DOWNTO0));
ENDCOMPONENT;
COMPONENTXIANSHI
PORT(WEI:
INSTD_LOGIC_VECTOR(3downto0);
SHI:
INSTD_LOGIC_VECTOR(2downto0);
Q:
OUTSTD_LOGIC_VECTOR(15downto0));
ENDCOMPONENT;
SIGNALc:
STD_LOGIC_VECTOR(3downto0);
SIGNALd:
STD_LOGIC_VECTOR(2downto0);
BEGIN
U1:
CNT8PORTMAP(CLK1=>b,QOUT=>d);
U2:
CNT16PORTMAP(CLK=>a,QOUT=>c);
U3:
HANGPORTMAP(datain=>c,ROW=>Q1);
U4:
XIANSHIPORTMAP(wei=>c,shi=>d,Q=>W1);
ENDARCHITECTUREJZ16;
六、系统调试与仿真
程序仿真图
图7仿真波形图
图8仿真波形图
图9顶层仿真图
16*16LED点阵显示引脚分配
16×16点阵信号名称
FPGA引脚
说明
DOC-C0
F7
列
DOT-C1
E8
列
DOT-C2
J8
列
DOT-C3
G9
列
DOT-C4
G10
列
DOT-C5
F11
列
DOT-C6
F9
列
DOT-C7
F10
列
DOT-C8
G2
列
DOT-C9
F1
列
DOT-C10
E1
列
DOT-C11
E2
列
DOT-C12
D1
列
DOT-C13
D2
列
DOT-C14
C2
列
DOT-C15
B2
列
DOT-R0
B3
行选择
DOT-R1
C3
行选择
DOT-R2
H1
行选择
DOT-R3
J2
行选择
DOT-R4
L2
行选择
DOT-R5
J13
行选择
DOT-R6
H15
行选择
DOT-R7
V11
行选择
DOT-R8
E10
行选择
DOT-R9
F12
行选择
DOT-R10
E12
行选择
DOT-R11
F13
行选择
DOT-R12
F14
行选择
DOT-R13
E15
行选择
DOT-R14
F15
行选择
DOT-R015
F16
行选择
时钟:
Clk
N1
图10引脚分配
程序运行结果
程序仿真完全正确后,线封锁引脚,然后连接硬件,再次编译,没有错误后下载程序到硬件之中,当拨码开关闭合时,得到点阵LED显示结果,其中每个汉字显示时间为一秒,一秒过后自动换下一个汉字,直到显示完“宁大物电学院”,再循环显示以上内容;当拨码开关断开时,点阵LED不显示任何内容。
七、总结与体会
通过此次课程设计,使我更加扎实的掌握了有关EDA方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。
实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。
过而能改,善莫大焉。
在课程设计过程中,我不断发现错误,不断改正,不断领悟,不断获取。
最终的检测调试环节,本身就是在践行“过而能改,善莫大焉”的知行观。
这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后在老师的指导下,终于游逆而解。
在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦,也永远不可能得到社会及他人对你的认可!
课程设计诚然是一门专业课,给我很多专业知识以及专业技能上的提升,同时又是一门讲道课,一门辩思课,给了我许多道,给了我很多思,给了我莫大的空间。
同时,设计让我感触很深。
使我对抽象的理论有了具体的认识。
通过这次课程设计,我掌握了LED点阵显示的原理及设计,进一步提高了用VHDL语言编程的能力。
我认为,在这学期的实验中,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。
更重要的是,在实验课上,我学会了很多学习的方法。
而这是日后最实用的,真的是受益匪浅。
要面对社会的挑战,只有不断的学习、实践,再学习、再实践。
这对于我的将来也有很大的帮助。
以后,不管有多苦,我想我都能变苦为乐,找寻有趣的事情,发现其中珍贵的事情。
就像中国提倡的艰苦奋斗一样,我们都可以在实验结束之后变的更加成熟,会面对需要面对的事情。
回顾起此课程设计,至今我仍感慨颇多,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,但可喜的是最终都得到了解决。
此次设计也让我明白了思路即出路,有什么不懂不明白的地方要及时请教或上网查询,只要认真钻研,动脑思考,动手实践,就没有弄不懂的知识,收获颇丰。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 课程设计 实验 报告 详解