vhdl实验报告16乘16点阵字选.docx

上传人:b****8 文档编号:10585341 上传时间:2023-02-21 格式:DOCX 页数:13 大小:135.69KB
下载 相关 举报
vhdl实验报告16乘16点阵字选.docx_第1页
第1页 / 共13页
vhdl实验报告16乘16点阵字选.docx_第2页
第2页 / 共13页
vhdl实验报告16乘16点阵字选.docx_第3页
第3页 / 共13页
vhdl实验报告16乘16点阵字选.docx_第4页
第4页 / 共13页
vhdl实验报告16乘16点阵字选.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

vhdl实验报告16乘16点阵字选.docx

《vhdl实验报告16乘16点阵字选.docx》由会员分享,可在线阅读,更多相关《vhdl实验报告16乘16点阵字选.docx(13页珍藏版)》请在冰豆网上搜索。

vhdl实验报告16乘16点阵字选.docx

vhdl实验报告16乘16点阵字选

综合实践总结报告

 

综合实践名称:

EDA技术与实践

综合实践地点、时间

题目功能分析和设计

实验的要求有如下三点:

1.用16*16点阵的发光二极管显示字符;

2.可显示字符为0~9的数字字符与A~F英文字母的大写;

3.输入为四位二进制矢量;

按照要求可知,LED点阵模块,共由16×16=256个LED发光二极管组成,如何在该点阵模块上显示数字和字母是本实验的关键。

先将要显示的每一幅图像画在一个16×16共256个小方格的矩形框中,再在有笔划下落处的小方格里填上“1”,无笔划处填上“0”,这样就形成了与这个汉字所对应的二进制数据在该矩形框上的分布

以数字8为例,点阵分布为:

0000000000000000

0000000000000000

0001111111111000

0001111111111000

0001100000011000

0001100000011000

0001100000011000

0001111111111000

0001111111111000

0001100000011000

0001100000011000

0001100000011000

0001111111111000

0001111111111000

0000000000000000

0000000000000000

 

考虑到实际物理实验平台上点阵发光二极管的原理,以下为16×16点阵LED外观图,只要其对应的X、Y轴顺向偏压,即可使LED发亮。

例如如果想使左上角LED点亮,则Y0=1,X0=0即可。

 

所以我采用行列扫描的方法,用四位二进制数做列选信号(总共16列),如选中第一列,则扫描第一列之中哪些行是高电平

(1),哪些行是低电平(0);为高电平的则点亮,为低电平的不亮。

(列信号都接地)。

如此,列选信号由“0000”变到“1111”时,16列扫描完毕,一个字也就出来了,列选信号重新由“0000”开始扫描。

注意扫描频率必须要足够快,才能保证显示一个数字或字母时所有灯在肉眼看来是同时在闪烁的。

再者,就是字变换的问题。

题目要求可显示字符为0~9的数字字符与A~F英文字母的大写;16个字正好用四位二进制表示,字选信号。

每个字选信号对应一个0到9,A到F中的一个字模(像前面列出的8的字模一样)。

通常情况下是1s变一个字符,但我在实验时考虑到仿真的问题,将字选信号的变化周期缩小很多,以便仿真。

要注意的是,列选信号变化频率一定是比字选信号大得多的。

一.总体模块划分

1.字选模块

输入为一个时钟信号,输出为4位二进制(用xuan表示)字选信号,用来顺序输出题目要求的16个字。

因为设计采用字选模块和列选模块使用同一个输入时钟脉冲,但是字选信号的变化频率比列选信号要小得多。

所以该模块中还应该设置一个计数器,计数器满,则Q加1,即变向下一个字,同时计数器重新置零。

2.列选模块

输入为一个时钟信号,输出为4位二进制(用sel表示)列选信号,用来选中列,进行扫描。

3.显示模块

输入为字选信号和列选信号,输出为16位二进制,用来表示一列,该列中的1的位置就表示亮灯的位置,0的位置表示不亮。

每扫描一列就输出一列,看该列中哪些行是1,哪些行是0。

该模块应该包含0~9,A~F这16个字模。

4.顶层模块

该模块采用图形模式(.gdf),将所有的模块按要求合理连接起来后,再添加上顶层的输入输出信号。

附顶层图:

二.代码实现

1.顶层模块:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYdianzhenIS

PORT(k1,clk,reg,red,RES:

INSTD_LOGIC;

SEL:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

Q:

OUTSTD_LOGIC_VECTOR(15DOWNTO0));

ENDDIANZHEN;

ARCHITECTUREAOFDIANZHENIS

COMPONENTXUANZI

PORT(CLK:

INSTD_LOGIC;

Q:

OUTSTD_LOGIC_VECTOR(3DOWNTO0)

);

ENDCOMPONENT;

COMPONENTXUANZ

PORT(CLK:

INSTD_LOGIC;

Q:

OUTSTD_LOGIC_VECTOR(3DOWNTO0)

);

ENDCOMPONENT;

COMPONENTXUA

PORT(CLK:

INSTD_LOGIC;

Q:

OUTSTD_LOGIC_VECTOR(3DOWNTO0)

);

ENDCOMPONENT;

COMPONENTXU

PORT(CLK:

INSTD_LOGIC;

Q:

OUTSTD_LOGIC_VECTOR(3DOWNTO0)

);

ENDCOMPONENT;

COMPONENTXUS

PORT(red,REG:

INSTD_LOGIC;

ZI,si,MI,NI:

inSTD_LOGIC_VECTOR(3DOWNTO0);

Q:

OUTSTD_LOGIC_VECTOR(3DOWNTO0)

);

ENDCOMPONENT;

COMPONENTLIEXUAN

PORT(CLK:

INSTD_LOGIC;

Q:

OUTSTD_LOGIC_VECTOR(3DOWNTO0)

);

ENDCOMPONENT;

COMPONENTXIANSHI

PORT(

res:

INSTD_LOGIC;

XUAN:

INSTD_LOGIC_VECTOR(3DOWNTO0);

SEL:

INSTD_LOGIC_VECTOR(3DOWNTO0);

Q:

OUTSTD_LOGIC_VECTOR(15DOWNTO0)

);

ENDCOMPONENT;

SIGNALZI_DAOUT,SI_DAOUT,MI_DAOUT,NI_DAOUT,XUAN_DAOUT,SEL_DAOUT:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

SEL<=SEL_DAOUT;

U1:

XUANZIPORTMAP(CLK=>CLK,

Q=>ZI_DAOUT);

U2:

XUANZPORTMAP(CLK=>CLK,

Q=>SI_DAOUT);

U3:

XUAPORTMAP(CLK=>CLK,

Q=>MI_DAOUT);

U4:

XUPORTMAP(CLK=>CLK,

Q=>NI_DAOUT);

U5:

XUSPORTMAP(REG=>REG,

RED=>RED,

ZI=>ZI_DAOUT,

SI=>SI_DAOUT,

MI=>MI_DAOUT,

NI=>NI_DAOUT,

Q=>XUAN_DAOUT);

U6:

LIEXUANPORTMAP(CLK=>CLK,

Q=>SEL_DAOUT

);

U7:

XIANSHIPORTMAP(RES=>RES,

SEL=>SEL_DAOUT,

XUAN=>XUAN_DAOUT,

Q=>Q);

ENDA;

2.字选模块:

四种环节

字选中间选择环节xus:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYXUSIS

PORT(red,REG:

INSTD_LOGIC;

ZI,si,MI,NI:

inSTD_LOGIC_VECTOR(3DOWNTO0);

Q:

OUTSTD_LOGIC_VECTOR(3DOWNTO0)

);

ENDENTITYXUS;

ARCHITECTUREAOFXUSIS

BEGIN

PROCESS(zi,si,red)

BEGIN

CASEredIS

WHEN'0'=>

CASEregIS

WHEN'0'=>

Q<=zi;

WHEN'1'=>

Q<=si;

ENDCASE;

WHEN'1'=>

CASEregIS

WHEN'0'=>

Q<=mi;

WHEN'1'=>

Q<=ni;

ENDCASE;

ENDCASE;

ENDPROCESS;

ENDA;

(1)情况‘1’:

zi+1循环

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYXUANZIIS

PORT(CLK:

INSTD_LOGIC;

Q:

OUTSTD_LOGIC_VECTOR(3DOWNTO0)

);

ENDENTITYXUANZI;

ARCHITECTUREXZOFXUANZIIS

BEGIN

PROCESS(CLK)

VARIABLECOUNT:

INTEGERRANGE1600DOWNTO0;

VARIABLEZI:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

IFCLK'EVENTANDCLK='1'THEN

IFCOUNT=1600THEN

IFzi="1111"THEN

zi:

="0000";

ELSE

zi:

=zi+1;

ENDIF;

COUNT:

=0;

ELSE

COUNT:

=COUNT+1;

ENDIF;

ENDIF;

Q<=zi;

ENDPROCESS;

ENDARCHITECTUREXZ;

(2)情况‘2’SI:

-1循环

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYXUANZIS

PORT(CLK:

INSTD_LOGIC;

Q:

OUTSTD_LOGIC_VECTOR(3DOWNTO0)

);

ENDENTITYXUANZ;

ARCHITECTUREXZOFXUANZIS

BEGIN

PROCESS(CLK)

VARIABLECOUNT:

INTEGERRANGE1600DOWNTO0;

VARIABLEZI:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

IFCLK'EVENTANDCLK='1'THEN

IFCOUNT=1600THEN

IFzi="0000"THEN

zi:

="1111";

ELSE

zi:

=zi-1;

ENDIF;

COUNT:

=0;

ELSE

COUNT:

=COUNT+1;

ENDIF;

ENDIF;

Q<=zi;

ENDPROCESS;

ENDARCHITECTUREXZ;

(3)情况‘3’MI:

+2循环

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYXUAIS

PORT(CLK:

INSTD_LOGIC;

Q:

OUTSTD_LOGIC_VECTOR(3DOWNTO0)

);

ENDENTITYXUA;

ARCHITECTUREXZOFXUAIS

BEGIN

PROCESS(CLK)

VARIABLECOUNT:

INTEGERRANGE1600DOWNTO0;

VARIABLEZI:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

IFCLK'EVENTANDCLK='1'THEN

IFCOUNT=1600THEN

IFzi="1111"THEN

zi:

="0001";

ELSE

zi:

=zi+2;

ENDIF;

COUNT:

=0;

ELSE

COUNT:

=COUNT+1;

ENDIF;

ENDIF;

Q<=zi;

ENDPROCESS;

ENDARCHITECTUREXZ;

(4)情况‘4’NI:

-2循环

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYXUIS

PORT(CLK:

INSTD_LOGIC;

Q:

OUTSTD_LOGIC_VECTOR(3DOWNTO0)

);

ENDENTITYXU;

ARCHITECTUREXZOFXUIS

BEGIN

PROCESS(CLK)

VARIABLECOUNT:

INTEGERRANGE1600DOWNTO0;

VARIABLEZI:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

IFCLK'EVENTANDCLK='1'THEN

IFCOUNT=1600THEN

IFzi="0001"THEN

zi:

="1111";

ELSE

zi:

=zi-2;

ENDIF;

COUNT:

=0;

ELSE

COUNT:

=COUNT+1;

ENDIF;

ENDIF;

Q<=zi;

ENDPROCESS;

ENDARCHITECTUREXZ;

 

三.仿真结果

这里只仿真顶层模块。

由仿真结果可以看出,设计完全符合要求。

四.心得与体会

通过这次大作业,我深深地感受到,要把知识真正掌握到手里,在理论的基础上,还必须要有更深一步的实践。

通过大作业的实践,把那些书本上的知识点都运用起来,去真正地做点东西出来,远比死记硬背理论知识更有意义。

从刚开始的毫无头绪,无从下手,到之后积极查找资料,与组员讨论,再到后来着手设计,划分模块,编写代码,编译仿真,纠错反思。

这样一步步脚踏实地迈向成功的感觉真的不错。

以后,我会继续用VHDL去做一些自己感兴趣的东西,慢慢积累,慢慢地争取往更高的目标发展。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 判决书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1