FPGA数字秒表设计
基于FPGA数字秒表设计(完整资料).doc

此文档下载后即可编辑目录1.秒表设计要求 (1)2.设计思路 (1)2.1功能模块 (1)2.1.1分频器 (1)2.1.2计数器 (1)2.1.3数据锁存器 (2)2.1.4控制器 (2)2.1.5扫描显示的控制电路 (2)2.1.6显示电路 (3)2.1.7按键消抖电路 (3)3.电路实现 (4)4.程序仿真 (13)4.1分频器 (13)4.1.1计数器电路综合 (15)4.1.2计数器电路仿真 (15)4.2同步计数器 (17)4.2.1计数器实现 (17)4.2.2计数器仿真 (20)4.2.3同步计数器电路综合 (22)4.3按键消抖电路 (23)4.3.1按键消抖电路实现 (23)4.3.2按键消抖电路仿真 (24)4.3.3按键消抖电路综合 (26)4.4八段译码器 (27)4.4.1八段译码器实现 (27)4.4.2八段译码器仿真 (28)4.4.3八段译码器电路综合 (28)4.5控制器 (30)4.5.1控制器 (30)4.5.1控制器仿真 (31)4.5.3控制器电路综合 (33)5.2View Technology Schematic : (34)5.3管脚锁定: (35)6.实验结论 (35)1.秒表设计要求(1)秒表的计时范围为00:00:00 ~ 59:59:99。
(2)两个按钮开关Start/Stop和Split/Reset,控制秒表的启动、停止、分段和复位:在秒表已经被复位的情况下,按下“Start/Stop”键,秒表开始计时。
在秒表正常运行的情况下,如果按下“Start/Stop”键,则秒表暂停计时;再次按下该键,秒表继续计时。
在秒表正常运行的情况下,如果按下“Split/Reset”键,显示停止在按键时的时间,但秒表仍然在计时;再次按下该键,秒表恢复正常显示。
在秒表暂停计时的情况下,按下“Split/Reset”键,秒表复位归零。
2.设计思路2.1功能模块2.1.1分频器对晶体振荡器产生的时钟信号进行分频,产生时间基准信号2.1.2计数器对时间基准脉冲进行计数,完成计时功能2.1.3数据锁存器锁存数据使显示保持暂停2.1.4控制器通过产生锁存器的使能信号来控制计数器的运行、停止以及复位设计分析:2.1.5扫描显示的控制电路包括扫描计数器、数据选择器和7段译码器,控制8个数码管以扫描方式显示计时结果,原理图如下:实验电路板上的按键2.1.6显示电路2.1.7按键消抖电路消除按键输入信号抖动的影响,输出单脉冲按键按下时,FPGA 的输入为低电平;松开按键时,FPGA 的输入为高电平但是在按下按键和松开按键的瞬间会出现抖动现象2.2电路框图3.电路实现 ---------------------------------------------------------------------------------- 实验板上的数码管为共阳LED数码管-- Company:-- Engineer:---- Create Date: 09:08:39 03/12/2011-- Design Name:-- Module Name: stopwatch_1 - Behavioral-- Project Name:-- Target Devices:-- Tool versions:-- Description:---- Dependencies:---- Revision:-- Revision 0.01 - File Created-- Additional Comments:------------------------------------------------------------------------------------ library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;---- Uncomment the following library declaration if instantiating ---- any Xilinx primitives in this code.--library UNISIM;--use UNISIM.VComponents.all;entity stopwatch_1 isPort (Clk : in STD_LOGIC;start_stop : in STD_LOGIC;split_reset : in STD_LOGIC;ncs : out STD_LOGIC;s : out STD_LOGIC_VECTOR(2 downto 0);seg : out STD_LOGIC_VECTOR (7 downto 0) );end stopwatch_1;architecture Behavioral of stopwatch_1 issignal k1,k2,k3,k4: STD_LOGIC;signal cnt_1,cnt_2 : STD_LOGIC_VECTOR(1 downto 0);signal start_stop_out,split_reset_out: STD_LOGIC;signal count: STD_LOGIC_VECTOR(15 downto0):=(others=>'0');signal clk_1k: STD_LOGIC;signal z0,z1,z2,z3,z4,z5,z6,q1,q2,q3,q4,q5,q6 :STD_LOGIC_VECTOR(3 downto 0):=(others=>'0');signal count_2: STD_LOGIC_VECTOR(2 downto0 ):=(others=>'0');signal in_7: STD_LOGIC_VECTOR(3 downto 0);signal sreg: STD_LOGIC_VECTOR(2 downto 0):="111";signal snext: STD_LOGIC_VECTOR(2 downto 0);Begin---------------------------------------------------------为三八译码器置入使能信号ncs <= '0';---------------------------------------------------------分频电路process(clk)beginif rising_edge(clk) thenif count = 47999 thencount <=(others=>'0');elsecount <= count+1;end if;end if;end process;clk_1k <= count(15);---------------------------------------------------------同步计数电路process(clk_1k,sreg(2))beginif rising_edge(clk_1k) thenif sreg(2) = '1' thenz0<=(others=>'0');z1<=(others=>'0');z2<=(others=>'0');z3<=(others=>'0');z4<=(others=>'0');z5<=(others=>'0');z6<=(others=>'0');elsif sreg(1) = '1' thenz0 <= z0+1;if z0 = 9 thenz0 <=(others=>'0');z1 <= z1+1;if z1 = 9 thenz1 <=(others=>'0');z2 <= z2+1;if z2 = 9 thenz2 <=(others=>'0');z3 <= z3+1;if z3 = 9 thenz3 <= (others=>'0');z4 <= z4+1;if z4 = 5 thenz4 <= (others=>'0');z5 <= z5+1;if z5 = 9 thenz5 <= (others=>'0');z6 <= z6+1;if z6 = 5 thenz6 <= (others=>'0');end if;end if;end if;end if;end if;end if;end if;end if;end if;end process;---------------------------------------------------------扫描计数器process(clk_1k)beginif rising_edge(clk_1k) thencount_2 <= count_2+1;end if;end process;s <= count_2;---------------------------------------------------------锁存器process(sreg(0),z1,z2,z3,z4,z5,z6)beginif sreg(0) = '1' thenq1 <= z1;q2 <= z2;q3 <= z3;q4 <= z4;q5 <= z5;q6 <= z6;end if;end process;---------------------------------------------------------process(count_2,q1,q2,q3,q4,q5,q6)begincase count_2 iswhen "000" => in_7 <= q1;when "001" => in_7 <= q2;when "011" => in_7 <= q3;when "100" => in_7 <= q4;when "110" => in_7 <= q5;when "111" => in_7 <= q6;when others => in_7 <= "1111";end case;end process;---------------------------------------------------------八段译码器process(in_7)begincase in_7 iswhen "0000" => seg <="00000011";when "0001" => seg <="10011111";when "0010" => seg <="00100101";when "0011" => seg <="00001101";when "0100" => seg <="10011001";when "0101" => seg <="01001001";when "0110" => seg <="01000001";when "0111" => seg <="00011111";when "1000" => seg <="00000001";when "1001" => seg <="00001001";when others => seg <="11111101";end case;end process;---------------------------------------------------------按键去抖电路process(clk_1k,start_stop)beginif clk_1k'event and clk_1k='0' thenif cnt_1 = 3 thenk1 <= '1';elsek1 <= '0';cnt_1 <= cnt_1+1;end if;k2 <= k1;end if;if start_stop = '0' thencnt_1 <= "00";end if;end process;start_stop_out <= not k1 and k2;process(clk_1k,split_reset)beginif clk_1k'event and clk_1k='0' thenif cnt_2 = 3 thenk3 <= '1';elsek3 <= '0';cnt_2 <= cnt_2+1;end if;k4 <= k3;end if;if split_reset = '0' thencnt_2 <= "00";end if;end process;split_reset_out <= not k3 and k4;---------------------------------------------------------控制器process(clk_1k,start_stop_out,split_reset_out)beginif rising_edge(clk_1k) thensreg <= snext;end if;end process;process(start_stop_out,split_reset_out,sreg)begincase sreg iswhen "111" => if start_stop_out = '1' andsplit_reset_out = '0' thensnext <= "011";else snext <= sreg;end if;when "011" => if start_stop_out = '1' andsplit_reset_out = '0' then snext <= "001";elsif start_stop_out = '0' andsplit_reset_out = '1' then snext <= "010";else snext <= sreg;end if;when "001" => if start_stop_out = '0' andsplit_reset_out = '1' then snext <= "111";elsif start_stop_out = '1' andsplit_reset_out = '0' then snext <= "011";else snext <= sreg;end if;when "010" => if start_stop_out = '0' andsplit_reset_out = '1' then snext <= "011";else snext <= sreg;end if;when others => snext <= "111";end case;end process;end Behavioral;注:控制器设计时,巧妙地将状态编码和控制器输出的控制信号编码合二为一,即状态编码也是控制信号编码,使得程序形式上更为简单、清晰。
基于FPGA的数字秒表设计

基于FPGA的数字秒表设计摘要:该设计是用于体育比赛的数字秒表,基于FPGA在Quartus II 9.0sp2软件下应用VHDL语言编写程序,采用ALTRA公司CycloneII系列的EP2C8Q208芯片进行了计算机仿真,并给出了相应的仿真结果。
本设计有效的克服了传统的数字秒表的缺点采用EDA技术采取自上而下的设计思路。
绘制出了具体的逻辑电路,最后又通过硬件上对其进行调试和验证。
该电路能够实现很好的计时功能,计时精度高,最长计时时间可达一个小时。
关键字:数字秒表;EDA;FPGA;VHDL;Quartus IIThe design of digital stop watch based on FPGA Abstract:This design is a digital stop watch which is used for athletic contests and is based on FPGA using VHDL language to write program in Quartus II software,adopting EP2C8Q208 chip of CycloneII series of ALTRA company for computer simulation and at the same time showing the corresponding simulation result. This design effectively overcomes the traditional digital stop watch weaknesses and takes a top-down approach to design. Draw out a particular logic circuits, and finally pass the circuits to the hardware to debug and verify it.This circuit is able to carry out excellent timing function,has high timing precision,and the longest timing time could reach an hour.Key Words: Digital stop watch;EDA;FPGA;VHDL;MAX PlusⅡ引言数字秒表是日常生活中比较常见的电子产品,其设计也是EDA技术中最基本的设计实验之一[1]。
基于FPGA的电子秒表设计

基于FPGA的电⼦秒表设计基于FPGA的电⼦秒表设计摘要简⽽⾔之,电⼦秒表的⼯作原理就是不断输出连续脉冲给加法计数器,⽽加法计数器通过译码器来显⽰它所记忆的脉冲周期个数。
电⼦秒表是⽇常⽣活中⽐较常见的电⼦产品。
本设计秒表的逻辑结构主要由74LS00, 555定时器,RS 触发器,74LS90等器件组成。
使⽤了基本RS触发器作为电⼦秒表的开关,基本RS触发器属低电平直接触发的触发器,有直接置位,复位的功能。
整个秒表需有⼀个清零/ 启动信号和⼀个停⽌/保持信号装置,以便秒表能随意停⽌及启动,计数器的输出全都为BCD码输出,⽅便显⽰译码器连接。
本设计基于简单易⾏的原则,秒表显⽰以0.01s为最⼩单位,设计时,按照设计任务的次序,将各单元电路逐个进⾏接线和调试,即分别测试基本RS触发器、时钟发⽣器及计数器的逻辑功能,待各单元电路⼯作正常后,再将有关电路逐级连接起来进⾏测试……,直到测试电⼦秒表整个电路的功能。
最后进⾏总结.做到经典⽽没有缺憾的设计结果。
关键字:74LS00 555定时器 RS触发器 BCD码⽬录摘要 (1)⼀、引⾔ (3)(⼀)设计的背景 (3)(⼆)设计实现的基本功能 (4)(三)设计的结构安排 (4)⼆、系统硬件设计 (5)(⼀)总体设计 (5)(⼆)555定时器简简介 (9)(三)基本RS触发器 (10)(四)功能测试 (12)三、系统软件设计 (14)(⼀) 设计⽅案 (14)(⼆)分频模块 (14)(三)计数模块 (16)(四)启停控制模块 (17)(五)显⽰控制模块 (18)(六)编译仿真 (19)参考⽂献 (22)致谢 (23)⼀、引⾔(⼀)设计的背景秒表计时器是电器制造,⼯业⾃动化控制、国防、实验室及科研单位理想的计时仪器,他⼴泛应⽤于各种继电器、电磁开关、控制器、延时器、定时器等的时间测试。
有关电⼦秒表的发展历史,⼤致可以分为三个演变阶段。
1、从⼤型钟向⼩型钟演变。
2、从⼩型钟向袋表过度。
FPGA 数字秒表的设计

学院FPGA设计实践报告题目:数字秒表的设计院系:计算机与信息工程学院专业:电子科学与技术年级姓名:学号:指导老师:一、课程设计目的:本课程的授课对象是电子科学与技术专业本科生,是电子类专业的一门重要的实践课程,是理论与实践相结合的重要环节。
本课程有助于培养学生的数字电路设计方法、掌握模块划分、工程设计思想与电路调试能力,为以后从事各种电路设计、制作与调试工作打下坚实的基础。
二、课程设计要求:l. 设计用于体育比赛用的数字秒表, 要求:⑴计时精度应大于l/100S, 计时器能显示1/100S的时间, 提供给计时器内部定时的时钟脉冲频率应大于l00Hz, 这里选用1kHz 。
⑵计时器的最长计时时间为l小时, 为此需要一个6位的显示器, 显示的最长时间为59分59.99秒。
2. 设置有复位和起/停开关⑴复位开关用来使计时器清零, 并作好计时准备。
⑵起/停开关的使用方法与传统的机械式计时器相同, 即按一下起/停开关, 启动计时器开始计时, 再按一下起/停开关计时终止。
⑶复位开关可以在任何情况下使用,即使在计时过程中, 只要按一下复位开关, 计时进程立刻终止, 并对计时器清零。
3. 复位和起/停开关应有内部消抖处理。
4. 采用VHDL语言用层次化设计方法设计符合上述功能要求的数字秒表。
5. 对电路进行功能仿真, 通过有关波形确认电路设计是否正确。
6. 完成电路全部设计后, 通过系统实验箱下载验证设计课题的正确性。
三、系统组成与工作原理:数字秒表框图:1、电路原理图 :2、工作原理:l.计时控制器作用是控制计时。
计时控制器的输入信号是启动、暂停和清零。
为符合惯例, 将启动和暂停功能设置在同一个按键上, 按一次是启动, 按第二次是暂停, 按第三次是继续。
所以计时控制器共有2个开关输入信号, 即启动/暂停和清除。
计时控制器输出信号为计数允许/保持信号和清零信号。
2. 计时电路的作用是计时, 其输入信号为lkHz 时钟、计数允许/保持和清零信号, 输出为l0ms、l00ms、s 和min 的计时数据。
基于FPGA数字秒表设计

数字秒表设计一、实验目的1、理解计时器的原理与Verilog/VHDL的编程方法;2、掌握多模块设计及层次设计的方法。
二、实验原理秒计时器是由计数器和译码器、显示器组成,其核心是计数器与译码器。
60秒计时器可由二个计数器分别完成:个位为十进制计数器,十位为6进制计数。
个位计数器的计数信号由实验开发板上主频20MHZ分频产生的1Hz时钟信号提供,十位计数器的计数信号由个位的进位信号提供。
然后由译码器对计数结果进行译码,送LED数码管进行显示。
Clr为清零,se t为开始。
三、实验框图图2-1四、实验任务1、采用层次设计的方法,设计一个包括顶层及底层模块的60秒计时器,底层模块用Verilog/VHDL设计(或者选用原理图输入法中宏功能元件),顶层用原理图设计。
2、秒计时器应当具有系统复位功能;3、每十秒发出提示信号及计满60秒时发出报警信号。
(选做)文件名COUNT10.V代码module COUNT1O(SET, CLR, CLK, DOUT, COUT); in put SET, CLR, CLK;output [3:0] DOUT;output COUT;reg [3:0] data;reg COUT;assig n DOUT = data;always @(n egedge CLK or n egedge CLR)4'HF: Q<=7'H71 ;default: Q<=7'B1111111;endcaseenden dmoduleCOUNT60.bdf文件名原理图五、实验步骤1•创建工程2•选择目标器件3. 编写verilog hdl程序4编译5. 生成符号文件6. 创建编辑原理图7. 设置顶层文件8编译六、实验结果1. 编译结果Flow StatusQuartos II VersionRevisicxi NameTop^vel Entity NarneFamlyDeviceTrning ModdsMet timmg requiTiefrientsTata logic ate merit ETold conbinatKMial fundioni Dedfcatcd logic registers Total negiateFBTotal pinsTot日virtual pinsTotaJ rnemory bits&vibedded Multiplier &dements Total PLLs SuccessfLi - Sat Nov 01 11:12:49 30149 1 Build 222 10/21/200& SJ Wet> Editicri COUNTSCOUNTGOl^done I IIEP3C5E144C8Fmi^lN/AG3/5.136( 1 X)33/5.136(<1 X)3J26/96(27*}Q/4?3^36<0%)0/4&(D%)0/2(0%)2. 仿真结果文件名COUNT6.V仿真结果Mann 白Value i17.B F^07ua邑更 g ^?JE^7ub ia-19 JB 71字麼甲 5 33—0宀^^4CLKCLHSETCOUTB D0UTHDH1卜1HD卜0TLrLrLrLnrLrLnnrLrLrLrLrLrLrLrLrLnjTrLrLrLrLrLrumfmrLrLrLrLri L r~1 i 1 i厂-n n文件名COUNT10.V9. 创建编辑波形图文件10. 使用波形图仿真11. 锁定管脚12. 编译13. 下载至芯片仿真结果文件名仿真结果17J?5na■TLTLrLnirLrLrWLn_ruwwjwrLnjmjirLrLrwin_ruijWWUi[n JTT ®(n2XDE®®o^oD203®2xnixD®(n®®©(n2XD®@i®OE®i®<ri i i _______ i i _______COUNT60.V (为了简便将分频器设置2分频的)C_KfHRSET 冋DOITH hiDOirn uOH5 xHUTL_nu jnlimnninmmiMmmmmrimimmMJMominroinnrumiminmTmmmnnrmim!irrno“j 厂JCJZ : 前t 底—I 強—r 耶弋騙工如丫非—仍丈丸朗代熾:璇绽帰它狀减燉麒^峨*]炊輕烫处好號爼仞XCOK切默XX*X*X5XIMM*>X*iXXXAN WtXXXCO Z備出七、实验小结通过本次实验,我掌握了分频器的设计,学习了如何通过原理图设计,知道了如何在一个工程中同时使用verilog hdl程序和原理图。
fpga秒表设计实验报告

fpga秒表设计实验报告本次实验是基于FPGA设计的秒表。
秒表主要是用来计时的一种仪器,具有精准度高、显示清晰等优点。
在实验中,我们使用FPGA来实现秒表的设计。
1. 实验目的通过本次实验,我们的目的是掌握FPGA的使用方法,并设计出一个能够精准计时的秒表。
同时,也能够加深理解数字电路的基本原理和数字信号的处理方式。
2. 实验原理秒表的原理很简单,在起点按下计时键后,秒表开始计时,时间会显示在数码管或LCD屏幕上。
在终点按下停止键后,秒表停止计时。
我们需要用数字电路来实现这个过程,分为三个部分。
2.1. 时钟模块时钟模块是秒表实现的基础。
我们可以使用FPGA内置的时钟控制器IP,也可以自己实现时钟模块。
在这个实验中,我们使用了FPGA内置的时钟控制器IP。
2.2. 计时模块计时模块是实现秒表的关键。
我们可以使用FPGA内置的计数器IP,也可以自己实现计数器模块。
在这个实验中,我们使用了FPGA内置的计数器模块。
2.3. 显示模块显示模块用来显示计时结果。
我们可以使用数码管或LCD屏幕来显示计时结果。
在这个实验中,我们使用了数码管来显示计时结果。
3. 实验步骤3.1. 创建工程首先,我们需要在Vivado IDE中创建一个FPGA工程。
在创建工程时,需要选择适当的设备型号、板卡等参数。
3.2. 添加时钟控制器IP在Vivado IDE中,选择IP Catalog,搜索并添加时钟控制器IP。
3.3. 添加计数器IP在Vivado IDE中,选择IP Catalog,搜索并添加计数器IP。
3.4. 添加数码管IP在Vivado IDE中,选择IP Catalog,搜索并添加数码管IP。
3.5. 连接IP在Vivado IDE中,将时钟控制器IP、计数器IP和数码管IP进行连接。
3.6. 程序设计使用Vivado IDE中的HDL语言对秒表进行程序设计。
3.7. 烧录程序将程序烧录到FPGA中,实现秒表功能。
基于FPGA的数字秒表方案设计书

摘要:该设计是用于体育比赛的数字秒表,基于FPGA在Quartus II 9.0sp2软件下应用VHDL语言编写程序,采用ALTRA公司CycloneII系列的EP2C8Q208芯片进行了计算机仿真,并给出了相应的仿真结果。
本设计有效的克服了传统的数字秒表的缺点采用EDA技术采取自上而下的设计思路。
绘制出了具体的逻辑电路,最后又通过硬件上对其进行调试和验证。
该电路能够实现很好的计时功能,计时精度高,最长计时时间可达一个小时。
关键字:数字秒表;EDA;FPGA;VHDL;Quartus IIThe design of digital stop watch based on FPGA Abstract:This design is a digital stop watch which is used for athletic contests and is based on FPGA using VHDL language to write program in Quartus II software,adopting EP2C8Q208 chip of CycloneII series of ALTRA company for computer simulation and at the same time showing the corresponding simulation result. This design effectively overcomes the traditional digital stop watch weaknesses and takes a top-down approach to design. Draw out a particular logic circuits, and finally pass the circuits to the hardware to debug and verify it.This circuit is able to carry out excellent timing function,has high timing precision,and the longest timing time could reach an hour.Key Words: Digital stop watch;EDA;FPGA;VHDL;MAX PlusⅡ引言数字秒表是日常生活中比较常见的电子产品,其设计也是EDA技术中最基本的设计实验之一[1]。
毕业论文-基于fpga(verilog)的数字式秒表设计说明书

基于FPGA的数字式秒表一、设计任务及要求秒表由于其计时精确,分辨率高(0.01 秒),在各种竞技场所得到了广泛的应用,本次设计的任务就是设计一个基于FPGA 的数字式秒表。
1、基本要求:(1)性能指标:秒表的分辨率为0.01 秒,最长计时时间为99.99 秒;(2)设置启/停开关和复位开关(计数控制器):启/停开关S1 的使用方法与传统的机械计时器相同,即按一下启/停开关,启动计时器开始计时,再按一下启/停开关计时终止。
复位开关S2 用来使计时器清0,复位开关可以在任何情况下使用,即使在计时过程中,只要按一下复位开关,计时进程应立即终止,并对计时器清零。
(开关按下为0,弹起为1)。
(3)秒表的计时基准信号:以周期为0.01 秒(频率100HZ)的计时脉冲作为一个比较精准的计时基准信号输入到0.01 秒位计数器的时钟端;在设计中采用分频器把1000HZ 的时钟信号转换为100HZ 的计时基准信号,其分频系数为10。
(4)数码管动态显示:七段数码管采用动态扫描的方式显示,扫描需要一个比较高频率的信号,本次设计选用1000HZ 。
为了得到1000Hz 信号,必须对输入的时钟信号50MHZ 进行分频。
显示模块共用11 个管脚,其中8 个用于连接8 个数码管的七段LED,还有 3 个管脚用于选择点亮哪个数码管,每隔很短的一段时间8 个数码管交替点亮,依次循环,动态显示,由于人眼的视觉残留,可以观察到连续的测量计数器的计数值。
上电后,八个数码管中左边四个显示自己的学号后四位,在运行过程中一直不变;右边四个显示计时时间,范围0000~9999,利用两个按钮S1、S2 控制计时。
2、提高要求:加入小数点,计时数码管显示范围00.00~99.99。
二、系统原理框图三、电路实现Array四、功能模块1、分频器(以10分频器为例)(1)Verilog HDL语言程序module fp10(Clk,Out);input Clk;output Out;reg Out;reg [3:0] Cout;reg Clk_En;initialOut<=0;always @(posedge Clk )beginCout <= (Cout == 4'd10) ? 4'd0 : (Cout + 4'd1);Clk_En <= (Cout >= 4'd5) ? 1'd1 : 1'd0;Out<=Clk_En;endEndmodule(2)模块化电路(3)波形仿真由波形仿真图可以看出,10分频器将1000Hz的脉冲分频成100Hz的脉冲。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于EDA的数字秒表设计论文班级:11电信二班同组人员:孙兴义 20111060223张忠义 20111060240基于EDA的数字秒表设计摘要:该设计是用于体育比赛的数字秒表,基于EDA在Quartus II 9.0sp2软件下应用VHDL语言编写程序,采用ALTRA公司CycloneII系列的EP2C8Q208芯片进行了计算机仿真,并给出了相应的仿真结果。
本设计有效的克服了传统的数字秒表的缺点采用EDA技术采取自上而下的设计思路。
绘制出了具体的逻辑电路,最后又通过硬件上对其进行调试和验证。
该电路能够实现很好的计时功能,计时精度高,最长计时时间可达一个小时。
关键字:数字秒表;EDA;FPGA;VHDL;Quartus II1引言在科技高度发展的今天,集成电路和计算机应用得到了高速发展。
尤其是计算机应用的发展。
它在人们日常生活已逐渐崭露头角。
大多数电子产品多是由计算机电路组成,如:手机、mp3等。
而且将来的不久他们的身影将会更频繁的出现在我们身边。
各种家用电器多会实现微电脑技术。
电脑各部分在工作时多是一时间为基准的。
本文就是基于计算机电路的时钟脉冲信号、状态控制等原理设计出的数字秒表[1]。
秒表在很多领域充当一个重要的角色。
在各种比赛中对秒表的精确度要求很高,尤其是一些科学实验。
他们对时间精确度达到了几纳秒级别。
2 设计要求(1) 能对0秒~59分59.99秒范围进行计时,显示最长时间是59分59秒;(2) 计时精度达到0.01s;(3) 设计复位开关和启停开关,复位开关可以在任何情况下使用,使用以后计时器清零,并做好下一次计时的准备。
设计由控制模块、时基分频模块,计时模块和显示模块四部分组成。
各模块实现秒表不同的功能3 数字秒表设计的目的本次设计的目的就是在掌握EDA实验开发系统的初步使用基础上,了解EDA技术,对计算机系统中时钟控制系统进一步了解,掌握状态机工作原理,同时了解计算机时钟脉冲是怎么产生和工作的。
在掌握所学的计算机组成与结构课程理论知识时。
通过对数字秒表的设计,进行理论与实际的结合,提高与计算机有关设计能力,提高分析、解决计算机技术实际问题的能力。
通过课程设计深入理解计算机结构与控制实现的技术,达到课程设计的目标。
4 系统设计框图显示段输出如上图所示,计时控制器的作用是控制计时。
计时控制器的输入信号是启动,暂停和清零。
为符合惯例,将启动和暂停功能设置在同一个按键上,按一次是启动,按第二次是暂停,按第三次是清零。
所以计时控制器共有2个开关输入信号,即启动/暂停和清零信号。
计时电路的输入信号、计数允许,保持和清零信号,输出为10Oms、1s和min的计时数据。
时基分频器是一个分频器,产生100ms周期的脉冲.用于计时电路时钟信号。
显示电路为动态扫描电路。
用以显示min、1s,100ms信号。
5 各模块实现计时模块的作用是针对计时过程进行控制。
计时控制模块可用俩个按钮来完成秒表的启动、停止和复位。
时钟分频模块的作用把输入时钟信号变为分频输出信号。
计时模块执行计时功能,计时方法和计算机一样是对标准时钟脉冲计数。
它是由十进制计数器和六进制计数器构成,其中毫秒位、十毫秒位、秒位和分位采用十进制计数器,十秒位和十分位采用六进制计数器。
计时显示电路的作用是将计时值在LED数码管上显示出来。
计时电路产生的值经过BCD七段译码后,驱动LED数码管。
计时显示电路的实现方案采用扫描显示。
6 仿真演示7 实验结果演示5、程序(1)分频模块:module fengpin(CLK,CLK1,CLK2); //输入50MHz,输出分频到1Hz input CLK;output CLK1,CLK2;reg CLK1,CLK2;reg[24:0] counter1; // 中间变量counter定义为寄存器型reg[24:0] counter2;parameter N1=500000;//50_000_000;parameter N2=2500;always@(posedge CLK)begincounter1<=counter1+1'b1;//if(counter1== N1/2-1)beginCLK1 <=~ CLK1;counter1<=0;endcounter2<=counter2+1'b1;//if(counter2==N2/2-1)beginCLK2<=~CLK2;counter2<=0;endendendmodule(2)六进制计数器:module CNT6(CLK,RST,EN,CQ,DOUT);input CLK,EN,RST;output [3:0] DOUT;output CQ;reg [3:0] Q1;reg CQ;assign DOUT=Q1;always@(posedge CLK or negedge RST)beginif(!RST) Q1<=0;else if(EN)beginif(Q1<5) Q1<=Q1+1'b1; else Q1<=3'b0000;endendalways@(Q1)if(Q1==4'h5) CQ=1'b0;else CQ=1'b1;endmodule(3)十进制计数器:module CNT10(CLK,RST,EN,CQ,DOUT);input CLK,EN,RST;output [3:0] DOUT;output CQ;reg [3:0] Q1;reg CQ;assign DOUT=Q1;always@(posedge CLK or negedge RST) beginif(!RST) Q1<=0;else if(EN)beginif(Q1<9) Q1<=Q1+1'b1; else Q1<=4'b0000;endendalways@(Q1)if(Q1==4'h9) CQ=1'b0;else CQ=1'b1;endmodule(4)二十四进制计数器:module CNT24(CLK,RST,EN,COUT); input CLK,EN,RST;output[7:0] COUT;reg [7:0] COUT;always@(posedge CLK)beginif(COUT[7:4]!=2)beginif(COUT[3:0]==4'b1001)beginCOUT[7:4]<=COUT[7:4]+4'b0001;COUT[3:0]<=4'b0000;endelsebeginCOUT[7:4]<=COUT[7:4];COUT[3:0]<=COUT[3:0]+4'b0001;endendelseif(COUT[3:0]==4'b0011)beginCOUT[7:4]<=4'b0000;COUT[3:0]<=4'b0000;endelsebeginCOUT[7:4]<=COUT[7:4];COUT[3:0]<=COUT[3:0]+4'b0001;endendendmodule(5)数码管扫描显示模块:module scan_led(clk_1k,d,dig,seg); //模块名scan_led input clk_1k; //输入时钟input[31:0] d; //输入要显示的数据output[7:0] dig; //数码管选择输出引脚output[7:0] seg; //数码管段输出引脚reg[7:0] seg_r; //定义数码管输出寄存器reg[7:0] dig_r; //定义数码管选择输出寄存器reg[3:0] disp_dat; //定义显示数据寄存器reg[2:0]count; //定义计数寄存器assign dig = dig_r; //输出数码管选择assign seg = seg_r; //输出数码管译码结果always @(posedge clk_1k) //定义上升沿触发进程begincount <= count + 1'b1;endalways @(posedge clk_1k)begincase(count)//选择扫描显示数据3'd0:disp_dat = d[31:28];//第一个数码管3'd1:disp_dat = d[27:24];//第二个数码管3'd2:disp_dat = 4'ha;//第三个数码管3'd3:disp_dat = d[19:16];//第四个数码管3'd4:disp_dat = d[15:12];//第五个数码管3'd5:disp_dat = 4'hb;//第六个数码管3'd6:disp_dat = d[7:4];//第七个数码管3'd7:disp_dat = d[3:0];//第八个数码管endcasecase(count)//选择数码管显示位3'd0:dig_r = 8'b01111111;//选择第一个数码管显示3'd1:dig_r = 8'b10111111;//选择第二个数码管显示3'd2:dig_r = 8'b11011111;//选择第三个数码管显示3'd3:dig_r = 8'b11101111;//选择第四个数码管显示3'd4:dig_r = 8'b11110111;//选择第五个数码管显示3'd5:dig_r = 8'b11111011;//选择第六个数码管显示3'd6:dig_r = 8'b11111101;//选择第七个数码管显示3'd7:dig_r = 8'b11111110;//选择第八个数码管显示endcaseendalways @(disp_dat)begincase(disp_dat)//七段译码4'h0:seg_r = 8'hc0;//显示04'h1:seg_r = 8'hf9;//显示14'h2:seg_r = 8'ha4;//显示24'h3:seg_r = 8'hb0;//显示34'h4:seg_r = 8'h99;//显示44'h5:seg_r = 8'h92;//显示54'h6:seg_r = 8'h82;//显示64'h7:seg_r = 8'hf8;//显示74'h8:seg_r = 8'h80;//显示84'h9:seg_r = 8'h90;//显示94'ha:seg_r = 8'hbf;//显示a4'hb:seg_r = 8'hbf;//显示b/*4'hc:seg_r = 8'hc6;//显示c4'hd:seg_r = 8'ha1;//显示d4'he:seg_r = 8'h86;//显示e4'hf:seg_r = 8'h8e;//显示f*/endcaseendendmodule6、原理图:7、引脚定义:8、实验总结本系统设计用了现在EDA设计手段,基于FPGA采用VHDL语言编程实现数字秒表的设计。