1、时钟设计及数码管驱动论文基于FPGA的时钟设计及数码管驱动(VHDL语言、实现)摘要本设计为一个显示10毫秒、秒钟、分钟、时钟的跑表。利用开发平台的8个数码管设计一个跑表,包括时钟、分钟、秒钟以及10毫秒的显示。它们分别占用两个数码管,显示其个位和十位。本设计采用FPGA技术,以硬件描述语言VHDL为系统逻辑描述手段设计文件,在xilinxISE工具软件环境下,由各个基本模块共同构建了一个基于FPGA的数字钟。本设计小组成员共有三人:其他两人采用Verilog HDL语言设计时钟代码。关键词:FPGA;数字时钟设计;数码管目录1 FPGA简介 1.1 FPGA概述 1.2 FPGA的应用领域
2、2 时钟设计方案 2.1时钟设计的原理 3 时钟总体设计 3.1 时钟代码程序的设计 3.2 引脚分配 4 实验步骤与结果 4.1 实验步骤 4.2 仿真波形 5 实验心得 1.1 FPGA概述FPGA是现场可编程门阵列(Field Programmable Gate Array)的简称,与之相应的CPLD是复杂可编程逻辑器件(Complex Programmable Logic Device)的简称,两者的功能基本相同,只是实现原理略有不同,所以有时可以忽略这两者的区别,统称为可编程逻辑器件或CPLD/PGFA。CPLD/PGFA几乎能完成任何数字器件的功能,上至高性能CPU,下至简单的74
3、电路。它如同一张白纸或是一堆积木,工程师可以通过传统的原理图输入或硬件描述语言自由的设计一个数字系统。通过软件仿真可以事先验证设计的正确性,在PCB完成以后,利用CPLD/FPGA的在线修改功能,随时修改设计而不必改动硬件电路。使用CPLA/FPGA开发数字电路,可以大大缩短设计时间,减少PCB面积,提高系统的可靠性。这些优点使得CPLA/FPGA技术在20世纪90年代以后得到飞速的发展,同时也大大推动了EDA软件和硬件描述语言HDL的进步。1.2 FPGA的应用领域: FPGA所具有的无限次可重复编程能力,灵活的体系结构,丰富的触发器及布线资源等一系列的特点使得它可以满足电子产品设计的多种需
4、求。FPGA的应用领域主要集中在替换通用逻辑和复杂逻辑、重复编程使用、板极设计集成、高速计数器、加减法器、累加器和比较器的实现、总线接口逻辑等方面。 应用和开发FPGA必须对器件的性能有一个全面了解,例如对器件的容量、速度、功耗,接口要求和引脚数目等进行综合考虑,同时还要注意以下几个细节问题: 时序电路应用“上电”复位电路,保证开机加电后,置时序电路于初始状态; 器件的电源与地引脚必须并接一只0.1F的无感电容,起滤波和去耦作用; 不能采用数目是偶数的反向器串联的方法构成“延时电路”,一则延时的时间不准确,二则自动编译时会作为冗余电路被简化掉; 主要的全局缓冲器必须由半专用的焊盘驱动,次要的全
5、局缓冲器可以来源于半专用的焊盘或内部网线; 引脚之间严禁短路,忌用万用表直接测量器件引脚; 器件的I/ O口如被定义为输出端,忌对该端加信号,否则将损坏芯片; 低功耗的器件如接负载过大时,不仅会使所用器件的工作效率显著降低,甚至会损伤芯片。 2.1 实验原理:数码管引脚为10个,其中上下两排引脚的中间一个为公共极,其余八个为显示控制引脚。按照公共极有效电平的不同,分为共阳极和共阴极两种类型。其中,公共极是指公共端(上下两排引脚的中间一个)接高电平,控制显示引脚接低时对应的段发光。共阴极是指公共端接低电平,控制显示引脚接高时对应的段发光。数码管的发光颜色常见有红色和绿色。本开发平台采用的数码管为
6、共阴极数码管。该部分的原理图如下图所示,八个数码管用一个3-8译码器来选通当前显示的数码管。 首先需要将系统的50M时钟分频,产生10毫秒信号;其次,需要对10毫秒计数,每100次秒钟加1,秒钟满60,分钟加1,依次类推。10毫秒个位和十位之间为十进制,秒钟、分钟、时钟的十位和个位之间也是10进制,但是秒钟和分钟之间,分钟和时钟之间都是60进制,在显示部分,需要实现10进制数据的显示,要设计译码电路;最后,由于8个数码管3-8译码器控制,需要对数码管扫描显示,因此,还要有扫描电路。要注意的是,扫描的速度不能太快也不能太慢,否则将会看到闪烁,一般将扫描速度设为us级别。综上所述,时钟设计框图如图
7、所示:3.1 VHDL源代码:library ieee;use ieee.std_logic_1164.all;use ieee_std_logic_unsigned.all;entity clock is Port ( clk : in STD_LOGIC; SMG_CS : out STD_LOGIC; SMG_D : out STD_LOGIC_VECTOR (7 downto 0); SMG_SEL : out STD_LOGIC_VECTOR (1 to 3);end clock;architecture Behavioral of clock issignal sel:std_lo
8、gic_vector(2 downto 0);signal clk1,clk2:std_logic;signal a0,a1,a2,a3,a4:std_logic_vector(3 downto 0);signal a5:std_logic_vector(3 downto 0):1001;signal a6:std_logic_vector(3 downto 0):0101;signal a7:std_logic_vector(3 downto 0):0011;signal a8:std_logic_vector(3 downto 0):0010;signal disp:std_logic_v
9、ector(3 downto 0);signal smg_sl:std_logic_vector(3 downto 1);beginSMG_CS=1; process(clk) variable cnt:integer range 0 to 50000; begin if clkevent and clk=1then cnt:=cnt+1; if cnt 25000then clk1=0; elsif cnt50000 then clk1=1; else cnt:=0; clk1=0; end if; end if;end process;process (clk1)beginif clkev
10、ent and clk=1 then if a09 then a0=a0+1; elsif a19 then a1=a1+1; a0=0000; elsif a29 then a2=a2+1; a0=0000; a1=0000; elsif a39 then a3=a3+1; a0=0000; a1=0000; a2=0000; elsif a45 then a4=a4+1; a0=0000; a1=0000; a2=0000; a3=0000; elsif a59 then a5=a5+1; a0=0000; a1=0000; a2=0000; a3=0000; a4=0000; elsif
11、 a65 then a6=a6+1; a0=0000; a1=0000; a2=0000; a3=0000; a4=0000; a5=0000;elsif a73 then a7=a7+1; a0=0000; a1=0000; a2=0000; a3=0000; a4=0000; a5=0000; a6=0000;elsif a82 then a8=a8+1; a0=0000; a1=0000; a2=0000; a3=0000; a4=0000; a5=0000; a6=0000; a7=0000; elsif a0=0000; a1=0000; a2=0000; a3=0000; a4=0
12、000; a5=0000; a6=0000; a7=0000; a8=0000; end if; end if;end process; process(clk) variable cnt:integer range 0 to 25000; begin if clkevent and clk=1then cnt:=cnt+1; if cnt112500 then clk2=0; elsif cnt150000 then clk2=1; else cnt1:=0; clk2=0; end if; end if;end process; process(clk2) variable cnt:int
13、eger range 0 to 50000; begin if clk2event and clk2=1then seldisp=a1;smg_sldisp=a1;smg_sldisp=a1;smg_sldisp=a1;smg_sldisp=a1;smg_sldisp=a1;smg_sldisp=a1;smg_sldisp=a1;smg_sldisp=0000; end case; end if;end process; SMG_SELSMG_DSMG_DSMG_DSMG_DSMG_DSMG_DSMG_DSMG_DSMG_DSMG_DSMG_D=00000000; end case; end
14、process;end Behavioral;3.2 引脚分配表如下:名称信号名FPGA引脚时钟ClkAA12七段数码管片选SMG_CSA6七段数码管位选SMG_SELC8七段数码管位选SMG_SELB20七段数码管位选SMG_SELA20七段数码管输出SMG_DC11七段数码管输出SMG_DE11七段数码管输出SMG_DE10七段数码管输出SMG_DC12七段数码管输出SMG_DE12七段数码管输出SMG_DE13七段数码管输出SMG_DF13七段数码管输出SMG_DD134.1 实验步骤和结果: 实验步骤如下: 新建一个工程; 编辑HDL源代码; 编译并仿真; 仿真无误后,进行管脚分配,再
15、运行,生成.bit文件; 用下载电缆通过JTAG口将对应的.bit文件加载到FPGA中。观察实验结果是否与自己的编程思想一致。可以看到,8个共阴数码管开始显示计时时钟,其中8个数码管从低位到高位分别显示毫秒十位、毫秒百位、秒个位、秒十位、分钟个位、分钟十位、时钟个位、时钟十位。需要注意的是,为了验证程序进位是否正确而又不会让学生等待太久,可以设置初始值为23:59:50。只需等待10秒钟即可。4.2 仿真波形:5.1 实验心得:我们此次设计与制作时钟是为了了解数码管驱动的原理,从而学会制作时钟。而且通过时钟的制作进一步的了解各种在制作中用到的数码管的作用及实用方法。通过本次课程设计,我们可以进
16、一步学习和掌握各种电路的原理与使用方法。通过课程设计,使我加巩固和加深对电子电路基本知识的理解,学会方案设计,方案实施,进一步提高我综合运用所学知识的能力,提高分析解决实际问题的能力。锻炼分析、解决电子电路问题的实际本领,通过此综合训练,不仅学会了实验技术,掌握了实验方法即用实验检验理论的方法等。在FPGA实验中,提高了通过学会理解实验原理,熟练实验操作方法,实验数据处理方法的能力。我在老师的启发引导下,通过解决问题,获取知识,掌握实验思想和实验方法的实质,从而培养实验能力,在FPGA实验中使我受益非浅。同时,通过和伙伴的同心协力,使我深刻认识到团队合作的快乐重要与力量,也使我们提高了实验实践能力,和加深了对FPGA的认识!
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2