七段数码管显示设计报告目录一、设计任务二、题目分析与整体构思三、硬件电路设计四、程序设计五、心得体会一.设计任务数码的显示方式一般有三种:第一种是字型重叠式;第二种是分段式;第三种是点阵式。
目前以分段式应用最为普遍,主要器件是七段发光二极管(LED)显示器。
它可分为两种,一是共阳极显示器(发光二极管的阳极都接在一个公共点上),另一是共阴极显示器(发光二极管的阳极都接在一个公共点上,使用时公共点接地)。
数码管动态扫描显示,是将所用数码管的相同段(a~g 和p)并联在一起,通过选位通信号分时控制各个数码管的公共端,循环依次点亮各个数码管。
当切换速度足够快时,由于人眼的“视觉暂留”现象,视觉效果将是数码管同时显示。
根据七段数码管的显示原理,设计一个带复位的七段数码管循环扫描程序,本程序需要着重实现两部分:1. 显示数据的设置:程序设定4 位数码管从左至右分别显示1、2、3、4;2. 动态扫描:实现动态扫描时序。
利用EXCD-1 开发板实现七段数码管的显示设计,使用EXCD-1 开发板的数码管为四位共阴极数码管,每一位的共阴极7 段数码管由7 个发光LED 组成,7 个发光LED 的阴极连接在一起,阳极分别连接至FPGA相应引脚。
四位数码管与FPGA 之间通过8 位拨码开关(JP1)进行连接。
二.题目分析与整体构思使用EXCD-1 开发板的数码管为四位共阴极数码管,每一位的共阴极7 段数码管由7个发光LED 组成,呈“”字状,7 个发光LED 的阴极连接在一起,阳极分别连接至FPGA 相应引脚。
SEG_SEL1、SEG_SEL2、SEG_SEL3 和SEG_SEL4 为四位7 段数码管的位选择端。
当其值为“1”时,相应的7 段数码管被选通。
当输入到7 段数码管SEG_A~ SEG_G 和SEG_DP 管脚的数据为高电平时,该管脚对应的段变亮,当输入到7 段数码管SEG_A~SEG_G 和SEG_DP 管脚的数据为低电平时,该管脚对应的段变灭。
该四位数码管与FPGA 之间通过8 位拨码开关(JP1)进行连接,当DIP 开关全部拨到上方时(板上标示为:7SEGLED),FPGA 的相应IO 引脚和四位7 段数码管连接,7 段数码管可以正常工作;当DIP 开关全部拨到下方时(板上标示为:EXPORT5),FPGA 的相应IO引脚与7 段数码管断开,相应的FPGA 引脚用于外部IO 扩展。
注意:无论拨码开关断开与否,FPGA 的相应IO 引脚都是与外部扩展接口连接的,所以当正常使用数码管时,不允许在该外部扩展接口上安装任何功能模块板。
数码管选通控制信号分别对应4 个数码管的公共端,当某一位选通控制信号为高电平时,其对应的数码管被点亮,因此通过控制选通信号就可以控制数码管循环依次点亮。
一个数码管稳定显示要求的切换频率要大于50Hz,那么4 个数码管则需要50×4=200Hz 以上的切换频率才能看到不闪烁并且持续稳定显示的字符。
三.硬件电路设计设计结构图如下:四.软件设计(1)创建工程制定工程名,工程路径以及顶层设计所使用的输入方式,此设计我们选择硬件描述语言作为顶层设计的输入方式HDL。
(2)选择目标器件(3)创建新源文件这里我们选择“VHDL Module”,进行新源文件模块定义,所定义的内容是所要设计模块的实体说明,即模块的端口说明。
本实验所要实现的是编码器的设计,设定SW0与SW1的四个状态分别作为SEG_SEL1、SEG_SEL2、SEG_SEL3 和SEG_SEL4四位7 段数码管的位选择端,共8 个输出信号控制四个数码管显示,选择输出为总线模式(Bus),Msb、Lsb 分别表示最大端口号与最小端口号(注意:选择端口方向in、out、inout)。
检查模块端口定义是否正确。
(4)添加源文件(5)完成工程创建在工程设置统计窗口,可以看到对工程的描述总结,目标器件的描述,以及新建源文件的总结,此工程创建完成。
(6)设计输入包括库的声明,包的声明,完整的实体说明以及结构体框架。
使用VHDL 语言设计完善数码管显示的设计,拨动开关SW0~SW1 ,其四个状态为四个位选择端,LED0~LED3 作为输出显示,以观察实验结果。
1.LED 与编码器电路对应关系(7)仿真设计代码输入完成后,需要对设计进行波形仿真。
有添加波形仿真文件,仿真波形文件时钟设置,设置输入信号波形和波形仿真这几个步骤。
(8)设计综合Xilinx 综合工具对设计进行行为级综合,将系统直接从行为级描述综合为寄存器传输级描述。
综合过程中主要完成三个步骤:首先为语法检查,检查设计文件语法是否有错误;其次为编译过程,翻译和优化HDL 代码,将其转换为综合工具可以识别的元件序列;最后为映射过程,将这些可识别的元件序列转换为可识别的目标技术的基本元件。
Synthesis 工具即用来完成设计综合,它可完成以下任务查看综合报告(View Synthesis Report)、查看RTL 原理图(View RTL Schematic)、查看技术原理图(Vies Technology Schematic)、检查语法(Check Syntax)、产生综合后仿真模型(Generate Post-Synthesis Simulation Model)。
(9). 引脚分配信号名及对应板上资源信号名FPGA 引脚分配时钟脉冲clk P80七段数码管a 段a_to_g<0> P49七段数码管b 段a_to_g<1> P42七段数码管c 段a_to_g<2> P45七段数码管d 段a_to_g<3> P41七段数码管e 段a_to_g<4> P48七段数码管f 段a_to_g<5> P50七段数码管g 段a_to_g<6> P47七段数码管小数点dp P40片选an<0> P34片选an<1> P35片选an<2> P36数码管1 片选an<3> P39复位(SW0) btn P43(10)设计实现设计综合完成后,即进行设计实现(Implement)。
实现过程主要分为三个步骤:翻译逻辑网表(Translate)、映射到器件单元(Map)、布局布线(Place&Route)。
在处理子窗口,鼠标双击Implement Design,信息输出窗口会显示设计信息。
(11)生成下载文件及目标板配置处理子窗口中双击Generate Programming File,生成可编程文件。
而后双击Configure Target Device,进行目标板配置。
开发板正确连接,并上电后,可在ISE 用户区看到两个可配置芯片,分别为4Mb 的平台flash 与FPGA xc3s500e台flash 与FPGA xc3s500e。
同时出现平台Flash 配置文件指定窗口,绿色芯片表示当前进行配置的芯片。
该设计我们选择对FPGA xc3s500e 进行配置,平台Flash 配置窗口点击Cancel。
选定FPGA 芯片图标,右键单击选择program,在随后弹出的“Device Programming Properties”对话框直接点击ok,对FPGA 进行编程。
文件下载成功,则显示“Program Succeeded”可通过开发板观察相应实验现象。
至此,使用ISE 软件设计基本逻辑门电路已经完成。
(12)程序代码1. 顶层文件library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity clk7seg_top isPort ( clk : in STD_LOGIC;btn : in STD_LOGIC; --复位信号a_to_g : out STD_LOGIC_VECTOR (6 downto 0);an : out STD_LOGIC_VECTOR (3 downto 0);dp : out STD_LOGIC);end clk7seg_top;architecture Behavioral of clk7seg_top iscomponent clk7segPort ( x : in STD_LOGIC_VECTOR (15 downto 0);clk : in STD_LOGIC; --100MHzclr : in STD_LOGIC;a_to_g : out STD_LOGIC_VECTOR (6 downto 0);an : out STD_LOGIC_VECTOR (3 downto 0);dp : out STD_LOGIC);end component;signal x : std_logic_vector(15 downto 0);beginx<=X"1234"; --设定x 初值U0 : clk7seg port map(x=>x,clk=>clk,clr=>btn,a_to_g=>a_to_g,an=>an,dp=>dp);end Behavioral;2. 七段数码管显示程序library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity clk7seg isPort ( x : in STD_LOGIC_VECTOR (15 downto 0); clk : in STD_LOGIC; --50MHzclr : in STD_LOGIC;a_to_g : out STD_LOGIC_VECTOR (6 downto 0); an : out STD_LOGIC_VECTOR (3 downto 0);dp : out STD_LOGIC);end clk7seg;architecture Behavioral of clk7seg issignal s : std_logic_vector (1 downto 0);signal digit : std_logic_vector (3 downto 0);signal clkdiv : std_logic_vector (20 downto 0); signal aen : std_logic_vector (3 downto 0) := "1111"; begindp <= '1';s <= clkdiv(20 downto 19); --片选process(clr)beginif(clr='1') thenclkdiv <= (others => '0');elsif(rising_edge(clk)) thenclkdiv <= clkdiv + 1;end if;end process;process(aen,s)beginan <= "0000";if(aen(conv_integer(s))='1') thenan(conv_integer(s)) <= '1'; --an(n)为1 则片选第n 个数码管end if;end process;process(s)begincase s iswhen "00" => digit <= x(3 downto 0);when "01" => digit <= x(7 downto 4);when "10" => digit <= x(11 downto 8);when others => digit <= x(15 downto 12); --4 个数码管轮流显示,有延时end case;end process;process(digit)begincase digit iswhen x"0" => a_to_g <= "1111110";--"0000001";when x"1" => a_to_g <= "0110000";--"1001111";when x"2" => a_to_g <= "1101101";--"0010010";when x"3" => a_to_g <= "1111001";--"0000110";when x"4" => a_to_g <= "0110011";--"1001100";when x"5" => a_to_g <= "1011011";--"0100100";when x"6" => a_to_g <= "1011111";--"0100000";when x"7" => a_to_g <= "1110000";--"0001111";when x"8" => a_to_g <= "1111111";--"0000000";when x"9" => a_to_g <= "1111011";--"0000100";when x"A" => a_to_g <= "1110111";--"0001000";when x"B" => a_to_g <= "0011111";--"1100000";when x"C" => a_to_g <= "1001110";--"0110001";when x"D" => a_to_g <= "0111101";--"1000010";when x"E" => a_to_g <= "1001111";--"0110000";when others => a_to_g <= "1000111";--"0111000";end case;end process;end Behavioral;五.调试将SW0~SW6为a_to_g 来改变其状态来观察,结果如下:SW0~SW6 "1111110",显示"0";SW0~SW6"0110000",显示"1";SW0~SW6 "1101101"显示"2";SW0~SW6 "1111001 "显示"3";SW0~SW6 "0110011 "显示"4";SW0~SW6"1011011 "显示"5";SW0~SW6 "1011111"显示"6";SW0~SW6“1110000"显示"7";SW0~SW6"1111111"显示"8";SW0~SW6 "1111011"显示"9";SW0~SW6 "1110111"显示"A";SW0~SW6"0011111"显示"B";SW0~SW6 "1001110"显示"C";SW0~SW6"0111101"显示"D";SW0~SW6"1001111"显示"E";SW0~SW6 "1000111"显示其他;在软件中波形图如下:调试结果:数码管显示成功实现。