Dennis
静态扫描显示电路设计
专 业: 自动化 班级学号: 姓 名: Dennis
2010年 12 月 11 日
1
Dennis
一、设计实验目的:
在MAX+plusII软件平台上,熟练运用VHDL语言,完成静态扫描显示电路的VHDL语言编程、编译、综合、仿真,使用EDA实验箱,实现静态扫描显示电路的硬件功能。
二、设计实验说明及要求:
1、静态扫描显示电路组成:计数器、显示译码器、扫描电路组成。在静态扫描显示电路中最关键的是如何在每一个数码管静态显示固定的数字,除此之外,静态扫描显示电路需清零控制端\\启动控制端使静态扫描显示电路清零及启动。
2、静态扫描显示电路要在七个数码管实现静态显示每位同学的班级学号显示。
3、能够完成清零、启动(可以使用键盘或拨码开关置数)功能。
三、数字时钟组成及功能:
1、计数器:用来产生实现数码管分配;
2、扫描显示译码器:完成对7字段数码管显示的控制;
四、系统硬件要求:
1、时钟信号为10MHz; 2、FPGA芯片型号EPM7128SLC84-15、EP1K30TC144-3或EP1K100QC208-3(根据实验箱上FPGA芯片具体选择);
3、8个7段扫描共阴级数码显示管; 4、按键开关(清零、启动);
五、设计内容及步骤:
1、设计思路:
静态扫描显示电路的主要组成为:计数器、显示译码器、扫描电路组成。 我的学号为5080211,因为需要七个数码管,所以用七进制计数器即可,计数器从0到6计数,到6后归0,接着开始从0到6计数。
然后扫描电路(即时钟信号)根据每个时刻的计数器计数值,输出相应的数码管,从而选择控制,即sel2,sel1,sel0。从试验箱的一排数码管从最右端向第七个数码管循环扫描。例如:sel2,sel1,sel0为“000”则选择地的是最右边的数码显示管。
当扫描到一个数码管,根据此时需要输出的数值,利用显示译码器翻译为相应的数码管显示编码即可,比如要sel=“000”时,要输出的数值是“0100”,将“0100”(即数字4),翻译为“1100110”给sel选中的数码管显示出来即可。显示出来的数字就是4
除此之外,静态扫描显示电路需清零控制端、启动控制端使静态扫描显示电路清零及启动。
启动/关闭用CS表示,当CS为无效时,和时钟信号相与,则没有时钟输入,输出端,使sel=“111”,由于时钟停止,则只是选择最左端的数码管,输出的译码为“00000000”即什么都没有显示。
2
Dennis
清零用clear表示,当其无效时,正常显示,当其有效时,不管译码为多少,强制输出为“01111111”即“0”,由于时钟还在扫描,现象即为七个数码管都为零。
此为本程序设计的整体思路。 2、端口说明:
scan 时钟输入,上升沿有效 CS 片选使能端,高电平有效 clear 清零输入,高电平有效 m0??m6 数码管7段显示数据端口 sel0??sel2 数码管选择显示控制端口 3、源程序和注释: library ieee;
use ieee.std_logic_1164.all use ieee.std_logic_unsigned.all
entity xuehao is --定义实体 port(scan,cs,clear:in std_logic; --分别为时钟扫描入口,启
动/关闭端口,清零端口
sel:out std_logic_vector(2 downto 0); --选择八个数码管中之一显示 m:out std_logic_vector(6 downto 0)); --数码管7段显示数据端口 end xuehao;
architecture behave of xuehao is --结构体开始
signal sl:std_logic_vector(2 downto 0); --七进制计数器的数值 signal bcd_out:std_logic_vector(3 downto 0); --八个数码管数据输
入端口
signal q:std_logic_vector(6 downto 0); --数码管显示数据的编码 signal clk_scan:std_logic; --接受扫描端口的信号 constant no1_bcd:std_logic_vector:=\constant no2_bcd:std_logic_vector:=\constant no3_bcd:std_logic_vector:=\constant no4_bcd:std_logic_vector:=\constant no5_bcd:std_logic_vector:=\constant no6_bcd:std_logic_vector:=\constant no7_bcd:std_logic_vector:=\
--七个数,分别为1120805,显示的时候会从左
到右显示为5080211
begin
clk_scan<=scan and cs; --当片选端口为高电平时,开始扫描 process(clk_scan)
begin --七进制计数器
if clk_scan'event and clk_scan='1'then --扫描时钟上升沿有效
3
Dennis
if sl=\sl<=\记到6后,再来上升沿后,将会复
位为0
else sl<=sl+1; --sl不到6,输入上升沿,则sl加1 end if; end if;
end process; --计数器进程结束
process(sl) --扫描电路,有数据选择的功能,当时
钟从0到6计数时
--对应七个数码管轮流显示,其值对应相应输出的学号 begin
case sl is
when\最右端的学号数字1 when\ when\ when\ when\ when\
when\最左端的学号数字为5 when others=>bcd_out<=\ end case;
end process; --数据选择进程结束
process(bcd_out) --7段译码,将十进制的数字翻译为可以用数码管显
示的编码
begin
case bcd_out is
when\的译码 when\的译码 when\的译码 when\的译码 when\的译码 when\的译码 when\的译码 when\的译码 when\的译码 when others=>q<=\ end case;
end process; --进程结束
sel<=sl when cs='1' --当片选有效时,输出数码管的选择控制 else \当片选无效时,让其选择最左面的一个数
码管
4
Dennis
--由前面的扫描电路和译码知,此时没有输
出
m<=q when(cs='1' and clear='0')else --当片选有效,清零无效
时,正常输出
\当片选有效,清零有效
时
--七个数码管输出为0 \
end behave; --结构体结束 4、仿真输出:
5、硬件连线: (1)FPGA芯片引脚分配(以EP1K30TC144-3为例,如果引脚用软件自动分配时), scan——124引脚, CS——54引脚, clear——56引脚 sel0,sel1,sel2——14,143,18引脚, m0,??m6——17,11,13,12,136,95.96引脚
(2)外部硬件与FPGA的接线(以EP1K30TC144-3为例),
机箱时钟脉冲clk5——124引脚,
拨码开关D0——54引脚,拨码开关D1——56引脚, 数码管显示接口sel0,sel1,sel2——14,143,18引脚,
数码管数据接口a,b,c,d,e,f,g——17,11,13,12,136,95.96引脚
5