1、vhdl实验报告16乘16点阵字选综 合 实 践 总 结 报 告 综合实践名称: EDA技术与实践 综合实践地点、时间题目功能分析和设计实验的要求有如下三点:1.用16*16点阵的发光二极管显示字符;2.可显示字符为09的数字字符与AF英文字母的大写;3.输入为四位二进制矢量;按照要求可知,LED点阵模块,共由1616=256个LED发光二极管组成,如何在该点阵模块上显示数字和字母是本实验的关键。先将要显示的每一幅图像画在一个1616共256个小方格的矩形框中,再在有笔划下落处的小方格里填上“1”,无笔划处填上“0”,这样就形成了与这个汉字所对应的二进制数据在该矩形框上的分布以数字8为例,点阵
2、分布为:0000000000000000000000000000000000011111111110000001111111111000000110000001100000011000000110000001100000011000000111111111100000011111111110000001100000011000000110000001100000011000000110000001111111111000000111111111100000000000000000000000000000000000考虑到实际物理实验平台上点阵发光二极管的原理,以下为1616点阵LED外观图,只
3、要其对应的X、Y轴顺向偏压,即可使LED发亮。例如如果想使左上角LED点亮,则Y0=1,X0=0即可。 所以我采用行列扫描的方法,用四位二进制数做列选信号(总共16列),如选中第一列,则扫描第一列之中哪些行是高电平(1),哪些行是低电平(0);为高电平的则点亮,为低电平的不亮。(列信号都接地)。如此,列选信号由“0000”变到“1111”时,16列扫描完毕,一个字也就出来了,列选信号重新由“0000”开始扫描。注意扫描频率必须要足够快,才能保证显示一个数字或字母时所有灯在肉眼看来是同时在闪烁的。再者,就是字变换的问题。题目要求可显示字符为09的数字字符与AF英文字母的大写;16个字正好用四位二
4、进制表示,字选信号。每个字选信号对应一个0到9,A到F中的一个字模(像前面列出的8的字模一样)。通常情况下是1s变一个字符,但我在实验时考虑到仿真的问题,将字选信号的变化周期缩小很多,以便仿真。要注意的是,列选信号变化频率一定是比字选信号大得多的。一 总体模块划分1. 字选模块输入为一个时钟信号,输出为4位二进制(用xuan 表示)字选信号,用来顺序输出题目要求的16个字。因为设计采用字选模块和列选模块使用同一个输入时钟脉冲,但是字选信号的变化频率比列选信号要小得多。所以该模块中还应该设置一个计数器,计数器满,则Q加1,即变向下一个字,同时计数器重新置零。2. 列选模块 输入为一个时钟信号,输
5、出为4位二进制(用sel表示)列选信号,用来选中列,进行扫描。3. 显示模块 输入为字选信号和列选信号,输出为16位二进制,用来表示一列,该列中的1的位置就表示亮灯的位置,0的位置表示不亮。每扫描一列就输出一列,看该列中哪些行是1,哪些行是0。该模块应该包含09,AF这16个字模。4. 顶层模块 该模块采用图形模式(.gdf),将所有的模块按要求合理连接起来后,再添加上顶层的输入输出信号。附顶层图:二 代码实现1.顶层模块:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY dianzh
6、en ISPORT(k1,clk,reg,red,RES:IN STD_LOGIC;SEL:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);Q:OUT STD_LOGIC_VECTOR(15 DOWNTO 0);END DIANZHEN;ARCHITECTURE A OF DIANZHEN ISCOMPONENT XUANZIPORT(CLK:IN STD_LOGIC; Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0) );END COMPONENT; COMPONENT XUANZPORT(CLK:IN STD_LOGIC; Q:OUT STD_LOGI
7、C_VECTOR(3 DOWNTO 0) );END COMPONENT; COMPONENT XUAPORT(CLK:IN STD_LOGIC; Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0) );END COMPONENT; COMPONENT XUPORT(CLK:IN STD_LOGIC; Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0) );END COMPONENT;COMPONENT XUSPORT(red,REG:IN STD_LOGIC; ZI,si,MI,NI:in STD_LOGIC_VECTOR(3 DOWNTO 0); Q:O
8、UT STD_LOGIC_VECTOR(3 DOWNTO 0) );END COMPONENT;COMPONENT LIEXUANPORT(CLK:IN STD_LOGIC; Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0) );END COMPONENT;COMPONENT XIANSHIPORT( res:IN STD_LOGIC; XUAN:IN STD_LOGIC_VECTOR(3 DOWNTO 0); SEL:IN STD_LOGIC_VECTOR(3 DOWNTO 0); Q:OUT STD_LOGIC_VECTOR(15 DOWNTO 0) );END COM
9、PONENT;SIGNAL ZI_DAOUT,SI_DAOUT,MI_DAOUT,NI_DAOUT,XUAN_DAOUT,SEL_DAOUT:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINSELCLK, Q=ZI_DAOUT);U2:XUANZ PORT MAP(CLK=CLK, Q=SI_DAOUT);U3:XUA PORT MAP(CLK=CLK, Q=MI_DAOUT);U4:XU PORT MAP(CLK=CLK, Q=NI_DAOUT);U5:XUS PORT MAP(REG=REG, RED=RED, ZI=ZI_DAOUT, SI=SI_DAOUT, MI=
10、MI_DAOUT, NI=NI_DAOUT, Q=XUAN_DAOUT);U6:LIEXUAN PORT MAP(CLK=CLK, Q=SEL_DAOUT );U7:XIANSHI PORT MAP(RES=RES, SEL=SEL_DAOUT, XUAN=XUAN_DAOUT, Q=Q);END A;2.字选模块:四种环节字选中间选择环节xus:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY XUS ISPORT(red,REG:IN STD_LOGIC; ZI,si,MI,NI:
11、in STD_LOGIC_VECTOR(3 DOWNTO 0); Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0) );END ENTITY XUS;ARCHITECTURE A OF XUS ISBEGINPROCESS(zi,si,red)BEGINCASE red ISWHEN 0=CASE reg ISWHEN 0= Q QCASE reg ISWHEN 0= Q Q=ni; END CASE;END CASE;END PROCESS;END A;(1) 情况1:zi +1循环LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE
12、IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY XUANZI ISPORT(CLK:IN STD_LOGIC; Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0) );END ENTITY XUANZI;ARCHITECTURE XZ OF XUANZI ISBEGINPROCESS(CLK)VARIABLE COUNT:INTEGER RANGE 1600 DOWNTO 0;VARIABLE ZI:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINIF CLKEVENT AND CLK=1 THENIF COUNT=1600 THEN
13、 IF zi=1111 THENzi:=0000;ELSEzi:=zi+1;END IF;COUNT:=0;ELSECOUNT:=COUNT+1;END IF;END IF;Q=zi;END PROCESS;END ARCHITECTURE XZ;(2) 情况2SI: -1循环LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY XUANZ ISPORT(CLK:IN STD_LOGIC; Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0) );END ENTITY XU
14、ANZ;ARCHITECTURE XZ OF XUANZ ISBEGINPROCESS(CLK)VARIABLE COUNT:INTEGER RANGE 1600 DOWNTO 0;VARIABLE ZI:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINIF CLKEVENT AND CLK=1 THENIF COUNT=1600 THEN IF zi=0000 THENzi:=1111;ELSEzi:=zi-1;END IF;COUNT:=0;ELSECOUNT:=COUNT+1;END IF;END IF;Q=zi;END PROCESS;END ARCHITECTUR
15、E XZ;(3) 情况3MI: +2循环LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY XUA ISPORT(CLK:IN STD_LOGIC; Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0) );END ENTITY XUA;ARCHITECTURE XZ OF XUA ISBEGINPROCESS(CLK)VARIABLE COUNT:INTEGER RANGE 1600 DOWNTO 0;VARIABLE ZI:STD_LOGIC_VECTOR(3 DOW
16、NTO 0);BEGINIF CLKEVENT AND CLK=1 THENIF COUNT=1600 THEN IF zi=1111 THENzi:=0001;ELSEzi:=zi+2;END IF;COUNT:=0;ELSECOUNT:=COUNT+1;END IF;END IF;Q=zi;END PROCESS;END ARCHITECTURE XZ;(4) 情况4NI: -2循环LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY XU ISPORT(CLK:IN STD_LOGI
17、C; Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0) );END ENTITY XU;ARCHITECTURE XZ OF XU ISBEGINPROCESS(CLK)VARIABLE COUNT:INTEGER RANGE 1600 DOWNTO 0;VARIABLE ZI:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINIF CLKEVENT AND CLK=1 THENIF COUNT=1600 THEN IF zi=0001 THENzi:=1111;ELSEzi:=zi-2;END IF;COUNT:=0;ELSECOUNT:=COUNT+1
18、;END IF;END IF;Q=zi;END PROCESS;END ARCHITECTURE XZ;三 仿真结果这里只仿真顶层模块。由仿真结果可以看出,设计完全符合要求。四 心得与体会通过这次大作业,我深深地感受到,要把知识真正掌握到手里,在理论的基础上,还必须要有更深一步的实践。通过大作业的实践,把那些书本上的知识点都运用起来,去真正地做点东西出来,远比死记硬背理论知识更有意义。从刚开始的毫无头绪,无从下手,到之后积极查找资料,与组员讨论,再到后来着手设计,划分模块,编写代码,编译仿真,纠错反思。这样一步步脚踏实地迈向成功的感觉真的不错。以后,我会继续用VHDL去做一些自己感兴趣的东西,慢慢积累,慢慢地争取往更高的目标发展。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1