一、 实验目的:
1.了解教学系统中8位八段数码管显示模块的工作原理,设计标准扫描驱动电路模块,以备后面实验调用。
2.会电路图输入方法和VHDL语言方法输入的混合使用。
二、硬件要求:
1.GW48EDA/SOPC+PK2实验系统。 三、实验内容及预习要求:
1.计数器(counter):
计数器(counter)是数字系统中常用的时序电路,因为计数是数字系统的基本操作之一。计数器在控制信号下计数,可以带复位和置位信号。因此,按照复位、置位与时钟信号是否同步可以将计数器分为同步计数器和异步计数器两种基本类型,每一种计数器又可以分为进行加计数和进行减计数两种。在VHDL描述中,加减计数用“+”和“-”表示即可。
(1)同步计数器:
同步计数器与其它同步时序电路一样,复位和置位信号都与时钟信号同步,在时钟沿跳变时进行复位和置位操作。例2-1为带时钟使能的同步4位二进制减法计数器的VHDL模型:
count是一个带时钟使能的同步4位二进制减法计数器,计数范围F~0。每当时钟信号或者复位信号有跳变时激活进程。如果此时复位信号clr有效(高电平),计数器被复位,输出计数结果为0;如果复位信号无效(低电平),而时钟信号clk出现上升沿,并且计数器的计数使能控制信号en有效(高电平),则计数器count自动减1,实现减计数功能。图S2-1为带时钟使能的同步4位二进制减法计数器的仿真波形图:
图S2-1 带时钟使能的同步4位二进制减法计数器的仿真图形
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY count IS
PORT(clk,clr,en : IN STD_LOGIC;
qa,qb,qc,qd : OUT STD_LOGIC); END count;
ARCHITECTURE ONE OF count IS
SIGNAL count_4 : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN
qa <= count_4(0); qb <= count_4(1);
qc <= count_4(2); qd <= count_4(3); PROCESS(clk,clr) BEGIN
IF(clk 'EVENT AND clk = '1') THEN IF (clr = '1') THEN count_4 <=\"0000\"; ELSIF (en='1') THEN
IF(count_4=\"0000\") THEN count_4 <= \"1111\"; ELSE
count_4 <= count_4-'1'; END IF; END IF; END IF;
END PROCESS; END ONE;
(2)异步计数器
同样的道理,异步计数器是指计数器的复位、置位与时钟不同步。例2-2为带时钟使能的异步4位二进制加法计数器的VHDL模型:
counta是一个带时钟使能的异步4位二进制加法计数器,计数范围0~F。
每当时钟信号或者复位信号有跳变时激活进程。如果此时复位信号clr有效(高电平),计数器被复位,输出计数结果为0;如果复位信号无效(低电平),而时钟信号clk出现上升沿,并且计数器的计数使能控制信号en有效(高电平),则计数器count自动加1,实现加计数功能。图S2-2为带时钟使能的异步4位二进制加法计数器的仿真波形图:
图S2-2 带时钟使能的异步4位二进制加法计数器的仿真图形
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY countup IS PORT (CLK,EN,CLR:IN STD_LOGIC;
Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));--位控制信号输出 END;
ARCHITECTURE one OF countup IS
SIGNAL COUNT_4:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN
PROCESS(CLK,CLR) BEGIN
IF CLR='1' THEN COUNT_4<=\"0000\"; ELSIF(CLK'EVENT AND CLK='1') THEN IF EN='1' THEN
IF COUNT_4=\"1111\" THEN COUNT_4<=\"0000\"; ELSE COUNT_4<=COUNT_4+'1'; END IF; END IF; END IF;
END PROCESS; Q<=COUNT_4; END one;
2.八位数码扫描显示电路设计
图S2-3所示的是8位数码扫描显示电路,其中每个数码管的8个段:h、g、f、e、d、c、b、a(h是小数点)都分别连在一起,8个数码管分别由8个选通信号k1、k2、„k8来选择。被选通的数码管显示数据,其余关闭。如在某一时刻,k3为高电平,其余选通信号为低电平,这时仅k3对应的数码管显示来自段信号端的数据,而其它7个数码管呈现关闭状态。根据这种电路状况,如果希望在8个数码管显示希望的数据,就必须使得8个选通信号k1、k2、„k8分别被COU单独选通,并在此同时,在段信号输入口加上希望在该对应数码管上显示的
数据,于是随着选通信号的扫变,就能实现扫描显示的目的。
对该例进行编辑、编译、综合、适配、仿真,给出仿真波形。实验方式:
若考虑小数点,SG的8个段分别与PIO49、PIO48、„、PIO42(高位在左)、BT的8个位分别与PIO34、PIO35、„、PIO41(高位在左);电路模式不限,引脚图参考图s2-4。将GW48EDA系统左下方的拨码开关全部向上拨,时钟CLK可选择clock0,通过跳线选择16384Hz信号。引脚锁定后进行编译、下载和硬件测试实验。将实验过程和实验结果写进实验报告
图S2-4
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY SCAN_LED IS PORT ( CLK : IN STD_LOGIC;
SG : OUT STD_LOGIC_VECTOR(6 DOWNTO 0);--段控制信号输出 BT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );--位控制信号输出 END;
ARCHITECTURE one OF SCAN_LED IS
SIGNAL CNT8 : STD_LOGIC_VECTOR(2 DOWNTO 0); SIGNAL A : INTEGER RANGE 0 TO 15; BEGIN
P1:PROCESS( CNT8 ) BEGIN
CASE CNT8 IS
WHEN \"000\" => BT <= \"00000001\" ; A <= 1 ; WHEN \"001\" => BT <= \"00000010\" ; A <= 3 ; WHEN \"010\" => BT <= \"00000100\" ; A <= 5 ; WHEN \"011\" => BT <= \"00001000\" ; A <= 7 ; WHEN \"100\" => BT <= \"00010000\" ; A <= 9 ; WHEN \"101\" => BT <= \"00100000\" ; A <= 11 ; WHEN \"110\" => BT <= \"01000000\" ; A <= 13 ; WHEN \"111\" => BT <= \"10000000\" ; A <= 15 ; WHEN OTHERS => NULL ; END CASE ; END PROCESS P1;
P2:PROCESS(CLK) BEGIN
IF CLK'EVENT AND CLK = '1' THEN CNT8 <= CNT8 + 1; END IF; END PROCESS P2 ; P3:PROCESS( A ) --译码电路 BEGIN
CASE A IS
WHEN 0 => SG <= \"0111111\"; WHEN 1 => SG <= \"0000110\"; WHEN 2 => SG <= \"1011011\"; WHEN 3 => SG <= \"1001111\"; WHEN 4 => SG <= \"1100110\"; WHEN 5 => SG <= \"1101101\"; WHEN 6 => SG <= \"1111101\"; WHEN 7 => SG <= \"0000111\"; WHEN 8 => SG <= \"1111111\"; WHEN 9 => SG <= \"1101111\"; WHEN 10=> SG <= \"1110111\"; WHEN 11 => SG <= \"1111100\"; WHEN 12=> SG <= \"0111001\"; WHEN 13 => SG <= \"1011110\"; WHEN 14=> SG <= \"1111001\"; WHEN 15 => SG <= \"1110001\"; WHEN OTHERS => NULL ; END CASE ;
END PROCESS P3; END;
3.编一个简单的从0-59轮换显示十进制数的电路。 要求:
(1) 输入的时钟用CLK表示(时钟频率<2HZ); (2) 系统具有复位功能,复位引脚用RESET表示;
(3) 输出的七段代码引脚分别用A、B、C、D、E、F、G表示; (4) 采用计算机仿真查看设计能否满足要求;
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY COUNT IS PORT ( CLK,CLR: IN STD_LOGIC;
SG0,SG1: OUT STD_LOGIC_VECTOR(6 DOWNTO 0); C:OUT STD_LOGIC); END;
ARCHITECTURE one OF COUNT IS
SIGNAL CNT0,CNT1: STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN
P1:PROCESS( CNT0 ) BEGIN
CASE CNT0 IS
WHEN \"0000\" => SG0 <= \"0111111\"; WHEN \"0001\" => SG0 <= \"0000110\"; WHEN \"0010\" => SG0 <= \"1011011\"; WHEN \"0011\" => SG0 <= \"1001111\"; WHEN \"0100\" => SG0 <= \"1100110\"; WHEN \"0101\" => SG0 <= \"1101101\"; WHEN \"0110\" => SG0 <= \"1111101\"; WHEN \"0111\" => SG0 <= \"0000111\"; WHEN \"1000\" => SG0 <= \"1111111\"; WHEN \"1001\" => SG0 <= \"1101111\"; WHEN OTHERS => NULL ; END CASE ; END PROCESS P1; P2:PROCESS(CLK,CLR) BEGIN
IF CLR='1' THEN CNT0<=\"0000\"; ELSIF CLK'EVENT AND CLK = '1' THEN IF CNT0=\"1001\" THEN CNT0<=\"0000\";
IF CNT1=\"0101\" THEN CNT1<=\"0000\";C<='1'; ELSE CNT1<=CNT1+'1';C<='0'; END IF;
ELSE CNT0 <= CNT0+'1'; END IF; END IF; END PROCESS P2 ; P3:PROCESS( CNT1) --译码电路 BEGIN
CASE CNT1 IS
WHEN \"0000\" => SG1 <= \"0111111\"; WHEN \"0001\" => SG1 <= \"0000110\"; WHEN \"0010\" => SG1 <= \"1011011\"; WHEN \"0011\" => SG1 <= \"1001111\"; WHEN \"0100\" => SG1 <= \"1100110\"; WHEN \"0101\" => SG1 <= \"1101101\"; WHEN OTHERS => NULL ; END CASE ;
END PROCESS P3; END;
四 实验连线:
1.恰当选择电路结构,完成上述实验连线。
五、实验报告要求:
(1) 对于原理图设计要求有设计过程。对于VHDL语言设计要求有源码。 (2) 详细论述实验步骤。
(3) 字形编码的种类,即一个8段数码管可产生多少种字符,产生所有字符需多
少根被译码信号线?
答:一个8段数码管可产生2^8=256种字符,产生所有字符至少需要8根被译码信号线。 但假如只编译0-F,16个字符,则至少只需要4根被译码信号线。 (4) 字符显示亮度同扫描频率的关系,且让人眼感觉不出光闪烁现象的最低扫描
频率是多少?
答:扫描频率越高,显示亮度越低。人眼看是否闪烁与所用的时钟和分频方式有关,在频率稳定和分频均匀的情况下,最低扫描频率为256Hz,若分频不均匀或频率不稳定,则需更高频率。
因篇幅问题不能全部显示,请点此查看更多更全内容