FPGA 数字秒表的设计

合集下载

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

基于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设计实践报告题目:数字秒表的设计院系:计算机与信息工程学院专业:电子科学与技术年级姓名:学号:指导老师:一、课程设计目的:本课程的授课对象是电子科学与技术专业本科生,是电子类专业的一门重要的实践课程,是理论与实践相结合的重要环节。

本课程有助于培养学生的数字电路设计方法、掌握模块划分、工程设计思想与电路调试能力,为以后从事各种电路设计、制作与调试工作打下坚实的基础。

二、课程设计要求: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数字秒表设计

基于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设计的秒表。

秒表主要是用来计时的一种仪器,具有精准度高、显示清晰等优点。

在实验中,我们使用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的数字秒表方案设计书

摘要:该设计是用于体育比赛的数字秒表,基于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(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的脉冲。

FPGA的数字秒表的设计

FPGA的数字秒表的设计

基于FPGA的数字秒表的设计杨远成,赵创社,雷金利(西安应用光学研究所陕西西安710065)应用VHDL语言设计数字系统,很多设计工作可以在计算机上完成,从而缩短了系统的开发时间,提高了工作效率。

本文介绍一种以FPGA为核心,以VHDL为开发工具的数字秒表,并给出源程序和仿真结果。

1 系统设计方案1.1 系统总体框图数字秒表主要有分频器、计数模块、功能控制模块、势能控制模块和显示输出模块组成。

系统框图如图1所示。

本次的设计仿真选用以EP1C6Q240芯片为核心的FPGA开发板,该开发板提供了较完善的外围周边电路和信号接口,并提供了一块4位7段数码管的扩展板,为本次设计提供了硬件条件。

在设计中,功能控制模块根据控制选择不同的功能状态的时间输出,通过势能控制模块和显示输出模块驱动7段数码管显示相应的时间。

1.2 系统功能要求(1)具有时钟秒表系统功能要求显示功能,用4个数码管分别显示秒和百分秒;(2)具有3种功能状态:系统时间运行状态,系统时间至零状态,时钟正常显示状态,通过输入控制信号可以使系统在这3个状态之间切换,使数码管显示相应状态的时间;(3)开启时间设定、关闭时间设定可通过控制信号中的时间调节来设置,在秒设置方面每按一下,秒就会自动加1,采用60进制计数,当计数到59时又会恢复为00;百分秒设置方面每按一下,百分秒会自动加1,采用100进制计数,当计数到99时,向上进位并恢复00。

系统时间可以同单独的至零信号,将数码管显示时间直接恢复到00.00状态。

2 模块功能设计及仿真2.1 分频模块开发板提供的系统时钟为50 MHz,通过分频模块3次分频,将系统的时钟信号分为100 Hz和1 000 Hz分别提供给计数模块和势能控制模块作为时钟控制信号。

该模块部分VHDL源程序如下:2.2 计数模块计数模块中,时钟信号是100 Hz作为秒表的百分秒输入,百分秒为100进制计数器,其进位输出作为秒的计数时钟,秒为60进制计数器。

FPGA秒表实验报告

FPGA秒表实验报告

课程设计报告专业班级课程题目秒表的设计学号姓名同组人成绩2013年5月一、设计目的1.进一步熟悉七段码译码器的硬件接口。

2.掌握用扫描方法驱动多个数码管硬件接口。

3.掌握秒表VHDL的编程方法。

二、系统总体设计(1).设计要求:1.秒表共有6个输出显示,分别为百分之一秒、十分之一秒、秒、十秒、分、十分,所以共有6个计数器与之相对应,6个计数器的输出全都为BCD码输出,这样便于和显示译码器的连接。

当计时达60分钟后,蜂鸣器鸣响10声。

2.整个秒表还需有一个启动信号和一个归零信号,以便秒表能随意停止及启动。

3.秒表的逻辑结构较简单,它主要由显示译码器、分频器、十进制计数器、六进制计数器和报警器组成。

在整个秒表中最关键的是如何获得一个精确的100HZ 计时脉冲。

(2).实验原理:秒表由于其计时精确,分辨率高(0.01秒),在各种竞技场所得到了广泛的应用。

秒表的工作原理与数字时基本相同,唯一不同的是秒表的计时时钟信号,由于其分辨率为0.01秒,所以整个秒表的工作时钟是在100Hz的时钟信号下完成。

当秒表的计时小于1个小时时,显示的格式是mm-ss-xx(mm表示分钟:0~59;ss 表示秒:0~59;xx表示百分之一秒:0~99),当秒表的计时大于或等于一个小时时,显示的和多功能时钟是一样的,就是hh-mm-ss(hh表示小时:0~99),由于秒表的功能和钟表有所不同,所以秒表的hh表示的范围不是0~23,而是0~99,这也是和多功能时钟不一样的地方。

在设计秒表的时候,时钟的选择为100Hz。

变量的选择:因为xx(0.01秒)和hh(小时)表示的范围都是0~99,所以用两个4位二进制码(BCD码)表示;而ss(秒钟)和mm(分钟)表示的范围是0~59,所以用一个3位的二进制码和一个4位的二进制码(BCD)码表示。

显示的时候要注意的问题就是小时的判断,如果小时是00,则显示格式为mm-ss-xx,如果小时不为00,则显示hh-mm-ss。

基于FPGA的数字秒表的设计与实现

基于FPGA的数字秒表的设计与实现

现代电子技术综合实验一、性能指标(1) 秒表计时范围为:1小时;(2) 秒表精度为0.01秒;(3) 具有开始计时、停止计时控制功能,且开始计时、停止计时为一个复用按键;(4) 在正常计时显示过程中,能够在存储按键作用下存储某一计时时间;存储的时间组数为确定值或1至任意值;(5) 在读取按键作用下存储的时间能够回放显示;回放显示可手动或自动依次显示;(6) 具有复位功能;(7) 用六位数码管显示时间读数。

二、任务要求(1)完成系统方案总体设计(2)利用硬件描述语言完成控制电路的设计、仿真(3)利用开发板完成系统的硬件实现(4)进行系统调试及功能测试(5)撰写设计报告三、系统组成u 计数器单级计数器四、单元电路设计signal count: std_logic_vector(3 downto 0):="0000"; process(rst,clk) begin if rst='1' then count <= "0000"; carry_out <= '0'; elsif clk'event and clk= '1' then if carry_in = '1' then if count= "1001" then count <= "0000"; carry_out <= '1'; else count <= count+1; carry_out <= '0'; end if; end if; end if;end process; count_out<=count; 功能:对频率100Hz 的信号进行计数,计数最大值为 595999。

clk:时钟信号输入rst:复位输入端carry_in:使能端count_out(3:0):计数输出端carry_out:进位输出端主要语句:同步级联原理图:有缘学习更多+谓ygd3076或关注桃报:奉献教育(店铺异步级联原理图:u分频器功能:将系统时钟分频后,为计时模块和显示模块提供工作时钟;clk:48MHz系统时钟信号输入端clkout1k:频率1KHz信号输出端clkout100:频率100Hz信号输出端123 4512 3 4 5 1 2clk_inclk_out 10个 主要语句: if clkin'event and clkin = '1' then if cnt = 5 then cnt <= 1; clkout <=not clkout; else cnt <= cnt + 1; end if; end if;分频器实现原理:基于计数器方法实现例有缘学习更多+谓ygd3076或关注桃报:奉献教育(店铺u 使能控制e_tmp <=not e_tmp;主要语句: 功能: 在输入信号的作用下,输出信号发生翻转,产生控制计数器的使能控制信号。

基于FPGA数字秒表设计

基于FPGA数字秒表设计

数字秒表设计
一、实验目的
1、理解计时器的原理与V erilog/VHDL的编程方法;
2、掌握多模块设计及层次设计的方法。

二、实验原理
秒计时器是由计数器和译码器、显示器组成,其核心是计数器与译码器。

60 秒计时器可由二个计数器分别完成:个位为十进制计数器,十位为6 进
制计数。

个位计数器的计数信号由实验开发板上主频20MHZ分频产生的1Hz
时钟信号提供, 十位计数器的计数信号由个位的进位信号提供。

然后由译码器
对计数结果进行译码,送LED 数码管进行显示。

Clr为清零,se t为开始。

三、实验框图
图2-1
四、实验任务
1、采用层次设计的方法,设计一个包括顶层及底层模块的60 秒计时器,底
层模块用Verilog/VHDL设计(或者选用原理图输入法中宏功能元件),顶层用原理图设计。

2、秒计时器应当具有系统复位功能;
3、每十秒发出提示信号及计满60 秒时发出报警信号。

(选做)




五、实验步骤
1.创建工程
2.选择目标器件
3.编写verilog hdl 程序
4.编译
5.生成符号文件
6.创建编辑原理图
7.设置顶层文件
8.编译
9.创建编辑波形图文件
10.使用波形图仿真
11.锁定管脚 12.编译 13.下载至芯片
六、实验结果
1.编译结果

仿




仿



文COUNT60.v (为了简便将分频器设置2分频的)。

基于FPGA的数字秒表设计

基于FPGA的数字秒表设计

基于FPGA的数字秒表设计硬件平台:DE2-115软件环境:Quartus II 15.1采样了较为简单的计数⽅法,详细代码就不讲解了,分为三个模块,⼀个是计数模块 count.v,⼀个是显⽰模块 disp.v,还有⼀个是顶层模块miaobiao.v。

有清零按键和暂停拨码开关。

顶层模块:1module miaobiao(2 clk,3 rst_n,4 pause,56 Hex0,7 Hex1,8 Hex2,9 Hex3,10 Hex4,11 Hex5,12 );1314input clk;15input rst_n;16input pause;1718output[6:0] Hex0;19output[6:0] Hex1;20output[6:0] Hex2;21output[6:0] Hex3;22output[6:0] Hex4;23output[6:0] Hex5;2425wire[3:0]h_sec_h;26wire[3:0]h_sec_l;2728wire[3:0]sec_h;29wire[3:0]sec_l;3031wire[3:0]fen_h;32wire[3:0]fen_l;3334 count u0(35 .clk(clk),36 .rst_n(rst_n),37 .pause(pause),3839 .h_sec_h(h_sec_h),40 .h_sec_l(h_sec_l),4142 .sec_h(sec_h),43 .sec_l(sec_l),4445 .fen_h(fen_h),46 .fen_l(fen_l)47 );4849 disp u1(5051 .h_sec_l(h_sec_l),52 .h_sec_h(h_sec_h),5354 .sec_l(sec_l),55 .sec_h(sec_h),5657 .fen_l(fen_l),58 .fen_h(fen_h),5960 .Hex0(Hex0),61 .Hex1(Hex1),62 .Hex2(Hex2),63 .Hex3(Hex3),64 .Hex4(Hex4),65 .Hex5(Hex5)66 );6768endmodulemiaobiao.v计数模块:1module count(2 clk,3 rst_n,4 pause,56 h_sec_h,7 h_sec_l,89 sec_h,10 sec_l,1112 fen_h,13 fen_l14 );1516input clk;17input rst_n;18input pause; //pause为0时正常计数,为1时暂停计数 1920output reg[3:0] h_sec_h; //百分秒低位21output reg[3:0] h_sec_l; //百分秒⾼位2223output reg[3:0] sec_h; //秒⾼位24output reg[3:0] sec_l; //秒低位2526output reg[3:0] fen_h; //分低位27output reg[3:0] fen_l; //分⾼位2829reg flag1; //flag1为百分秒向秒的进位30reg flag2; //flag2为秒向分的进位31reg[27:0] cnt; //32reg clk_100hz;3334/* 100hz 分频 */35always@(posedge clk or negedge rst_n)36if(!rst_n)37 cnt <= 28'd0;38else if(cnt == 249999)39 cnt <= 28'd0;40else41 cnt <= cnt + 1'b1;4243always@(posedge clk or negedge rst_n)44if(!rst_n)45 clk_100hz <= 1'b0;46else if(cnt == 249999)47 clk_100hz <= !clk_100hz;48else49 clk_100hz <= clk_100hz;5051/* 百分秒计数进程,每计满100,flag1产⽣⼀个进位 */52always@(posedge clk_100hz or negedge rst_n)53begin54if(!rst_n) begin55 {h_sec_h,h_sec_l} <= 8'h00;56 flag1 <= 1'b0;57end58else if(!pause) begin59if(h_sec_l == 9) begin60 h_sec_l <= 4'd0;61if(h_sec_h == 9) begin62 h_sec_h <= 4'd0;63 flag1 <= 1'b1;64end65else66 h_sec_h <= h_sec_h + 1'b1;67end68else begin69 h_sec_l <= h_sec_l + 1'b1;70 flag1 <= 1'b0;71end72end73end7475/* 秒计数进程,每计满60,flag2产⽣⼀个进位 */ 76always@(posedge flag1 or negedge rst_n)77begin78if(!rst_n) begin79 {sec_h,sec_l} <= 8'h00;80 flag2 <= 0;81end82else if(sec_l == 9) begin83 sec_l <= 4'd0;84if(sec_h == 5) begin85 sec_h <= 4'd0;86 flag2 <= 1'b1;87end88else89 sec_h <= sec_h + 1'b1;90end91else begin92 sec_l <= sec_l + 1'b1;93 flag2 <= 1'b0;94end95end9697/* 分计数进程,每计数满60,系统⾃动清零 */ 98always@(posedge flag2 or negedge rst_n)99begin100if(!rst_n) begin101 {fen_h,fen_l} <= 8'h00;102end103else if(fen_l == 9) begin104 fen_l <= 4'd0;105if(fen_h == 5)106 fen_h <= 4'd0;107else108 fen_h <= fen_h + 1'b1;109end110else111 fen_l <= fen_l + 1'b1;112end113endmodule114115116117118count.v显⽰模块:1module disp(23 h_sec_l,4 h_sec_h,56 sec_l,7 sec_h,89 fen_l,10 fen_h,1112 Hex0,13 Hex1,14 Hex2,15 Hex3,16 Hex4,17 Hex5,18 );1920input[3:0] h_sec_h;21input[3:0] h_sec_l;2223input[3:0] sec_h;24input[3:0] sec_l;2526input[3:0] fen_h;27input[3:0] fen_l;2829output reg[6:0] Hex0;30output reg[6:0] Hex1;31output reg[6:0] Hex2;32output reg[6:0] Hex3;33output reg[6:0] Hex4;34output reg[6:0] Hex5;3536always@(*) //百分秒个位控制37begin38case(h_sec_l)390:Hex0 <= 7'b1000000; //0401:Hex0 <= 7'b1111001; //1412:Hex0 <= 7'b0100100; //2423:Hex0 <= 7'b0110000; //3434:Hex0 <= 7'b0011001; //4445:Hex0 <= 7'b0010010; //5456:Hex0 <= 7'b0000010; //6467:Hex0 <= 7'b1111000; //7478:Hex0 <= 7'b0000000; //8489:Hex0 <= 7'b0010000; //949default:Hex0 <= 7'b1000000; //0 50endcase51end5253always@(*) //百分秒⼗位控制54begin55case(h_sec_h)560:Hex1 <= 7'b1000000; //0571:Hex1 <= 7'b1111001; //1582:Hex1 <= 7'b0100100; //2593:Hex1 <= 7'b0110000; //3604:Hex1 <= 7'b0011001; //4615:Hex1 <= 7'b0010010; //5626:Hex1 <= 7'b0000010; //6637:Hex1 <= 7'b1111000; //7648:Hex1 <= 7'b0000000; //8659:Hex1 <= 7'b0010000; //966default:Hex1 <= 7'b1000000; //0 67endcase68end6970always@(*) //71begin72case(sec_l)730:Hex2 <= 7'b1000000; //0741:Hex2 <= 7'b1111001; //1752:Hex2 <= 7'b0100100; //2763:Hex2 <= 7'b0110000; //3774:Hex2 <= 7'b0011001; //4785:Hex2 <= 7'b0010010; //5796:Hex2 <= 7'b0000010; //6807:Hex2 <= 7'b1111000; //7818:Hex2 <= 7'b0000000; //8829:Hex2 <= 7'b0010000; //983default:Hex2 <= 7'b1000000; //084endcase85end8687always@(*) //88begin89case(sec_h)900:Hex3 <= 7'b1000000; //0911:Hex3 <= 7'b1111001; //1922:Hex3 <= 7'b0100100; //2933:Hex3 <= 7'b0110000; //3944:Hex3 <= 7'b0011001; //4955:Hex3 <= 7'b0010010; //596default:Hex3 <= 7'b1000000; //097endcase98end99100always@(*) //101begin102case(fen_l)1030:Hex4 <= 7'b1000000; //01041:Hex4 <= 7'b1111001; //11052:Hex4 <= 7'b0100100; //21063:Hex4 <= 7'b0110000; //31074:Hex4 <= 7'b0011001; //41085:Hex4 <= 7'b0010010; //51096:Hex4 <= 7'b0000010; //61107:Hex4 <= 7'b1111000; //71118:Hex4 <= 7'b0000000; //81129:Hex4 <= 7'b0010000; //9113default:Hex4 <= 7'b1000000; //0114endcase115end116117always@(*) //118begin119case(fen_h)1200:Hex5 <= 7'b1000000; //01211:Hex5 <= 7'b1111001; //11222:Hex5 <= 7'b0100100; //21233:Hex5 <= 7'b0110000; //31244:Hex5 <= 7'b0011001; //41255:Hex5 <= 7'b0010010; //5126default:Hex5 <= 7'b1000000; //0127endcase128end129130endmoduledisp.v仿真⽤的是Modelsim SE-64 10.4,只对计数模块进⾏了仿真,不是很直观,代码如下:1 `timescale 1ns/1ns2 `define clk_period 203module count_tb;4reg clk;5reg rst_n;6reg pause;7wire[3:0] h_sec_h;8wire[3:0] h_sec_l;9wire[3:0] sec_l;10wire[3:0] sec_h;11wire[3:0] fen_h;12wire[3:0] fen_l;13 count u0(14 .clk(clk),15 .rst_n(rst_n),16 .pause(pause),17 .h_sec_h(h_sec_h),18 .h_sec_l(h_sec_l),19 .sec_h(sec_h),21 .fen_h(fen_h),22 .fen_l(fen_l)23 );2425initial26 clk = 0;27always#(`clk_period/2) clk = ~clk;2829initial30begin31 rst_n = 1'b0;32 #(`clk_period);33 rst_n = 1'b1;34 pause = 1'b1;35 #(`clk_period*5);36 pause = 1'b0;37 #(`clk_period*1000000);38 $stop;39end40endmodulecount_tb.v由于分频为100hz进⾏百分秒计数,Modelsim跑的⽐较慢,所以我将百分秒计数模块,秒计数模块,分计数模块⼀个个单独来进⾏仿真,这样速度较快,容易找到问题,功能上是可以完全实现的。

基于FPGA的数字秒表设计与实现

基于FPGA的数字秒表设计与实现

基于FPGA的数字秒表设计与实现王媛媛【期刊名称】《微型机与应用》【年(卷),期】2014(000)005【摘要】With VHDL and schematic input, a digital stopwatch has been designed on Quartus II software platform. And it has been implemented based on FPGA. System design plan and function blocks have been provided in the paper. After compiling and simulation, the system has been downloaded to the Cyclone EP2C5Q208C8 device to test. The result showed that the system could implement functions of time display, start and stop, reset, overflow alarm.%在 Quartus II 软件平台的基础上,基于VHDL 语言及图形输入,采用 FPGA 设计了一款数字秒表,同时,给出了数字秒表系统设计方案及各个功能模块的设计原理。

通过对系统进行编译、仿真,并下载到 Cyclone 系列 EP2C5Q208C8器件中进行测试,结果表明,本设计能实现计时显示、启停、复位及计时溢出报警功能。

【总页数】4页(P23-26)【作者】王媛媛【作者单位】西安科技大学电气与控制工程学院,陕西西安 710054【正文语种】中文【中图分类】TP399【相关文献】1.一种基于FPGA的数字秒表设计方法 [J], 王永维2.基于FPGA的数字秒表设计 [J], 唐家博3.基于FPGA的数字秒表的设计 [J], 鹿玉红;田红霞;藏彦4.一种新型的基于FPGA数字秒表的设计方法 [J], 车保川5.基于FPGA的电子秒表的设计与实现 [J], 王香云因版权原因,仅展示原文概要,查看原文内容请购买。

FPGA多功能60s秒表

FPGA多功能60s秒表

多功能秒表的设计一、实验目的:用状态机实现秒表的设计,了解一般状态机的设计与应用。

二、实验原理:状态 I/O din clr con_en suocun_enreset 0001 1 0 1start 0010 0 1 1lap 0100 0 1 0stop 1000 0 0 1状态机输出控制计数器counter_60,锁存器控制数码管显示数值。

三、实验内容利用QuartusII进行文本编辑输入、仿真测试并给出仿真波形,了解控制信号的时序,最后进行引脚锁定并完成硬件测试实验。

建议选择电路模式No.5 (附录图),用(PIO0~ PIO3)控制输入信号din; PIO28控制状态机工作时钟CLK;输出Q[7..0]接PIO47~PIO40(显示于数码管)。

下载后:①按实验板“系统复位”键;②用键4键3键2和键1输入4位信号序列数;③显示于数码管。

四、实验代码:(1)带进位十进制计数器CNT10:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT10 ISPORT (CLK,RST,EN : IN STD_LOGIC;CQ : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);COUT : OUT STD_LOGIC );END CNT10;ARCHITECTURE behav OF CNT10 ISBEGINPROCESS(CLK, RST, EN)V ARIABLE CQI : STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINIF RST = '1' THEN CQI := (OTHERS =>'0') ; --计数器异步复位ELSIF CLK'EVENT AND CLK='1' THEN --检测时钟上升沿IF EN = '1' THEN --检测是否允许计数(同步使能)IF CQI < 9 THEN CQI := CQI + 1; --允许计数, 检测是否小于9 ELSE CQI := (OTHERS =>'0'); --大于9,计数值清零END IF;END IF;END IF;IF CQI = 9 THEN COUT <= '1'; --计数大于9,输出进位信号ELSE COUT <= '0';END IF;CQ <= CQI; --将计数值向端口输出END PROCESS;END behav;(2)六进制计数器CNT6:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT6 ISPORT (CLKH,RSTH,ENH : IN STD_LOGIC;CQH : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) );END CNT6;ARCHITECTURE behav OF CNT6 ISBEGINPROCESS(CLKH, RSTH, ENH)V ARIABLE CQIH : STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINIF RSTH = '1' THEN CQIH := (OTHERS =>'0') ; --计数器异步复位ELSIF CLKH'EVENT AND CLKH='0' THEN --检测时钟上升沿IF ENH = '1' THEN --检测是否允许计数(同步使能)IF CQIH < 5 THEN CQIH := CQIH + 1; --允许计数, 检测是否小于5 ELSE CQIH := (OTHERS =>'0'); --大于5,计数值清零END IF;END IF;END IF;CQH <= CQIH; --将计数值向端口输出END PROCESS;END behav;(3)计数器控制器:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity control_60 isPORT( din : IN STD_LOGIC_VECTOR(3 DOWNTO 0);clk : IN STD_LOGIC;clr : OUT STD_LOGIC;count_en : OUT STD_LOGIC;suocun_en : OUT STD_LOGIC );end control_60 ;architecture Behav of control_60 isTYPE control_type IS (reset,start,lap,stop);SIGNAL current_state, next_state : control_type;BEGINREG:PROCESS (clk)BEGINIF (clk'event AND clk='1') THENcurrent_state <= next_state;END IF;end PROCESS REG;COM:PROCESS (clk,din, next_state, current_state)BEGINCASE current_state ISWHEN reset =>clr <= '1';count_en <= '0';suocun_en<= '1';IF ( din="0010") THEN next_state <= start;ELSE next_state <= reset;END IF;WHEN start =>clr <= '0';count_en <= '1'; suocun_en<= '1';if ( din="0100")then next_state<= lap;elsif(din="1000")then next_state <= stop;elsif(din="0001")then next_state<= reset;elsenext_state<= start;end if;WHEN lap => clr <= '0'; count_en <= '1'; suocun_en<= '0';if ( din="1000") then next_state <= stop;elsif(din="0010")then next_state <= start;else next_state <= lap;end if;WHEN stop =>clr <= '0';count_en <= '0'; suocun_en<= '1';if ( din="0001") then next_state <= reset;elsif(din="0010")then next_state <= start;else next_state <= stop;end if;WHEN others =>next_state<= reset;END CASE;END PROCESS COM;end Behav;(4)LPM锁存器:LIBRARY ieee;USE ieee.std_logic_1164.all;LIBRARY lpm;USE lpm.all;ENTITY suocun ISPORT(data : IN STD_LOGIC_VECTOR (7 DOWNTO 0);gate : IN STD_LOGIC ;q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) );END suocun;ARCHITECTURE SYN OF suocun ISSIGNAL sub_wire0 : STD_LOGIC_VECTOR (7 DOWNTO 0);COMPONENT lpm_latchGENERIC (lpm_type : STRING;lpm_width : NATURAL);PORT (q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0);data : IN STD_LOGIC_VECTOR (7 DOWNTO 0);gate : IN STD_LOGIC );END COMPONENT;BEGINq <= sub_wire0(7 DOWNTO 0);lpm_latch_component : lpm_latchGENERIC MAP (lpm_type => "LPM_LATCH",lpm_width => 8)PORT MAP (data => data,gate => gate,q => sub_wire0);END SYN;五、实验原理图:六、实验结果:(1)LMP锁存器功能仿真图:(2)实验结果:。

基于FPGA的数字秒表的设计

基于FPGA的数字秒表的设计

目录第一章绪论 (2)1.1课题背景 (2)1.2硬件描述语言——VHDL (3)1.2.1 VHDL的简介 (3)1.2.2 VHDL语言的特点 (4)1.2.3 VHDL的设计流程 (4)1.3数字秒表设计的要求 (5)1.4数字秒表设计的目的 (5)第二章设计思想与方法论证 (5)2.1设计思想 (5)2.1.1方案一:采用74LS163和CD4046设计秒表 (6)2.1.2方案二:基于单片机的数字秒表的设计 (6)2.1.3方案三:基于FPGA的数字秒表的设计 (6)2.2论证分析 (7)第三章系统设计 (7)3.1 系统的总体设计 (8)3.2 FPGA内部各单元模块设计与仿真 (9)3.2.1分频电路模块 (9)3.2.2去抖电路模块 (10)3.2.3计数电路模块 (12)3.2.4译码显示电路模块 (13)第四章硬件模块介绍 (14)4.1 FPGA的简介 (14)4.2 CD4511的简介 (15)第五章硬件调试 (16)5.1 Quartus II的简介 (16)5.2 硬件电路的设计与调试 (17)5.2.1手工检测 (18)5.2.2程序检测 (18)5.2.3电路组装与调试 (19)5.3软件调试 (19)5.4注意事项 (19)5.4.1在FPGA芯片上调试过程 (19)5.4.2程序检测 (19)5.5系统性能测试 (20)5.5.1测试内容 (20)5.5.2实现功能 (20)5.6调试过程发现的问题与解决方法 (20)结论 (21)致谢 (22)参考文献 (23)附录一:数字秒表实物图 (24)附录二:数字秒表源程序 (25)百色学院本科毕业论文(设计)诚信保证书 (30)百色学院本科毕业论文(设计)任务书指导教师签名:2011 年12 月12 日百色学院本科毕业论文(设计)开题报告百色学院本科毕业论文(设计)中期自查表学生签名:年月日指导教师签名:年月日基于FPGA的数字秒表的设计电子信息工程2008110241 指导老师摘要:EDA技术作为电子工程领域的一门新技术,极大的提高了电子系统设计的效率和可靠性。

fpga课程设计数字秒表摘要

fpga课程设计数字秒表摘要

fpga课程设计数字秒表摘要一、教学目标本课程的教学目标是使学生掌握FPGA的基本知识和数字秒表的设计与实现。

在知识目标方面,学生需要了解FPGA的基本结构、工作原理和编程方法,掌握数字秒表的设计流程和关键算法。

在技能目标方面,学生需要能够熟练使用FPGA开发工具进行数字秒表的设计、仿真和编程,具备一定的实际操作能力。

在情感态度价值观目标方面,学生应该培养对电子技术的兴趣和热情,增强创新意识和团队合作精神。

二、教学内容本课程的教学内容主要包括FPGA的基本知识、数字秒表的设计与实现。

首先,学生需要学习FPGA的基本结构和工作原理,了解FPGA的编程方法和开发工具。

然后,学生将学习数字秒表的设计流程,掌握数字秒表的关键算法和实现技巧。

最后,学生将通过实际操作,完成数字秒表的设计、仿真和编程。

三、教学方法为了实现教学目标,本课程将采用多种教学方法,包括讲授法、案例分析法和实验法。

在讲授法方面,教师将系统地讲解FPGA的基本知识和数字秒表的设计原理,帮助学生建立扎实的理论基础。

在案例分析法方面,教师将通过分析具体的数字秒表设计案例,引导学生掌握数字秒表的设计方法和技巧。

在实验法方面,学生将通过实际操作,锻炼数字秒表的设计、仿真和编程能力。

四、教学资源为了支持教学内容和教学方法的实施,我们将准备多种教学资源,包括教材、参考书、多媒体资料和实验设备。

教材和参考书将提供丰富的理论知识和实践经验,帮助学生深入理解和掌握FPGA和数字秒表的设计。

多媒体资料将通过图像、动画等形式,生动展示FPGA和数字秒表的原理和实现。

实验设备将提供实际操作的机会,让学生亲手实践数字秒表的设计和编程。

五、教学评估本课程的教学评估将包括平时表现、作业和考试三个部分。

平时表现评估将考察学生的出勤、课堂参与和团队合作情况,以评价学生的学习态度和团队精神。

作业评估将通过对学生的练习和项目作业的评审,评价学生对FPGA和数字秒表设计的理解和掌握程度。

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

学院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 的计时数据。

3. 时基分频器是一个l0分频器, 产生l0ms周期的脉冲, 用于计时电路时钟信号。

4. 显示电路为动态扫描电路, 用以显示十分位、min、10s、s、100ms 和10ms 信号。

三、系统设计的实现:要满足数字秒表的精度,首先应该获得精确的计时基准信号,这里的系统精度要求为l/100S, 计时器能显示1/100S的时间, 提供给计时器内部定时的时钟脉冲频率应大于l00Hz, 这里选用1kHz,因此每来1000个外界输入脉冲就输出一个频率,该频率的时间周期正好为0.01S,即先将外界脉冲进行1MHz→100Hz 的分频。

0.1s、1s、1min等计时单位之间的进位转换可以通过十进制与六进制计数器来实现。

每位计数器均能输出相应计时单位计数结果,其中十进制计数器可以实现0.01s、0.1s、1s和1min单位单元的计数;六进制可以实现10s、10min为单位的计数。

由于秒表需要具有异步清零和启动/暂停功能,因此可以将每个计数器都设置异步清零和启动/暂停输入端口,再将各计数器进行级联,即可同步显示不同量度单位的计时内容,如图所示图中,U0模块用于将外界脉冲进行1MHz→100Hz的分频,从而得到0.01s 的脉冲信号,U1用于实现0.1s的脉冲信号,U2用于实现1s的脉冲信号,U3和U4用于实现1min的脉冲信号,U5和U6用于实现1H的脉冲信号。

除U0外,U1~U6的CQ可驱动显示带译码器的七段LED进行数字显示。

通过上述分析可知,数字秒表的构成实际上依赖于三个基本模块,即1MHz →100Hz的分频模块、十进制计数器模块和六进制计数器模块,然后使用一个顶层模块将这些基本模块通过元件调用与映射的关系进行有机的结合。

总体流程图如下:Start程序初始化1、顶层模块程序由于十进制计数器模块和六进制计数器模块会产生计数溢出信号,而这些溢出信号有可能作为下一计数器的时钟输入脉冲,因此在顶层模块程序结构体中需要定义相应的暂存计数溢出信号。

顶层模块程序编写如下:--数字秒表的顶层模块程序miaobiao.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY miaobiao ISPORT(CLR:IN STD_LOGIC; --定义清零输入端CLK:IN STD_LOGIC; --定义外界时钟脉冲输入端ENA:IN STD_LOGIC; --定义启动/暂停输入端DOUT:OUT STD_LOGIC_VECTOR(23 DOWNTO 0)); --定义秒表显示输出端END miaobiao;ARCHITECTURE ART OF miaobiao ISCOMPONENT CLKGEN --定义3MHz到100Hz的分频计数器元件PORT(CLK:IN STD_LOGIC; --定义3MHz到100Hz的分频计数器所使用的端口NEWCLK:OUT STD_LOGIC);END COMPONENT;COMPONENT CNT10 --定义十进制计数器元件PORT(CLK,CLR,ENA:IN STD_LOGIC; --定义十进制计数器所使用的端口 CQ:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);CARRY_OUT:OUT STD_LOGIC);END COMPONENT;COMPONENT CNT6 --定义六进制计数器元件PORT(CLK,CLR,ENA:IN STD_LOGIC; --定义六进制计数器所使用的端口 CQ:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);CARRY_OUT:OUT STD_LOGIC);END COMPONENT;SIGNAL NEWCLK:STD_LOGIC;SIGNAL CARRY1:STD_LOGIC;SIGNAL CARRY2:STD_LOGIC; --暂存计数溢出信号SIGNAL CARRY3:STD_LOGIC;SIGNAL CARRY4:STD_LOGIC;SIGNAL CARRY5:STD_LOGIC;BEGIN--使用元件例化语句,通过基本模块的级联实现数字秒表U0:CLKGEN PORT MAP(CLK=>CLK,NEWCLK=>NEWCLK);U1:CNT10 PORT MAP(CLK=>NEWCLK,CLR=>CLR,ENA=>ENA,CQ=>DOUT(3 DOWNTO 0),CARRY_OUT=>CARRY1);U2:CNT10 PORT MAP(CLK=>CARRY1,CLR=>CLR,ENA=>ENA,CQ=>DOUT(7 DOWNTO 4),CARRY_OUT=>CARRY2);U3:CNT10 PORT MAP(CLK=>CARRY2,CLR=>CLR,ENA=>ENA,CQ=>DOUT(11 DOWNTO 8),CARRY_OUT=>CARRY3);U4:CNT6 PORT MAP(CLK=>CARRY3,CLR=>CLR,ENA=>ENA,CQ=>DOUT(15 DOWNTO 12),CARRY_OUT=>CARRY4);U5:CNT10 PORT MAP(CLK=>CARRY4,CLR=>CLR,ENA=>ENA,CQ=>DOUT(19 DOWNTO 16),CARRY_OUT=>CARRY5);U6:CNT6 PORT MAP(CLK=>CARRY5,CLR=>CLR,ENA=>ENA,CQ=>DOUT(23 DOWNTO 20));END ART;顶层仿真波形:2、50MHz→1kHz分频模块程序50MHz→1kHz分频模块程序流程图如图所示,使用VHDL编写程序时,在实体中应定义1kMHz的时钟频率输入端和100Hz的时钟脉冲输出端。

在结构体的说明语句中,定义一个频率脉冲计数信号(CNTER),该信号的类型为整数型,计数范围为0~999。

在结构体的功能描述语句中,可使用2个进程(U1和U2)来完成50MHz →1kHz的频率描述。

在U1中,每次检测到一个上升沿输入脉冲时,先通过IF 语句检测输入信号是否为上升沿。

若是上升沿,再使用IF语句判断当前计数值(CNTER)是否等于999,如果相等,则将CNTER清零,为输出下一个100Hz 的频率做准备,否则将CNTER加1。

在U2中判断CNTER是否等于999,若果相等,将NEWCLK输出为高电平,否则输出为低电平。

1kMHz→100Hz分频模块程序编写如下:LIBRARY IEEE;USE IEEE. STD_LOGIC_1164.ALL;ENTITY CLKGEN ISPORT( CLK:IN STD_LOGIC; -- 定义3MHz脉冲输入端NEWCLK:OUT STD_LOGIC ); --定义100Hz脉冲输出端END CLKGEN;ARCHITECTURE ART OF CLKGEN ISSIGNAL CNTER:INTEGER RANGE 0 TO 10#299999#; --暂存输入脉冲个数BEGINU1: PROCESS(CLK)BEGINIF CLK'EVENT AND CLK='1' THENIF CNTER=10#299999# THEN CNTER<=0;--判断输入脉冲个数是否为3000(0~29999)ELSE CNTER<=CNTER+1;END IF;END IF;END PROCESS U1;U2: PROCESS(CNTER) --计数溢出信号控制 BEGIN IF CNTER=10#299999# THEN NEWCLK<='1'; --3MHz 信号变为100Hz ELSE NEWCLK<='0'; END IF;END PROCESS U2; END ART; 分频仿真波形:3、十进制计数器模块程序十进制计数模块程序流程图如下,使用VHDL 编写程序时,在实体中定义时钟脉冲输入端(CLK )、异步清零输入端(CLR )、启动暂停控制端(ENA )、计数脉冲输出端CQ 和计数脉冲溢出端(CARRY_OUT )。

由于CQ 的方向定义为OUT ,在结构体中不能对输入脉冲进行加1计数,因此在结构体的说明语句中应定义一个频率脉冲计数信号(CQI ),通过CQI 来进行加1控制。

相关文档
最新文档