基于VHDL的点阵扫描程序.docx

上传人:数据九部 文档编号:10318436 上传时间:2021-05-08 格式:DOCX 页数:15 大小:168.70KB
返回 下载 相关 举报
基于VHDL的点阵扫描程序.docx_第1页
第1页 / 共15页
基于VHDL的点阵扫描程序.docx_第2页
第2页 / 共15页
基于VHDL的点阵扫描程序.docx_第3页
第3页 / 共15页
基于VHDL的点阵扫描程序.docx_第4页
第4页 / 共15页
基于VHDL的点阵扫描程序.docx_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《基于VHDL的点阵扫描程序.docx》由会员分享,可在线阅读,更多相关《基于VHDL的点阵扫描程序.docx(15页珍藏版)》请在三一文库上搜索。

1、数字电路与逻辑设计实验报告基于VHDL的点阵扫描程序【系统设计】1采用自顶向下(top-down)设计法,分为以下三个步骤:l Step 1:确定初步方案,进行系统设计和描述:图1 点阵显示系统结构框图 1) 系统结构框图:绘出系统结构框图如下所示:2) 分析:系统输入信号:a. 输入控制信号:控制点阵显示内容几种状态的转换;b. 时钟输入:实验中我所使用的实验板高频时钟为1MHz; 系统输出信号: 点阵上显示的各点亮暗信息就是系统输出信息。l Step 2:系统划分,进行各个模块功能描述: 从题目要求的点阵系统的功能出发,将系统划分为四大模块:分频模块、各个模式分频控制模块、总控制模块、显示

2、模块。可简要概括为分频模块和显示控制模块,其中显示控制模块包括各模式分频控制模块、总控制模块和显示模块。1) 方框图(模块划分):2) 分析:a.分频模块: 由于系统可用单元为128宏个单元,所以为了节约使用量,采取用二进制向量来计数,同时用向量特定位的状态来作为分频标志,经计算可得若定义一个25位的二进制数,则18号位的0、1变化可作为4Hz的时钟高低电平变化标志,以此类推19号位可作为2Hz的时钟高低电平变化标志,21号位可作为0.5Hz的时钟高低电平的变化标志。因此可以把计数的值直接用于控制点阵的显示。 b.显示控制模块: 输入信号: M_mode:为2维向量,由2个拨码开关控制,共可控

3、制显示4种状态, 在此只是用00-11的四种状态 Auto是自动切换使能键 Reset是复位键 C_out为分频模块的输出,作为显示控制的标志。 输出信号: lie:为8维向量,为点阵显示的行信号; hang:为8维向量,为点阵显示的列信号;l Step 3:逻辑描述:1) 系统状态分析: 根据题目要求,系统共有4个大状态,记为A、B、C、DA:计扫描控制电路,使光点从左上角像素点开始扫描,终止于右下角像素点,然后周而复始地重复下去,扫过一帧所需时间为16 秒;B:每次显示1 个字符,共 5个,每秒切换一个字符,所显示字符为:EZFHNC:显示一幅动画;D:滚动显示一幅动画。2) MDS图:

4、输入控制信号m_mode为二维向量,在手动模式下控制显示的模式 Auto为自动显示的使能信号绘出MDS图,如下所示: B Auto=0,m_mode=00A Auto=0,m_mode=01 Auto=1,m_mode=01 Auto=1,m_mode=00 auto=1,m_mode=10DC auto=1,m_mode=11 auto=0,m_mode=11 auto=0,m_mode=10 通过两个拨码开关来输入m_mode实现状态在A、B、C之间的转移控制。另外,系统的大状态只有上述的A、B、C四种,而每种大状态中,有包含有多个循环的小状态,这部分内容将在下面的“点阵显示原理设计”中详

5、细分析。以上部分即通过自顶向下的方法,逐步探求系统的设计方法。当然在实验过程中,也对初步设计时进行了反复的修改和补充,使整个体统更加完善。2. 点阵显示原理设计:图6 点阵电路原理1) 点阵显示原理分析: 88 点阵是由如图所示的64个发光二极管构成的,当相应二极管的行电平为高电平,列电平为低电平时,二极管导通发亮,所以8个列使用一个行驱动。那么当一行同时有超过一个以上的灯亮时,每个灯都会分走电流,导致每行灯点亮多时就变暗,少时就变亮。 为了使点阵能够在人眼看它的时候呈现出设计好的图形,并且亮度均匀,用列信号(hang)作为选通控制就会亮度均匀,只要保证任何时刻只有一位hang信号为低,其余位

6、都为高即可。反之,用行信号去控制就会出现亮度不均匀的情况。2) 显示内容设计:l A状态:扫描控制电路,光点从左上角像素点开始扫描,终止于右下角像素点,然后周而复始地重复下去。 此状态在某一时刻只有一个点在亮,比较简单,不做过多分析。l B状态:每次显示1 个字符,至少显示4 个字符,每秒切换一个字符; 设计显示的字符为:EZFHN。由于B状态共显示5个字符,所以分为四个状态分别为“E”、“Z”、“F”、“H”、“N”,又根据上面分析的点阵的工作原理,将这五个状态中的每一个再进一步分成8个子状态,如下图所示。所以,对于B状态,实际上是4*8=32个子状态间的切换,利用人眼的视觉暂留,在显示每个

7、字符的1秒钟内用高频扫面这个字符的8个子状态,进入下一秒钟后,同理用高频扫面这个字符的8个子状态。B状态的分解如下图所示: 列电平(hang)总是按照以下这8个状态在循环扫描,在某一时刻只有一个列电平为0,其余均为高电平: hang(1) = 01111111 hang(2) = 10111111 hang(3) = 11011111 hang(4) = 11101111 hang(5) = 11110111 hang(6) = 11111011 hang(7) = 11111101 hang(8) = 11111110 行电平(row)则控制要显示的内容。l C状态:显示一幅动画 ,令点阵从

8、里到外对称的显示四个点,然后全亮,然后在逐渐全暗,然后再重新循环亮对称的四个点。其原理同B状态。l D状态:显示一幅滚动图画,是一个箭头从右向左移动,其原理同【实验源程序】1、分频模块:library ieee; use ieee.std_logic_1164.all;use ieee.std_logic_signed.all;entity freq isport(f_clk : in std_logic;f_reset: in std_logic;f_ctrl:out std_logic_vector(9 downto 0);end freq;architecture f of freq i

9、ssignal count:std_logic_vector(24 downto 0):=0000000000000000000000000;beginprocess(f_clk,f_reset,count)begin if(f_reset=1)then count=0000000000000000000000000; elsif(f_clkevent and f_clk=1)then if count=1111111111111111111111111 then count=0000000000000000000000000; elsecount=count+1; end if; end i

10、f;f_ctrl(9 downto 3)=count(24 downto 18); -18-4Hz,19-2Hz,20-1Hz,21-0.5Hzf_ctrl(2 downto 0)=count(2 downto 0); -1MHzend process;end f;2、各个模式的频率控制模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_signed.all;entity contr isport(c_mode:instd_logic_vector(1 downto 0);c_in:instd_logic_vector(9

11、 downto 0);c_out:outstd_logic_vector(7 downto 0);end contr;architecture c of contr issignal c_lie:std_logic_vector(4 downto 0):=00000;signal c_hang:std_logic_vector(2 downto 0):=000;beginprocess(c_mode,c_in,c_lie,c_hang)beginif (c_mode=00) thenc_lie(4 downto 0)=c_in(9 downto 5); -1Hz, when use chose

12、 8-4 for 0.5Hz,model1s hang c_hang(2 downto 0)=c_in(5 downto 3); -4Hz for model1s hang elsif (c_mode=01) thenc_lie(4 downto 0)=c_in(9 downto 5); - 1Hz model2 c_hang(2 downto 0)=c_in(2 downto 0); elsif c_mode=10 then c_lie(4 downto 0)=c_in(7 downto 3); -4Hz for model3c_hang(2 downto 0)=c_in(2 downto

13、0);elsif c_mode=11 then c_lie(4 downto 0)=c_in(8 downto 4); - 1Hz model2 c_hang(2 downto 0)=c_in(2 downto 0);end if;c_out(7 downto 3)=c_lie(4 downto 0);c_out(2 downto 0)hanghanghanghanghanghanghanghanglielielielielielielieliehang=11111111;liehang=10111111;liehang=11011111;liehang=11101111;liehang=11

14、110111;liehang=11111011;liehang=11111111;liehang=11111111;liehang=11111111;liehang=10111111;liehang=11011111;liehang=11101111;liehang=11110111;liehang=11111011;liehang=11111101;liehang=11111111;liehang=11111111;liehang=10111111;liehang=11011111;liehang=11101111;liehang=11110111;liehang=11111011;lieh

15、ang=11111101;liehang=11111111;liehang=11111111;liehang=10111111;liehang=11011111;liehang=11101111;liehang=11110111;liehang=11111011;liehang=11111111;liehang=11111111;liehang=11111111;liehang=10111111;liehang=11011111;liehang=11101111;liehang=11110111;liehang=11111011;liehang=11111101;liehang=1111111

16、1;liehang=11111111;liehang=11100111;liehang=11011011;liehang=10111101;liehang=01111110;liehang=00000000;liehang=10000001;liehang=11000011;liehang=11100111;liehang=11111111;lie hang=11111111;lie lie=00010000;hang lie=00111000;hang lie=01111100;hang lie=11111110;hang lie=00111000;hang lie=00111000;han

17、g lie=00111000;hang lie=00000000;hang lie=00111000;hang lie=01111100;hang lie=11111110;hang lie=00111000;hang lie=00111000;hang lie=00111000;hang lie=00000000;hang lie=00010000;hang lie=01111100;hang lie=11111110;hang lie=00111000;hang lie=00111000;hang lie=00111000;hang lie=00000000;hang lie=000100

18、00;hang lie=00111000;hang lie=11111110;hang lie=00111000;hang lie=00111000;hang lie=00111000;hang lie=00000000;hang lie=00010000;hang lie=00111000;hang lie=01111100;hang lie=11111110;hang lie=00111000;hang lie=00111000;hang lie=00000000;hang lie=00010000;hang lie=00111000;hang lie=01111100;hang lie=

19、11111110;hang lie=00111000;hang lie=00111000;hang lie=00000000;hang lie=00010000;hang lie=00111000;hang lie=01111100;hang lie=11111110;hang lie=00111000;hang lie=00111000;hang lie=00000000;hang lie=00010000;hang lie=00111000;hang lie=01111100;hang lie=11111110;hang lie=00111000;hang lie=00111000;hang lie=00000000;hang lie=00010000;hang lie=00111000;hang lie=01111100;hang lie=11111110;hang lie=00111000;hang lie=00111000;hang lie=00111000;hang=11111110; end case; end if; d_lie=lie; d_hang=hang; end process; end d; 4、主控制模块library ieee;use ieee.std_logic_1164.all;use ieee

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

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1