基于FPGA的多功能数字钟设计报告
基于FPGA多功能数字钟的设计
• 181•人类社会步入高速发展的电子时代,电子产品逐渐代替机械产品走入我们的生活。
随着科技的进步人们对电子产品的要求越来越高、传统产品已经不能满足人们的需求。
体积小、多功能、节能、环保开始成为了电子产品发展的新目标。
本文基于VHDL 语言,利用Quartus Ⅱ设计了一款多功能数字钟,内部包含秒表、闹钟、定时器、时钟四个模块。
经过实验仿真表明多功能数字钟能很好地满足生活中的各种需要。
本产品设计主要使用VHDL 语言描述了各个模块的功能来实现主要电路,最后在Quartus II 上完成了调试与仿真。
VHDL 语言实现电子设计,是一个以软件设计为主,器件配置相结合的过程,能从多个层次对数字系统进行设计,设计数字电路更为灵活方便,设计周期也可大大减小,提高了设计效率和可靠性。
我们需要的功能,在通过使用预先设计好的别的开关进一步让数字钟工作。
通过LED 显示屏可以看到数字。
本文通过软件Quartus II 9.0设计出各个模块并往开发板内写入程序实现我们想要的功能。
3 软件部分3.1 时钟部分时钟设计有三个要求第一,具有时、分、秒计数显示的功能,并以24h 循环计时。
第二,走时误差小于等于每天10s 。
第三,具有调节分钟、小时、秒以及清零的功能。
通常情况不需要让时钟停止工作,所以这部分模块就相当于实现了计数功能,对一直不断给入的1HZ 脉冲进行计数。
秒、分、时分了三个模块进行连接。
qw 是个基于FPGA多功能数字钟的设计大连理工大学城市学院 方润生 邓佳宁 于海霞图1 系统整体过渡模块,也是校正时间所用的模块。
校正时有两个开关,一个校正分、一个校正时。
如图2所示,qw 模块主要是为了实现调时功能。
实际工程中做了元件例化。
元件例化的主要作用是在大型项目的设计中许多底层文件需要反复使用,我们写好底层文件之后通过component 语句可以直接对底层文件进行调用方便了项目的设计。
3.2 闹钟闹钟在到达设置的时间时会发出持续一分钟的信号,可提前手动关闭。
基于FPGA的多功能数字时钟设计综述
流程说明:
1.工程师按照“自顶向下”的设计方法进行系统划分。
2.输入VHDL代码,这是设计中最为普遍的输入方式。此外,还可以采用图形输入方式(框图、状态图等),这种输入方式具有直观、容易理解的优点。
3.将以上的设计输入编译成标准的VHDL文件。
4.进行代码级的功能仿真,主要是检验系统功能设计的正确性。这一步骤适用于大型设计,因为对于大型设计来说,在综合前对源代码仿真,就可以大大减少设计重复的次数和时间。一般情况下,这一仿真步骤可略去。
第二章
2.1
FPGA是现场可编程门阵列(Field Programmable Gate Array)的简称,与之相应的CPLD是复杂可编程逻辑器件(Complex Programmable Logic Device)的简称,两者的功能基本相同,只是实现原理略有不同,所以有时可以忽略这两者的区别,统称为可编程逻辑器件或CPLD/FPGA。CPLD/FPGA几乎能完成任何数字器件的功能,上至高性能CPU,下至简单的74电路。它如同一张白纸或是一堆积木,工程师可以通过传统的原理图输入或硬件描述语言自由的设计一个数字系统。通过软件仿真可以事先验证设计的正确性,在PCB完成以后,利用CPLD/FPGA的在线修改功能,随时修改设计而不必改动硬件电路。使用CPLA/FPGA开发数字电路,可以大大缩短设计时间,减少PCB面积,提高系统的可靠性。这些优点使得CPLA/FPGA技术在20世纪90年代以后得到飞速的发展,同时也大大推动了EDA软件和硬件描述语言HDL的进步[1]。
5.利用综合器对VHDL源代码进行综合优化处理,生成门级描述的网络表文件,这是将高层次描述转化为硬件电路的关键步骤。综合优化是针对ASIC芯片供应商的某一产品系列进行的,所以综合的过程要在相应的厂家综合库的支持下才能完成。
多功能数字钟的FPGA实现设计报告 正文
1.设计任务及指标1.1设计任务能进行正常的时、分、秒计时功能,分别由6只数码管显示24小时、60分、60秒。
按下试验箱上的某个按键时,计时器迅速递增,并按24小时循环,计到23小时后再回到00。
按下试验箱上的某个按键时,计分器迅速递增,并按60分循环,计到59分后再回到00。
利用试验箱上的扬声器可以实现整,当计时到达59分50秒时开始报时,在59分50秒、52秒、54秒、56秒、58秒时鸣叫,鸣叫声频率为500HZ,整点报时频率可定义为1KHZ.1.2设计要求运用顶层设计思路设计好各个底层文件(VHDL代码),对各个底层文件进行功能仿真;采用原理图或者文本方法来实现顶层文件的设计,对顶层文件进行功能真仿真。
在顶层文件功能仿真正确之后,把顶层文件下载到实验箱的FPGA里边去,验证电路功能是否正确。
具体时间用6位数码管来显示,具有整点报时功能1.3 功能拓展实现数字钟的闹铃功能。
2.方案比较与选择方案一:系统直接采用1HZ脉冲作为作为时钟输入信号。
数码管采用静态显示。
时间调整采用具有预置功能的计数器。
报时为频率512Hz脉冲,并引入1024Hz脉冲进行整点报时。
方案二:系统采用1024HZ脉冲作为作为时钟输入信号。
数码管采用动态扫描显示。
时间调整采用一个数据选择器,以一个按键作为控制端。
当调整按键按下时,选择比较高的频率作为计数器计数信号作为输入信号,加快计数的速度,以此达到时间调整的效果。
图一方案二时钟流程方案比较:对于方案一,因为系统需要1024Hz和512Hz的脉冲驱动蜂鸣器,并且在快速调整时间是也需要比1Hz快的脉冲,故需要采用另外的脉冲输入,增加管脚资源开支和外部资源。
实现具有预置功能的计数器比较复杂,并且预置输入端需要多个端口。
数码管采用静态显示也会增加管脚的开销。
对于方案二,因为采用1024Hz的脉冲,能够通过分频得到多种频率的脉冲,因而可以实现单一脉冲信号输入即可完成快速调整时间和采用数码管动态扫描显示,节省管脚资源和外部资源。
基于FPGA多功能数字钟的设计
3、状态转换功能模块
该模块实现电路各状态之间的转换功能,若仅完成基本功能,系统 应包含4个状态,分别为正常计时、对秒位进行设置、对分位进行设置 和对小时位进行设置。若完成扩展功能,还可增加其他状态。这部分可 以用脉冲键输入进行切换,也可以用拨动开关进行切换。根据所选择的 切换方式,自行编写程序。
4、校时功能模块
此模块主要在状态切换到设置时,可以将时、分、秒位设置成需要的 数值,此功能可以由脉冲键输入完成。
5、译码功能模块
此模块功能将计数器产生的数值,通过编译,形成对应七段数码 管显示格式的编码。七段数码管的a-g对应实验箱上的主要引脚为 O50-O56。
6、LED显示模块
本模块使用实验箱上的8个数码管进行显示,为动态显示法,需采用 扫描的方式进行显示。此方法对于扫描频率有一定的要求,在设计时需 考虑采用那个频率作为扫描信号。8个数码管的扫描信号对应实验箱上的 引脚为SO58-SO65。
四、系统仿真
将每个模块编译成功后,进行仿真测试,若仿真结果符合设计 要求,再配置输入输出引脚,若不符合,请返回修改程序,直至仿 真结果合格。将仿真结果截图,记录至设计报告中。
精品课件!
精品课件!
五、硬件验证
将编译通过、仿真结果正确且引脚信息配置正确的程序下载至 实验箱的FPGA中,硬件验证设计是否符合要求。
2、计时功能模块
计时模块需对时、分、秒进行计数,其中小时位为24进制,分 钟和秒钟位为60进制。可以用一段程序对时、分、秒进行连续计数, 也可以对时、分、秒的高位和低位分别计数。注意,如果采用连续 计数方式,因为每位显示时有高位和低位之分,所以需将十进制数 据用BCD码进行转换后,才能输出到七段数码管上显示。
此电子钟分两种工作状态: 1、正常计时的状态; 2、设置时间的状态。
基于XilinxFPGA的数字钟设计
基于FPGA的多功能数字钟一、设计题目基于Xilinx FPGA的多功能数字钟设计二、设计目的1.掌握可编程逻辑器件的应用开发技术——设计输入、编译、仿真和器件编程;2.熟悉一种EDA软件使用;3.掌握Verilog设计方法;4.掌握分模块分层次的设计方法;5.用Verilog完成一个多功能数字钟设计;6.学会FPGA的仿真。
三、设计内容设计实验项目九多功能电子钟✧功能要求:利用实验板设计实现一个能显示时分秒的多功能电子钟,具体要求为:基本功能:1)准确计时,以数字形式显示时、分、秒,可通过按键选择指示当前显示时间范围模式;2)计时时间范围 00:00:00-23:59:593)可实现校正时间功能;4)可通过实现时钟复位功能:00:00:00扩展功能:1)定时报:时间自定(不要求改变),闹1分钟(1kHz)---利用实验板LED或外接电路实现。
2)仿广播电台正点报时:XX:59:[51,53,55,57(500Hz);59(1kHz)] ---利用实验板LED或外接电路实现。
3)报整点时数:XX:00:[00.5-XX.5](1kHz),自动、手动---利用实验板LED或外接电路实现。
4)手动输入校时;5)手动输入定时闹钟;6)万年历;7)其他扩展功能;✧设计步骤与要求:1)计算并说明采用Basys2实验板时钟50MHz实现系统功能的基本原理。
2)在Xilinx ISE13.1 软件中,利用层次化方法,设计实现模一百计数及显示的电路系统,设计模块间的连接调用关系,编写并输入所设计的源程序文件。
3)对源程序进行编译及仿真分析(注意合理设置,以便能够在验证逻辑的基础上尽快得出仿真结果)。
4)输入管脚约束文件,对设计项目进行编译与逻辑综合,生成下载所需.bit类型文件。
5)在Basys2实验板上下载所生成的.bit文件,观察验证所设计的电路功能。
四、总体设计思路主体分为分频模块,正常时间模块(包含两个模60计数器和一个模24计数器子模块),闹钟模块(分为一个模60计数器模块,一个模24计数器模块,四个比较器模块),电台报时模块,数码管显示模块(分为模式选择模块,片选信号及扫描程序模块,和译码模块)。
电子综合设计多功能数字钟报告
电子综合设计多功能数字钟报告报告内容如下:一、设计目的和原理多功能数字钟是一种能够显示时间,并具有闹钟、计时、倒计时等功能的电子设备。
本设计的目的是通过FPGA实现一个多功能数字钟的功能,以实现时间的显示和闹钟的设置功能。
二、设计方案和实现1.硬件设计方案:本设计使用FPGA作为主控芯片,使用七段数码管作为显示器,通过与FPGA的IO口连接来实现时间的显示功能。
同时,使用按键作为输入进行功能的选择和设置。
2.硬件连接:将FPGA的IO口连接到七段数码管的控制端,通过IO口输出相应的数字信号来控制数码管的亮灭。
将按键连接到FPGA的IO口,通过IO口输入按键的信号。
此外,还需要连接一个晶振电路来提供时钟信号。
3.软件设计方案:本设计使用VHDL语言进行程序设计,通过状态机来实现多功能数字钟的功能。
具体实现包括时间的显示、闹钟的设置和启动、计时和倒计时功能的实现。
通过按键的输入来切换不同的状态,实现不同功能的切换和设置。
4.软件实现具体步骤:(1)定义状态机的状态,包括时间显示、闹钟设置、计时和倒计时等状态。
(2)在时间显示状态下,通过FPGA的IO口输出相应的数字信号来控制七段数码管的亮灭,实现时间的显示。
(3)在闹钟设置状态下,通过按键的输入来设置闹钟时间,并将设置好的时间保存在寄存器中。
(4)在计时和倒计时状态下,通过按键的输入来实现计时和倒计时功能,并通过七段数码管的显示来实时显示计时和倒计时的时间。
以下为本设计的完整程序代码:```vhdl--时钟频率--定义状态signal state : state_type;--定义时钟、按键和数码管信号signal clk : std_logic;signal key : std_logic_vector(1 downto 0);signal seg : std_logic_vector(6 downto 0);--闹钟时间寄存器signal alarm_hour_reg : std_logic_vector(5 downto 0);signal alarm_min_reg : std_logic_vector(5 downto 0);--计时和倒计时寄存器signal count_up_reg : std_logic_vector(23 downto 0); signal count_down_reg : std_logic_vector(23 downto 0); signal count_down_flag : std_logic := '0';beginclock : processbeginwhile true loopclk <= '0';wait for 10 ns;clk <= '1';wait for 10 ns;end loop;end process;key_scan : process(clk)beginif rising_edge(clk) thenkey <= key_scan_func; -- 按键扫描函数end if;end process;fsm : process(clk, key)beginif rising_edge(clk) thencase state isif key = "10" then -- 第一个按键按下state <= set_alarm;elsif key = "01" then -- 第二个按键按下state <= count_up;end if;when set_alarm =>seg <= set_alarm_func; -- 闹钟设置函数if key = "00" then -- 两个按键同时按下elsif key = "01" then -- 第一个按键按下state <= count_up;end if;when count_up =>seg <= count_up_func; -- 计时函数if key = "00" then -- 两个按键同时按下elsif key = "10" then -- 第二个按键按下state <= count_down;count_down_flag <= '1';end if;when count_down =>seg <= count_down_func; -- 倒计时函数if key = "00" then -- 两个按键同时按下count_down_flag <= '0';elsif key = "01" then -- 第一个按键按下state <= count_up;count_down_flag <= '0';end if;end case;end if;end process;--数码管信号和显示模块的连接display : entity work.seg_displayport mapclk => clk,seg => segend architecture;```四、总结与展望通过FPGA实现多功能数字钟的设计,在硬件和软件的配合下,实现了时间的显示和闹钟的设置功能。
基于FPGA的多功能数字时钟设计
7.利用适配器将综合后的网络表文件针对某一具体的目标器件进行逻辑映射操作,包括底层器件配置、逻辑分割、逻辑优化和布局布线。
8.在适配完成后,产生多项设计结果:(a)适配报告,包括芯片内部资源利用情况,设计的布尔方程描述情况等;(b)适配后的仿真模型;(c)器件编程文件。根据适配后的仿真模型,可以进行适配后时序仿真,因为已经得到器件的实际硬件特性(如时延特性),所以仿真结果能比较精确的预期未来芯片的实际性能。如果仿真结果达不到设计要求,就修改VHDL源代码或选择不同速度和品质的器件,直至满足设计要求。
1.CLB是FPGA的主要组成部分。图2-1是CLB基本结构框图,它主要由逻辑函数发生器、触发器、数据选择器等电路组成。CLB中3个逻辑函数发生器分别是G、F和H,相应的输出是G’、F’和H’。G有4个输入变量G1、G2、G3和G4;F也有4个输入变量F1、F2、F3和F4。这两个函数发生器是完全独立的,均可以实现4输入变量的任意组合逻辑函数。逻辑函数发生器H有3个输入信号;前两个是函数发生器的输出G’和F’,而另一个输入信号是来自信号变换电路的输出H1。这个函数发生器能实现3输入变量的各种组合函数。这3个函数发生器结合起来,可实现多达9变量的逻辑函数。
基于FPGA多功能数字钟设计
《电子实习2》基于FPGA多功能数字钟设计姓名:…学号:….班级:….指导教师:….提交日期:2012 年 3 月EDA技术在电子系统设计领域越来越普及,本设计主要利用VHDL和C语言在FPGA实验板上设计一个电子数字钟,总的程序由几个各具不同功能的单元模块程序拼接而成,其中包括分频程序模块、时分秒计数模块、处理器及外设模块,并且使用QuartusII运用VHDL语言对分频和计数两个模块进行硬件电路设计和电路波形仿真,该设计采用自顶向下、在QuarnlsⅡ开发平台下实现数字钟的设计、下载和调试。
本设计采用的VHDL是一种全方位的硬件描述语言,具有极强的描述能力,能支持系统行为级、寄存器传输级和逻辑门级这三个不同层次的设计;支持结构、数据流、行为三种描述形式的混合描述,覆盖面广,抽象能力强,因此在实际应用中越来越广泛。
ASIC是专用的系统集成电路,是一种带有逻辑处理的加速处理器;而FPGA是特殊的ASIC芯片,与其它的ASIC芯片相比,它具有设计开发周期短、设计制造成本低、开发工具先进、标准产品无需测试、质量稳定以及可实时在线检测等优点。
在控制系统中,键盘是常用的输入设备,系统应当根据键盘的输入来完成相应的功能。
因此,按键信息输入是与软件结构密切相关的过程。
根据键盘结构的不同,采用不同的编码方法,但无论有无编码以及采用什么样的编码,最后都要转换成为相应的键值,以实现按键功能程序的转移。
[1]钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。
诸如定时自动报警、定时启闭电路、定时开关烘箱、通断动力设备,甚至各种定时电气的自动启用等,所有这些都是以钟表数字化为基础的。
因此研究数字钟以及扩大其应用有着非常现实的意义。
1 前言 (1)2 总体方案设计 (X)2.1 项目设计要点……………………………………………………2.2 方案论述……………………………………………………………2.3 软件介绍……………………………………………………………2.4 芯片介绍……………………………………………………………3 单元电路设计…………………………………………………………3.1 分频模块设计………………………………………………………3.2 计时功能模块设计…………………………………………………4 系统功能及功能仿真…………………………………………………4.1 系统功能……………………………………………………………4.2功能仿真……………………………………………………………各个模块的仿真波形5 设计总结……………………………………………………………6 参考文献……………………………………………………………附录:完整实验程序1.前言现代社会的标志之一就是信息产品的广泛使用,而且是产品的性能越来越强,复杂程度越来越高,更新步伐越来越快。
基于FPGA的数字电子钟的设计与实现
基于FPGA的数字电⼦钟的设计与实现背景:本实验所有结果基于Quartus II 13.1 (64-bit)实现,实验过程采⽤⾃下⽽上⽬录⼀、基本功能设计与思路基本功能:能实现秒、分钟、⼩时的计数,计数结果清晰稳定的显⽰在 6 位数码管上。
1、动态显⽰模块该模块主要功能是通过数码管的动态扫描实现 6 位数码管显⽰计数结果,本模块由扫描模块scan_cnt6,位选控制模块 dig_select,数据选择控制模块 seg_select 以及译码模块 decoder 构成扫描模块 scan_cnt6模块功能:产⽣ 位选控制端dig_select 和数据选择端 code_select 模块所需要的地址信息,扫描时钟决定位选信号和数据切换的速度。
设计思路:利⽤74390芯⽚(P160 TTL 双⼗进制异步计数器)构建⼀个模六计数器,就是6进制计数器,利⽤计数到6(110)时,“q2”和“q1”为⾼电平,产⽣ ⼀个复位信号,加到74390的⾼电平有效的异步清0端“1CLR”上,使计数器回0,从⽽实现模六计数。
设计结果:cnt6模块设计图波形仿真:(默认为时序仿真)cnt6模块波形仿真图位选模块 dig_select模块功能:在地址端的控制下,产⽣位选信号。
设计思路:利⽤74138芯⽚(3线-8线译码器),当选通端输⼊端G1为⾼电平,选通端输⼊端G2AN和G2BN为低电平时,将扫描信号cnt6的输出作为输⼊信号,dig[5..0]是译码输出,输出低电平有效。
设计结果:dig_select模块设计图波形仿真:dig_select模块波形仿真图数据选择模块 seg_select模块功能:输⼊ 6 组数据,每组数据 4bit,本模块完成在地址端的控制下从6 组数据当中选择 1 组输出。
设计思路:利⽤74151芯⽚(P91 8选1数据选择器),在控制输⼊端GN为低电平时,将扫描信号的选择下,分别选中D[5..0]对应的输⼊信号输出为Y。
基于FPGA的多功能数字钟设计实现
电子技术课程设计设计报告题目:基于FPGA的多功能数字钟设计实现班级:姓名:学号:指导教师:上交日期:2017.5.21摘要本设计为基于FPGA的多功能数字钟设计实现,具有计时、校对、闹钟、报整点等基础功能,以及日期、秒表、电子琴、延时闹钟、音乐闹钟等拓展功能。
本设计采用EDA技术,以硬件描述语言Verilog HDL为系统逻辑描述语言设计文件,在QUARTUSII工具软件环境下,采用自顶向下的设计方法,由各个基本模块共同构建了一个基于FPGA的数字钟。
系统采用Alera DE0开发板,并外接了蜂鸣器电路。
系统由分频模块、计时模块、闹钟模块、控制模块、显示模块、秒表模块、音乐模块、日期模块、电子琴模块组成。
经编译和仿真所设计的程序,在可编程逻辑器件上下载验证,本系统能够完成需求功能。
关键词:数字时钟,硬件描述语言,Verilog HDL,FPGA目录摘要 (2)目录 (3)1 绪论 (5)1.1背景 (5)1.2项目创意 (7)2需求分析 (8)2.1任务目标 (8)2.2元件清单 (8)2.3小组分工 (9)3系统设计 (9)3.1 系统主板电路分析 (9)3.2模块化设计方案 (16)4 模块电路设计 (17)4.1顶层模块 (17)4.2分频模块 (19)4.2.1 分频模块设计 (19)4.2.2 分频模块仿真 (21)4.3 计时模块 (21)4.3.1 计时模块设计 (21)4.3.2 计时模块仿真 (23)4.4 控制模块 (24)4.4.1 控制模块设计 (24)4.4.2 控制模块仿真 (24)4.5 秒表模块 (24)4.5.1 秒表模块设计 (24)4.6 日期模块 (26)4.6.1 日期模块设计 (26)4.7 电子琴模块 (28)4.7.1 电子琴模块设计 (28)5 系统调试及结果分析 (30)5.1 硬件检查 (30)5.2 软件编译 (30)5.3 调试过程及结果 (31)5.4 调试注意事项 (32)6 总结 (33)6.1课设中出现的问题与解决方案 (33)6.2心得体会 (33)1 绪论1.1 背景现代的社会是一个信息产品广泛使用,产品的性能越来越强大,做工越来越精细,工艺越来越高,更新换代越来越迅速的社会。
fpga数字钟课程设计报告
课程设计报告设计题目:基于FPGA的数字钟设计班级:电子信息工程1301姓名:王一丁指导教师:李世平设计时间:2016年1月摘要EDA(ElectronicDesignAutomation)电子设计自动化,是以大规模可编程器件为设计载体,以硬件描述语言为系统逻辑描述的主要表达方式,通过相关的软件,自动完成软件方式设计得电子系统到硬件系统,最终形成集成电子系统或专用集成芯片。
本次课程设计利用QuartusII为设计软件,VHDL为硬件描述语言,结合所学知识设计一个多功能时钟,具有显示年、月、日、时、分、秒显示,计时,整点报时,设定时间等功能。
利用硬件描述语言VHDL对设计系统的各个子模块进行逻辑描述,采用模块化的思想完成顶层模块的设计,通过软件编译、逻辑化简、逻辑综合优化、逻辑仿真、最终完成本次课程设计的任务。
关键词:EDAVHDL语言数字钟目录摘要1课程设计目的2课程设计内容及要求设计任务设计要求3VHDL程序设计方案论证系统结构框图设计思路与方法状态控制模块时分秒模块年月日模块显示模块扬声器与闹钟模块整体电路4系统仿真与分析5课程设计总结,包括.收获、体会和建议6参考文献1课程设计目的(1)通过设计数字钟熟练掌握EDA软件(QUARTUSII)的使用方法,熟练进行设计、编译,为以后实际工程问题打下设计基础。
(2)熟悉VHDL硬件描述语言,提升分析、寻找和排除电子设计中常见故障的能力。
(3)通过课程设计,锻炼书写有理论根据的、实事求是的、文理通顺的课程设计报告。
2课程设计内容及要求设计任务(1)6个数字显示器显示时分秒,setpin按键产生一个脉冲,显示切换为年月日。
(2)第二个脉冲可预置年份,第三个脉冲可以预置月份,依次第四、五、六、七个脉冲到来时分别可以预置时期、时、分、秒,第八个脉冲到来后预置结束正常从左显示时分秒。
(3)up为高时,upclk有脉冲到达时,预置位加一,否则减一。
设计要求(1)在基本功能的基础上,闹钟在整点进行报时,产生一定时长的高电平。
基于FPGA多功能数字钟的设计
实验名称:基于FPGA的数字时钟设计一、实验目的:通过实验熟练运用Verilog HDL语言和 FPGA开发软件,使用BASYS2开发板设计一个可调式并且较复杂的数字时钟。
二、实验硬件要求:计算机、BASYS2开发板、蜂鸣器三、实验内容:1、电路功能:在ISE Design Suite 14.7软件开发环境下,使用Verilog描述语言、结合FPGA开发板编译和仿真数字时钟;要求时钟能进行基本的计时功能,按照:“时:分”来显示时间,秒的功能由流水灯表示;能引入秒脉冲进行校时、校分,并可用rst信号给清零;具有整点报时功能,当计时到整点的时候蜂鸣器开始鸣响,响声为乐曲“铃儿响叮当”。
2、电路图:3、Veilog 程序:1)分频模块div_clk:module divclk(sys_clk,rst,sec_clk);input sys_clk,rst;//系统时钟,复位output reg sec_clk;//秒时钟输出reg[27:0] cnt;//分频计数器,在人眼可识别范围之内always @(negedge sys_clk)beginif(rst)//对计数器进行复位begincnt <= 28'h0000000;sec_clk <= 1'b0;endelseif(cnt >= 28'h17d783f)begincnt <= 28'h0000000;sec_clk <= ~sec_clk;endelse cnt <= cnt+1'b1;endendmodule2)时钟计时模块clockmoduleclock(clk,rst,key,hor_h,hor_l,min_h,min_l,sec_h,sec_l,speak,sys_clk); input clk,rst,sys_clk;input [3:0]key;output [3:0]hor_h,hor_l,min_h,min_l,sec_h,sec_l;output speak;reg [3:0]hor_h,hor_l,min_h,min_l,sec_h,sec_l;reg speak;always@(posedge clk or posedge rst)beginif(rst)beginsec_h <=4'h0;sec_l <=4'h0;min_h <=4'h0;min_l <=4'h0;hor_h <=4'h0;hor_l <=4'h0;endelsecase(key)4'b1000:beginif(hor_h >= 4'h2)hor_h <= 4'h0;elsehor_h <= hor_h + 1'b1;end4'b0100:beginif(hor_l >= 4'h9||(hor_h >= 4'h2 && hor_l >= 4'h3)) hor_l <= 4'h0;elsehor_l <= hor_l + 1'b1;end4'b0010:beginif(min_h >= 4'h5)min_h <= 4'h0;elsemin_h <= min_h + 1'b1;end4'b0001:beginif(min_l >= 4'h9)min_l <= 4'h0;elsemin_l <= min_l + 1'b1;enddefault :beginif(sec_l >= 4'h9)beginsec_l <= 4'h0;if(sec_h >= 4'h5)beginsec_h <= 4'h0;if(min_l >= 4'h9)beginmin_l <= 4'h0;if(min_h >= 4'h5)beginmin_h <= 4'h0;if(hor_l >= 4'h9||(hor_h >= 4'h2 && hor_l >= 4'h3))beginhor_l <= 4'h0;if(hor_h >= 4'h2)hor_h <= 4'h0;elsehor_h <= hor_h + 1'b1;endelsehor_l <= hor_l + 1'b1;endelsemin_h <= min_h + 1'b1;endelsemin_l <= min_l + 1'b1;endelsesec_h <= sec_h + 1'b1;endelsesec_l <= sec_l + 1'b1;endendcaseendalways @(posedge clk)beginif(rst)speak <= 1'b0;else if(min_h == 4'h0 && min_l <=4'h0 && sec_h <= 4'h0)speak <= 1'b1;elsespeak <= 1'b0;endendmodule3)发声模块speaker:module speaker(clk,rst,en,f);input clk,rst,en;output reg f;reg [6:0] tonestep;reg [3:0] tonecode;reg [19:0] divcnt;reg [19:0] cntnum;reg sub_clk;reg[24:0] sub_cnt;always@(posedge clk)beginif(rst) beginsub_cnt <= 0;cntnum <= 0;divcnt <= 0;f <= 0;sub_clk <=0;endelse beginif(sub_cnt >=1500000)beginsub_clk <= ~sub_clk;sub_cnt <=0;endelse sub_cnt <= sub_cnt + 1'b1;if(en == 1'b1)begincase(tonecode)1:cntnum <= 95444;2:cntnum <= 85052;3:cntnum <= 75750;4:cntnum <= 71625;5:cntnum <= 63775;6:cntnum <= 56825;7:cntnum <= 50600;default : cntnum <= 0;endcaseif(cntnum == 0)f <= 1'b0;elseif(divcnt >= cntnum)begindivcnt <= 0;f <= ~f;endelse divcnt <= divcnt + 1'b1;endendendalways@(posedge sub_clk)beginif(rst)begintonestep <= 0;tonecode <= 0;endelseif(tonestep <=80)tonestep <= tonestep + 1'b1;else tonestep <= 0;case(tonestep)7'b0000000:tonecode <= 3;7'b0000001:tonecode <= 3;7'b0000010:tonecode <= 8;7'b0000011:tonecode <= 3;7'b0000100:tonecode <= 3;7'b0000101:tonecode <= 8;7'b0000110:tonecode <= 8;7'b0000111:tonecode <= 3;7'b0001000:tonecode <= 3;7'b0001001:tonecode <= 3;7'b0001010:tonecode <= 3;7'b0001011:tonecode <= 8;7'b0001100:tonecode <= 8;7'b0001101:tonecode <= 3;7'b0001110:tonecode <= 3;7'b0001111:tonecode <= 8;7'b0010000:tonecode <= 3;7'b0010001:tonecode <= 3;7'b0010010:tonecode <= 8;7'b0010011:tonecode <= 8;7'b0010101:tonecode <= 3; 7'b0010110:tonecode <= 3; 7'b0010111:tonecode <= 3; 7'b0011000:tonecode <= 8; 7'b0011001:tonecode <= 8; 7'b0011010:tonecode <= 3; 7'b0011011:tonecode <= 3; 7'b0011100:tonecode <= 8; 7'b0011101:tonecode <= 5; 7'b0011110:tonecode <= 5; 7'b0011111:tonecode <= 8; 7'b0100000:tonecode <= 8; 7'b0100001:tonecode <= 1; 7'b0100010:tonecode <= 1; 7'b0100011:tonecode <= 8; 7'b0100100:tonecode <= 2; 7'b0100101:tonecode <= 2; 7'b0100110:tonecode <= 8; 7'b0100111:tonecode <= 8; 7'b0101000:tonecode <= 3; 7'b0101001:tonecode <= 3; 7'b0101010:tonecode <= 3; 7'b0101011:tonecode <= 3; 7'b0101100:tonecode <= 8; 7'b0101101:tonecode <= 8; 7'b0101110:tonecode <= 4; 7'b0101111:tonecode <= 4; 7'b0110000:tonecode <= 8; 7'b0110001:tonecode <= 4; 7'b0110010:tonecode <= 4;7'b0110100:tonecode <= 8; 7'b0110101:tonecode <= 4; 7'b0110110:tonecode <= 4; 7'b0110111:tonecode <= 4; 7'b0111000:tonecode <= 8; 7'b0111001:tonecode <= 4; 7'b0111010:tonecode <= 8; 7'b0111011:tonecode <= 8; 7'b0111100:tonecode <= 4; 7'b0111101:tonecode <= 4; 7'b0111110:tonecode <= 8; 7'b0111111:tonecode <= 3; 7'b1000000:tonecode <= 3; 7'b1000001:tonecode <= 8; 7'b1000010:tonecode <= 8; 7'b1000011:tonecode <= 3; 7'b1000100:tonecode <= 3; 7'b1000101:tonecode <= 3; 7'b1000110:tonecode <= 8; 7'b1000111:tonecode <= 3; 7'b1001000:tonecode <= 8; 7'b1001001:tonecode <= 3; 7'b1001010:tonecode <= 8; 7'b1001011:tonecode <= 5; 7'b1001100:tonecode <= 5; 7'b1001101:tonecode <= 8; 7'b1001110:tonecode <= 5; 7'b1001111:tonecode <= 5; 7'b1010000:tonecode <= 8; 7'b1000001:tonecode <= 8;7'b1000010:tonecode <= 4;7'b1000011:tonecode <= 4;7'b1000100:tonecode <= 8;7'b1000101:tonecode <= 2;7'b1000110:tonecode <= 2;7'b1000111:tonecode <= 8;7'b1001000:tonecode <= 8;7'b1001001:tonecode <= 1;7'b1001010:tonecode <= 1;7'b1001011:tonecode <= 1;7'b1001100:tonecode <= 1;7'b1001101:tonecode <= 8;7'b1001110:tonecode <= 8;7'b1001111:tonecode <= 5;7'b1010000:tonecode <= 5;7'b1010001:tonecode <= 8;7'b1010010:tonecode <= 3;7'b1010011:tonecode <= 3;7'b1010100:tonecode <= 8;7'b1010101:tonecode <= 8;7'b1010110:tonecode <= 2;7'b1010111:tonecode <= 2;7'b1011000:tonecode <= 8;7'b1011001:tonecode <= 1;7'b1011010:tonecode <= 1;7'b1011011:tonecode <= 8;7'b1011100:tonecode <= 8;endcaseendendmodule4)数码管显示模块seg:module seg(q,ctr,h_h,h_l,m_h,m_l,clk,rst);output[6:0]q;output[3:0] ctr;input[3:0] h_h,h_l,m_h,m_l;input clk,rst;reg[6:0] q;reg[25:0] count;reg[3:0] temp;reg[3:0] scan;always @ (posedge clk)beginif (rst)begincount = 0;endelsebegincount = count +1;endendalways @ (posedge clk ) //Seg Scanbeginif(rst)beginscan<=4'b0000;endelsecase(count[11:10]) // 执行设计时将扫描频率改回 2'b00: scan<=4'b0111;2'b01: scan<=4'b1011;2'b10: scan<=4'b1101;2'b11: scan<=4'b1110;endcaseendassign ctr = scan;always @ (posedge clk) //Seg Scanbeginif(rst)begintemp<=4'b0000;endelsecase(count[11:10]) // 执行设计时将扫描频率改回 2'b00: temp<=h_h;2'b01: temp<=h_l;2'b10: temp<=m_h;2'b11: temp<=m_l;endcaseendalways @(posedge clk) //数码管译码beginif(rst)beginq<=7'b0000000;endelsecase(temp)4'd0:q<=7'b0000001; //04'd1:q<=7'b1001111; //14'd2:q<=7'b0010010; //24'd3:q<=7'b0000110; //34'd4:q<=7'b1001100; //44'd5:q<=7'b0100100; //54'd6:q<=7'b0100000; //64'd7:q<=7'b0001111; //74'd8:q<=7'b0000000; //84'd9:q<=7'b0000100; //9default:q<=7'b0000001;endcaseendendmodule5)秒计时流水灯模块sec_ledmodule sec_led(input sys_clk,input rst,output [7:0] led);reg[24:0] cnt;reg[7:0] led_reg;always@(posedge sys_clk)beginif(rst)cnt <= 0;else cnt <= cnt+1;endalways@(posedge sys_clk)beginif(rst)led_reg <= 8'b0000_0001;else if (cnt == 25'd4*******)beginled_reg <= led_reg << 1;if(led_reg==8'b1000_0000)led_reg<=8'b0000_0001;endassign led=led_reg;Endmodule6键盘修改模块:module keyboard(input sys_clk,// input rst_n,input ps2_clk,input ps2_data,output reg[3:0] key_val);wire [15:0]xkey;reg ps2cf,ps2df;reg clk25=0;reg [7:0]ps2c_filter,ps2d_filter;reg [10:0]shift1,shift2;assign xkey={shift2[8:1],shift1[8:1]};assign rst_n=1;always@(posedge sys_clk)clk25=~clk25;always@(posedge clk25 or negedge rst_n) beginif(!rst_n)beginps2c_filter<=0;ps2d_filter<=0;ps2cf<=1;ps2df<=1;endelsebeginps2c_filter[7]<=ps2_clk;ps2c_filter[6:0]<=ps2c_filter[7:1];ps2d_filter[7]<=ps2_data;ps2d_filter[6:0]<=ps2c_filter[7:1];if(ps2c_filter==8'b1111_1111)ps2cf<=1;elseif(ps2c_filter==8'b0000_0000)ps2cf<=0;if(ps2d_filter==8'b1111_1111)ps2df<=1;elseif(ps2d_filter==8'b0000_0000)ps2df<=0;endendalways@(negedge ps2cf or negedge rst_n)beginif(!rst_n)beginshift1<=0;shift2<=1;endelsebeginshift1<={ps2df,shift1[10:1]};shift2<={shift1[0],shift2[10:1]};endendparameterone = 16'b0001_0110_0001_0110,//{16,16},two = 16'b0001_1110_0001_1110,//{1e,1e},three = 16'b0010_0110_0010_0110,//{26,26},four = 16'b0010_0101_0010_0101,//{25,25},onen = 16'b1111_0000_0001_0110,//{F0,16},twon = 16'b1111_0000_0001_1110,//{F0,1E},threen = 16'b1111_0000_0010_0110,//{F0,26},fourn = 16'b1111_0000_0010_0101;//{F0,25};always@(xkey)case(xkey)one:key_val<=4'b1000;two:key_val<=4'b0100;three:key_val<=4'b0010;four:key_val<=4'b0001;onen:key_val<=4'b0000;twon:key_val<=4'b0000;threen:key_val<=4'b0000;fourn:key_val<=4'b0000;default:key_val<=4'b0000;endcaseendmodulemodule keyboard(input sys_clk,// input rst_n,input ps2_clk,input ps2_data,output reg[3:0] key_val);wire [15:0]xkey;reg ps2cf,ps2df;reg clk25=0;reg [7:0]ps2c_filter,ps2d_filter;reg [10:0]shift1,shift2;assign xkey={shift2[8:1],shift1[8:1]};assign rst_n=1;always@(posedge sys_clk)clk25=~clk25;always@(posedge clk25 or negedge rst_n)beginif(!rst_n)beginps2c_filter<=0;ps2d_filter<=0;ps2cf<=1;ps2df<=1;endelsebeginps2c_filter[7]<=ps2_clk;ps2c_filter[6:0]<=ps2c_filter[7:1];ps2d_filter[7]<=ps2_data;ps2d_filter[6:0]<=ps2c_filter[7:1];if(ps2c_filter==8'b1111_1111)ps2cf<=1;elseif(ps2c_filter==8'b0000_0000)ps2cf<=0;if(ps2d_filter==8'b1111_1111)ps2df<=1;elseif(ps2d_filter==8'b0000_0000)ps2df<=0;endendalways@(negedge ps2cf or negedge rst_n)beginif(!rst_n)beginshift1<=0;shift2<=1;endelsebeginshift1<={ps2df,shift1[10:1]};shift2<={shift1[0],shift2[10:1]};endendparameterone = 16'b0001_0110_0001_0110,//{16,16},two = 16'b0001_1110_0001_1110,//{1e,1e},three = 16'b0010_0110_0010_0110,//{26,26},four = 16'b0010_0101_0010_0101,//{25,25},onen = 16'b1111_0000_0001_0110,//{F0,16},twon = 16'b1111_0000_0001_1110,//{F0,1E},threen = 16'b1111_0000_0010_0110,//{F0,26},fourn = 16'b1111_0000_0010_0101;//{F0,25};always@(xkey)case(xkey)one:key_val<=4'b1000;two:key_val<=4'b0100;three:key_val<=4'b0010;four:key_val<=4'b0001;onen:key_val<=4'b0000;twon:key_val<=4'b0000;threen:key_val<=4'b0000;fourn:key_val<=4'b0000;default:key_val<=4'b0000;endcaseendmodule4、仿真波形图和波形解释:(1)、仿真波形图:(2)、波形解释:将系统的50Mhz的时钟频率进行分频为1hz的频率。
基于FPGA的多功能数字钟设计
本科生毕业论文(设计)题目: 基于FPGA 的多功能数字钟设计学 院 电子信息工程学院 学科门类 工学装 订 线基于FPGA的多功能数字钟设计摘要当前基于各种数字器件的数字钟种类繁多,对于不同的数字器件的设计方式有所不同,例如基于单片机的数字钟设计和基于CPLD的数字钟设计以及基于FPGA的数字钟设计等等。
可以根据不同的设计要求如响应灵敏度等选择不同的数字器件进行合理设计。
本文介绍基于FPGA的多功能数字钟设计,FPGA具有硬件实现数据处理具有实时性高,可靠稳定的优点。
在硬件方面主要由控制开关、消抖电路、APEX 20KE FPGA 和LED显示等几部分组成。
在编程方面采用VerilogHDL语言实现编程,仿真环境采用MAX+PLUSⅡ软件,以实现数字计时,闹铃和定点报时等功能设计。
该系统具有体积小、功耗低、价格便宜、安全可靠,维护和升级方便的优点,具有较好的应用前景。
关键词:数字钟 FPGA VerilogHDL MAX+PLUSⅡThe Digital(多功能)Clock Based on FPGAABSTRACTThere are many of logic devices which are based on the digital clock at present.The methods are different For a different logic device design. For example, The digital clock based on SCN(Switched Circuit Network), The digital clock based on CPLD(Complex Programable Logic Device)and The digital clock based onFPGA (Field Programmable Gate Array),and so on.We can choosing a different logic devices reasonable to design based on different design requirements such as sensitivity. This article introduces the digital clock based on FPGA. FPGA with data-processing hardwareWith real-time high, the advantages of reliable stability. In terms of hardware from the main control switches, circuit Consumers buffeting, APEX 20KE FPGA and the LED display,We using Programming VerilogHDL hardware On the hardware side programming,and they can digital hardware logic on time, alarm and fixed-point design features such as timekeepingKey words:The Digital Clock Field Programmable Gate Array VerilogHDL MAX+PLUSⅡ目录一概述 (1)1.1 课题的来源、意义 (1)1.2 课题的研究目标、内容及方法手段 (1)1.2.1 课题的研究目标、内容 (1)1.2.2课题的研究方法及手段 (1)二数字钟的原理及软硬件的选择 (3)2.1系统原理 (3)2.2数字钟硬件的选择和设计 (4)2.2.1消抖电路的设计 (5)2.2.2 FPGA的选择 (5)2.2.3 LED显示模块的设计 (6)2.2.4数字钟编译仿真软件的选择 (6)2.2.5数字钟编程语言的选择 (7)三程序设计部分 (8)3.1编译仿真波形及分析 (8)3.1.1主控模块 (8)3.1.2时间模块 (8)3.1.3时间数据与时间设置 (10)3.1.4时间及其设置模块 (11)3.1.5显示模块 (12)3.1.6秒表模块 (13)3.1.7日期自动工作模块 (14)3.1.8日期设置模块 (15)3.1.9日期设置与自动工作模块 (16)3.1.10闹钟模块 (17)3.1.11分频模块 (18)3.1.12多功能数字钟电路图 (19)四验证 (21)五结论 (22)谢辞 (23)参考文献 (24)附录 (25)一概述1.1课题的来源、意义20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。
基于FPGA:电子钟的设计报告
电子钟的设计报告姓名:< >组别:< >专业班级:< >目录目录 (1)一、数字钟的设计要求 (2)二、顶层设计 (2)三、模块 (3)1.顶层模块 (3)2.分频器模块 (4)3.按键消抖模块 (4)4.计时模块 (5)5.显示模块 (6)6.报时和闹钟模块 (6)四、系统调试及运行结果分析 (7)1、硬件调试 (7)2、软件调试 (8)3、调试过程及结果 (8)(1)显示模块调试 (8)(2)时间系统模块调试 (9)五、总结 (9)一、数字钟的设计要求设计一个具有时、分、秒计时第二电子钟电路,按24小时制记时。
要求:1、准确计时,以数字形式显示时、分、秒的时间;2、具有分、时校正功能,校正输入脉冲频率为1Hz;3、具有仿广播电台整点报时的功能,即每逢59分51秒、53秒、55秒及57秒时,发出4声500Hz低音,在59分59秒时发出一声1kHz高音,它们的持续时间均为1秒。
最后一声高音结束的时刻恰好为正点时刻。
4、具有定时闹钟功能,且最长闹铃时间为一分钟。
要求可以任意设置闹钟的时、分;闹铃信号为500Hz和1kHz的方波信号,两种频率的信号交替输出,且均持续1S。
设置一个停止闹铃控制键,可以停止输出闹铃信号。
二、顶层设计采用自顶向下的设计方法,首先根据数字时钟的功能要求进行顶层设计和分析,用FPGA实现系统的计时、显示驱动、按键输入处理、仿广播电台整点报时的功能。
根据实训平台的硬件资源情况,输入信号包括时钟输入和按键输入,其中系统时钟由实训平台核心板50MHz晶振提供,拨码开关作为校时、闹钟时间设置和复位的信号输入,输出信号包括峰鸣器控制输出、8位动态数码管位选和段选控制输出。
数字电字时钟系统主要有分频器模块、按键消抖模块、计时模块、整点报时和闹铃模块和显示驱动模块构成。
三、模块1.顶层模块如下图所示。
2.分频器模块分频器模块的主要功能是为其他模块提供时钟信号。
基于FPGA的数字钟设计
电子课程设计实验报告本报告共有两个项目——数字钟和音乐计算器,每个项目由三部分组成,第一部分为工程顶层图,第二部分为模块划分及功能,第三部分为实验中遇到的问题及解决方法,最后是对课程的一点建议。
项目一:数字钟一.顶层图二.模块划分及功能数字钟主要有分频,输入,计时,闹钟,数据选择,音乐,显示七大模块,其中各模块的功能介绍如下:1.分频模块(fenpin):功能是产生用于计时,扫描输入,扫描显示,以及播放音乐所需的各个频率的信号。
2.输入模块(input):功能是识别键盘的输入,具体来说,主要是判断是否有键按下,并且确定按下的是哪个键,并给出相应的操作信号。
3.计时模块(minute,hour):分为分计时(minute)和小时计时(hour)两个小模块,分别完成分位与小时为的计时与时间设置功能,正常计时是每次清零后从00:00开始计时,若预置时间,则从预置数开始计。
4.闹钟模块(alart):功能是设置闹钟和整点报时,当切换至闹钟设置时,可以输入时间,并将其记录下来,当时钟时间与闹钟预设时间相同时,给出一个脉冲信号,另一功能是当时钟为整点时给出一个脉冲信号。
5.数据选择(sel):功能是设置时间时将键盘输入的数据传给计时和显示模块,当设置闹钟时将键盘输入的数据传给闹钟和显示模块。
6.音乐(music):功能是当闹钟部分给出给出响铃信号(闹钟和整点)时响起两端不同的音乐。
7.扫描显示(display):功能是在数码管上分别显示时间的四位数值,并且当时间设置至某一位时点亮相应的小数点。
三.问题及解决方法1.语法错误因为第一个项目是数字钟,刚接触时对VHDL语言还不是非常熟悉,因此常常会犯忘掉分号或是END IF 之类的错误,这类问题根据编译时的提示都能解决。
2.键盘的稳定性问题最初设计的键盘扫描方式是一直扫描,当有按键按下时也不断给出该键的位置并执行相应的操作,但是在上板后发现键盘不稳定,具体表现是当按下某个键时两次扫描给出的位置可能有偏差,例如按着2键,可能在中间某一次会显示成3,最后解决的方法是当检测到如果有按键按下时边将扫描列的高电平锁定在该列,例如检测到有按键1时,便将列输出锁定为“1000”,直到按键松开时再从下一列重新开始扫描,这样键盘就稳定了很多。
基于FPGA的多功能电子时钟设计报告书
基于FPGA的多功能时钟的设计毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。
尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。
对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。
作者签名:日期:指导教师签名:日期:使用授权说明本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。
作者签名:日期:第一章绪论现代社会的标志之一就是信息产品的广泛使用,而且是产品的性能越来越强,复杂程度越来越高,更新步伐越来越快。
支撑信息电子产品高速发展的基础就是微电子制造工艺水平的提高和电子产品设计开发技术的发展。
前者以微细加工技术为代表,而后者的代表就是电子设计自动化(electronic design automatic, EDA)技术。
本设计采用的VHDL是一种全方位的硬件描述语言,具有极强的描述能力,能支持系统行为级、寄存器传输级和逻辑门级这三个不同层次的设计;支持结构、数据流、行为三种描述形式的混合描述,覆盖面广,抽象能力强,因此在实际应用中越来越广泛。
ASIC是专用的系统集成电路,是一种带有逻辑处理的加速处理器;而FPGA是特殊的ASIC芯片,与其它的ASIC芯片相比,它具有设计开发周期短、设计制造成本低、开发工具先进、标准产品无需测试、质量稳定以及可实时在线检测等优点。
在控制系统中,键盘是常用的人机交换接口,当所设置的功能键或数字键按下的时候,系统应该完成该键所对应的功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
***大学电工电子实验报告EDA技术基础设计报告多功能数字钟设计电子信息科学与技术年 月 日多功能数字钟设计一.任务解析用Verilog硬件描述语言设计数字钟,实现:1、具有时、分、秒计数显示功能,以二十四小时循环计时。
2、具有调节小时,分钟的功能。
3、具有整点报时同时LED灯花样显示的功能。
4、【发挥】三键(模式选择,加,减)调整,数码管闪烁指示功能。
5、【发挥】增加闹钟任意设定功能,时间精确到分。
二.方案论证第2页,共19页三.重难点解析1、模式选择键的设计//模式选择键。
有5个模式,m0为正常走钟;m1为调分;m2为调时;m3为闹钟调分;m4为闹钟调时。
module mode_key(key,clr,m);input key,clr;output [2:0]m;reg [2:0]m;always @(posedge key or negedge clr) beginif(!clr) m=0;else if(m==4) m=0;else m=m+1;endendmodule2、数字钟秒钟计数设计module cnt60_sec(clk,clr,q,c);input clk,clr;output [6:0]q;output c;reg [6:0]q;reg c;always @(posedge clk or negedge clr) beginif(!clr) begin q=0;c=0;endelse if(q[3:0]==9) begin q[3:0]=0;if(q[6:4]==5) begin q[6:4]=0; c=1;endelse q[6:4]=q[6:4]+1;end第3页,共19页else begin q[3:0]=q[3:0]+1;q[6:4]=q[6:4];c=0;endendendmodule、秒钟计数模块就是一个60的计数器,计数到59的时候清零,进位加1。
调时不需要控制秒钟,所以没有加模式选择按键。
波形仿真如下:3、数字钟分钟计数设计module cnt60_min(clk,clr,c,up,down,m,q);input clk,clr,up,down;input [2:0]m;output [6:0]q;output c;reg [6:0]q;reg c;wire clka,clkb,clkc,clkd,nclk;assign clka = clk||up||down;LCELL AA(clka,clkb);//信号延迟LCELL BB(clkb,clkc);//信号延迟LCELL CC(clkc,clkd);//信号延迟LCELL DD(clkd,nclk);//信号延迟always @(posedge nclk or negedge clr) begin第4页,共19页if(!clr) begin q=0;c=0;endelse beginif((clk&&(m==0))||(up&&(m==1))) beginif(q[3:0]==9) begin q[3:0]=0;if(q[6:4]==5) begin q[6:4]=0; c=1;endelse q[6:4]=q[6:4]+1;endelse begin q[3:0]=q[3:0]+1;q[6:4]=q[6:4];c=0;end endif(down&&(m==1)) beginif(q[3:0]==0) beginif(q[6:4]==0) begin q[6:4]=5;q[3:0]=9;endelse begin q[6:4]=q[6:4]-1; q[3:0]=9;end endelse q[3:0]=q[3:0]-1;endendendendmodule分钟计数模块也是一个60的计数器,计数到59的时候清零,进位加1。
因为要计时要控制分钟位,模块加上了模式选择按键,普通计数和加键减键按下UP加1,按下DOWN 减1都可以改变分钟的数,所以条件语句中加上了模式选择功能。
波形仿真如下:第5页,共19页4、数字钟小时计数设计module cnt24_hour(clk,clr,up,down,m,q);input clk,clr,up,down;input [2:0]m;output [5:0]q;reg [5:0]q;wire clka,clkb,clkc,clkd,nclk;assign clka=clk||up||down;LCELL AA(clka,clkb);//信号延迟LCELL BB(clkb,clkc);//信号延迟LCELL CC(clkc,clkd);//信号延迟LCELL DD(clkd,nclk);//信号延迟always @(posedge nclk or negedge clr) beginif(!clr) q=0;else beginif((clk&&(m==0))||(up&&(m==2))) beginif(q[5:4]<2) beginif(q[3:0]<9) q[3:0]=q[3:0]+1;else begin q[3:0]=0;q[5:4]=q[5:4]+1;endendelse beginif(q[3:0]<3) q[3:0]=q[3:0]+1;else q=0;end第6页,共19页endif(down&&(m==2)) beginif(q[3:0]==0) beginif(q[5:4]==0) begin q[5:4]=2; q[3:0]=3; endelse begin q[5:4]=q[5:4]-1; q[3:0]=9; endendelse begin q[5:4]=q[5:4]; q[3:0]=q[3:0]-1; endendendendendmodule小时计数模块相当于是一个24的计数器,计数到23的时候清零,进位加1。
因为要计时要控制小时位,模块加上了模式选择按键,普通计数和加键减键按下UP加1,按下DOWN减1都可以改变小时的数,所以条件语句中加上了模式选择功能。
波形仿真如下:5、数字钟闹钟调分设计module nz_Tfen(up,down,m,q);input up,down;input [2:0]m;output [6:0]q;第7页,共19页reg [6:0]q;wire clka,clkb,clkc,clkd,nclk;assign clka = up||down;LCELL AA(clka,clkb);//信号延迟LCELL BB(clkb,clkc);//信号延迟LCELL CC(clkc,clkd);//信号延迟LCELL DD(clkd,nclk);//信号延迟always @(posedge nclk ) beginif(up&&(m==3)) beginif(q[3:0]==9) begin q[3:0]=0;if(q[6:4]==5) q[6:4]=0;else q[6:4]=q[6:4]+1;endelse begin q[3:0]=q[3:0]+1;q[6:4]=q[6:4];endendif(down&&(m==3)) beginif(q[3:0]==0) beginif(q[6:4]==0) begin q[6:4]=5;q[3:0]=9; endelse begin q[6:4]=q[6:4]-1; q[3:0]=9; endendelse q[3:0]=q[3:0]-1;endendendmodule第8页,共19页关于闹钟调分设计,就是在选择模式3的的情况下,按下UP加1,按下DOWN减1。
6、数字钟闹钟调时设计module nz_Tshi(up,down,m,q);input up,down;input [2:0]m;output [5:0]q;reg [5:0]q;wire clka,clkb,clkc,clkd,nclk;assign clka=up||down;LCELL AA(clka,clkb);//信号延迟LCELL BB(clkb,clkc);//信号延迟LCELL CC(clkc,clkd);//信号延迟LCELL DD(clkd,nclk);//信号延迟always @(posedge nclk ) beginif(up&&(m==4)) beginif(q[5:4]<2) beginif(q[3:0]<9) q[3:0]=q[3:0]+1;else begin q[3:0]=0;q[5:4]=q[5:4]+1;endendelse beginif(q[3:0]<3) q[3:0]=q[3:0]+1;else q=0;end第9页,共19页endif(down&&(m==4)) beginif(q[3:0]==0) beginif(q[5:4]==0) begin q[5:4]=2; q[3:0]=3;endelse begin q[5:4]=q[5:4]-1; q[3:0]=9;end endelse begin q[5:4]=q[5:4]; q[3:0]=q[3:0]-1; endendendendmodule关于闹钟调时设计,就是在选择模式4的的情况下,按下UP加1,按下DOWN减1。
7、蜂鸣器buzzer的设计module buzzer(qf,qs,qff,qss,keynz,out);input [6:0]qf;input [5:0]qs;input [6:0]qff;input [5:0]qss;input keynz;output out;reg out;always @(1) beginif(keynz)if((qff[3:0]==qf[3:0])&&(qff[6:4]==qf[6:4])&&(qss[3:0]==qs[3:0])&& (qss[5:4]==qs[5:4]))out=1;第10页,共19页else out=0;endendmodule蜂鸣器的设计,我做了一个闹钟的开关keynz,如果当闹钟开关keynz为1的时候,闹钟功能打开。
在模式3、4下调整好闹钟时间后,正常走钟的时间与闹钟设定的时间相同的时候,out输出的led灯就点亮。
8、调时间闪烁分频设计module div_clkshan(clk,ck);input clk;output ck;reg [23:0]cnt;reg ck;always @(posedge clk) beginif(cnt<10000000) cnt=cnt+1;else begincnt=0;ck=!ck;endendendmodule调时间时,对应调整的位数开始闪烁。