一、设计任务
二、题目分析与整体构思
三、硬件电路设计
四、程序设计
五、心得体会
一. 设计任务
数码的显示方式一般有三种:第一种是字型重叠式;第二种是分段式;第三种是点阵式。
目前以分段式应用最为普遍,主要器件是七段发光二极管(LED)显示器。它可分为两种,
一是共阳极显示器(发光二极管的阳极都接在一个公共点上),另一是共阴极显示器(发光
二极管的阳极都接在一个公共点上,使用时公共点接地)。
数码管动态扫描显示,是将所用数码管的相同段(ag p)并联在一起,通过选位通
信号分时控制各个数码管的公共端,循环依次点亮各个数码管。当切换速度足够快时,由于
人眼的“视觉暂留”现象,视觉效果将是数码管同时显示。
根据七段数码管的显示原理,设计一个带复位的七段数码管循环扫描程序,本程序需要着重实现两部分:
1. 显示数据的设置:程序设定 4 位数码管从左至右分别显示1234
2. 动态扫描:实现动态扫描时序。
利用EXCD-1 开发板实现七段数码管的显示设计,使用EXCD-1 开发板的数码管为四位共阴极数码管,每一位的共阴极7 段数码管由7 个发光LED 组成,7 个发光LED 的阴极连接在一起,阳极分别连接至FPGA相应引脚。四位数码管与 FPGA 之间通过8 位拨码开关(JP1)进行连接。
二. 题目分析与整体构思
使用EXCD-1 开发板的数码管为四位共阴极数码管,每一位的共阴极7 段数码管由7 个发光LED 组成,呈“ ”字状,7 个发光LED 的阴极连接在一起,阳极分别连接至FPGA相应引脚。SEG_SEL1SEG_SEL2SEG_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×4200Hz 以上
的切换频率才能看到不闪烁并且持续稳定显示的字符。
三. 硬件电路设计
设计结构图如下:
四. 软件设计
1)创建工程
制定工程名,工程路径以及顶层设计所使用的输入方式,此设计我们选择硬件描述语言作为顶层设计的输入方式HDL
2)选择目标器件
3)创建新源文件
这里我们选择“VHDL Module”,进行新源文件模块定义,所定义的内容是所要设计模块的实体说明,即模块的端口说明。本实验所要实现的是编码器的设计,设定SW0SW1的四个状态分别作为SEG_SEL1SEG_SEL2SEG_SEL3 SEG_SEL4四位7 段数码管的位选择端,共8 个输出信号控制四个数码管显示,选择输出为总线模式(Bus)MsbLsb 分别表示最大端口号与最小端口号(注意:选择端口方向inoutinout)。
检查模块端口定义是否正确。
4)添加源文件
5)完成工程创建
在工程设置统计窗口,可以看到对工程的描述总结,目标器件的描述,以及新建源文件
的总结,此工程创建完成。
6)设计输入
包括库的声明,包的声明,完整的实体说明以及结构体框架。使用VHDL 语言设计完善数码管显示的设计,拨动开关SW0SW1 ,其四个状态为四个位选择端,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 Targ
et Device,进行目标板配置。
开发板正确连接,并上电后,可在ISE 用户区看到两个可配置芯片,分别为4Mb 的平台flash FPGA xc3s500eflash FPGA xc3s500e。同时出现平台Flash 配置文件指定窗口,绿芯片表示当前进行配置的芯片。该设计我们选择对FPGA xc3s500e 进行配置,平台Flash
置窗口点击Cancel。选定FPGA 芯片图标,右键单击选择program,在随后弹出的“Device Programming Properties”对话框直接点击ok,对FPGA 进行编程。文件下载成功,则显示“Program  Succeeded”可通过开发板观察相应实验现象。至此,使用ISE 软件设计基本逻辑门电路已经完成。
(12)程序代码
1. 顶层文件
7本布局
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity clk7seg_top is
Port ( 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 is
component clk7seg
Port ( x : in STD_LOGIC_VECTOR (15 downto 0);
clk : in STD_LOGIC; --100MHz
clr : 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);
begin
x<=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;