基于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的秒表实验目的4个七段数码管分别表示十分分十秒秒当SW0为1的时候,暂停计时,进入设置。

按BTN0时秒加1,按BTN1时增加10秒按BTN2时增加1分,按BTN3时增加10分module miaobiao(clk,out,out1,control,btn);//模块名及端口input clk,control,btn;//输入端口声明output out,out1;//输出端口声明wire control;//输入控制信号是wire类型wire [3:0] btn;//四位按键reg [6:0] out1;//定义段选7位寄存器reg [3:0] out;//定义位选4位寄存器reg [31:0] count;//定义一个计数器reg [3:0] sec_l,sec_h,min_l,min_h,out2;//定义存储秒、十秒、分、十分的寄存器,还有显示寄存器供译码用;initial out1 <= 7'b0000001;//给段选赋初值,刚开始时位0000always @(posedge clk)//计数行为语句begincount = count + 1;if ((count==50000000)&&(control==0))//进行分频与控制信号的检测,控制信号为假,继续计数beginsec_l = sec_l +1;count = 0;if(sec_l==10)beginsec_l=0;sec_h = sec_h + 1;if(sec_h == 6)beginsec_h = 0;min_l = min_l + 1;if (min_l==10)beginmin_l = 0;min_h = min_h + 1;if(min_h==6)min_h = 0;endendendendelse if((count==50000000)&&(control==1))//控制信号为真,进入操作模式begincount = 0;if (btn[0]==1)beginsec_l = sec_l + 1;if (sec_l==10)sec_l = 0;endif (btn[1]==1)beginsec_h = sec_h + 1;if (sec_l==6)sec_h = 0;endif (btn[2]==1)beginmin_l = min_l + 1;if (min_l==10)min_l = 0;endif (btn[3]==1)beginmin_h = min_h + 1;if (min_h==6)min_h = 0;endendendalways @(posedge clk)//时钟扫描(动态扫描)行为语句begincase(count[15:14])2'b00:begin out <= 4'b1110; out2 <= sec_l;end//打通第一个管子的时候,把秒寄存器的值给显示寄存器,显示寄存器通过译码转换为段码2'b01:begin out <= 4'b1101; out2 <= sec_h;end2'b10:begin out <= 4'b1011; out2 <= min_l;end2'b11:begin out <= 4'b0111; out2 <= min_h;endendcaseendalways @(posedge clk)//译码行为语句,根据显示寄存器的值,译为2进制代码来赋予电平信号,打通led管begincase(out2)0:out1 <= 7'b0000001;1:out1 <= 7'b1001111;2:out1 <= 7'b0010010; 3:out1 <= 7'b0000110; 4:out1 <= 7'b1001100; 5:out1 <= 7'b0100100; 6:out1 <= 7'b0100000; 7:out1 <= 7'b0001111; 8:out1 <= 7'b0000000; 9:out1 <= 7'b0000100; endcaseendendmodule。

基于FPGA数字秒表设计

基于FPGA数字秒表设计

目录1.秒表设计要求 02.设计思路 02.1功能模块 02.1.1分频器 02.1.2计数器 02.1.3数据锁存器 02.1.4控制器 02.1.5扫描显示的控制电路 (1)2.1.6显示电路 (2)2.1.7按键消抖电路 (2)3.电路实现 (3)4.程序仿真 (9)4.1分频器 (9)4.1.1计数器电路综合 (10)4.1.2计数器电路仿真 (10)4.2同步计数器 (12)4.2.1计数器实现 (12)4.2.2计数器仿真 (14)4.2.3同步计数器电路综合 (16)4.3按键消抖电路 (17)4.3.1按键消抖电路实现 (17)4.3.2按键消抖电路仿真 (17)4.3.3按键消抖电路综合 (19)4.4八段译码器 (19)4.4.1八段译码器实现 (19)4.4.2八段译码器仿真 (20)4.4.3八段译码器电路综合 (21)4.5控制器 (22)4.5.1控制器 (22)4.5.1控制器仿真 (23)4.5.3控制器电路综合 (24)5.2View Technology Schematic : (25)5.3管脚锁定: (26)6.实验结论 (26)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电路框图实验板上的数码管为共阳LED数码管实验电路板上的按键3.电路实现---------------------------------------------------------------------------------- -- 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 downto 0):=(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 downto 0 ):=(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' and split_reset_out = '0' thensnext <= "011";else snext <= sreg;end if;when "011" => if start_stop_out = '1' and split_reset_out = '0' thensnext <= "001";elsif start_stop_out = '0' and split_reset_out = '1'then snext <= "010";else snext <= sreg;end if;when "001" => if start_stop_out = '0' and split_reset_out = '1' thensnext <= "111";elsif start_stop_out = '1' and split_reset_out = '0'then snext <= "011";else snext <= sreg;end if;when "010" => if start_stop_out = '0' and split_reset_out = '1' thensnext <= "011";else snext <= sreg;end if;when others => snext <= "111";end case;end process;end Behavioral;注:控制器设计时,巧妙地将状态编码和控制器输出的控制信号编码合二为一,即状态编码也是控制信号编码,使得程序形式上更为简单、清晰。

基于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的数字秒表设计方法摘要:文中介绍了一种基于FPGA的数字秒表设计方法。

采用VHDL硬件描述语言,运用ModelSim等EDA仿真工具。

该设计具有外围电路少、集成度高、可靠性强等优点。

最后经实验验证,该数字秒表计时准确,输入信号能准确控制秒表运行。

系统所采用的自上而下的模块化设计方法,对于其他复杂的系统设计也有很强的借鉴意义。

数字集成电路作为当今信息时代的基石,不仅在信息处理、工业控制等生产领域得到普及应用,并且在人们的日常生活中也是随处可见,极大的改变了人们的生活方式。

面对如此巨大的市场,要求数字集成电路的设计周期尽可能短、实验成本尽可能低,最好能在实验室直接验证设计的准确性和可行性,因而出现了现场可编程逻辑门阵列FPGA。

对于芯片设计而言,FPGA的易用性不仅使得设计更加简单、快捷,并且节省了反复流片验证的巨额成本。

对于某些小批量应用的场合,甚至可以直接利用FPGA实现,无需再去订制专门的数字芯片。

文中着重介绍了一种基于FPGA利用VHDL硬件描述语言的数字秒表设计方法,在设计过程中使用基于VHDL的EDA工具ModelSim对各个模块仿真验证,并给出了完整的源程序和仿真结果。

1 总体功能结构设计一个完整的数字秒表应具有计时、相应的控制以及计时结果显示功能,总体的功能结构如图1所示。

黑色线框内是计数模块、使能转化模块和显示译码模块,左边是输入控制信号,右边是显示计时结果的数码显示管,用六位BCD七段数码管显示读数,显示格式如图2,计时范围为:1小时,精度为0.01s。

输入时钟信号由32MHz的石英晶振提供,考虑到设计指标要求秒表精度为0.01秒,计数脉冲的时钟输入就应该是频率为100Hz的脉冲,所以先要设计一个320000分频器,分频器的输出可作计数器的输入;其次计数模块设计应综合考虑秒表的计时范围(1小时) 和显示输出(6位输出),6位输出中有两位是六进制输出,其余四位是十进制输出,所以。

基于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数字秒表设计报告

标准实验报告实验项目:基于FPGA数字秒表设计毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。

尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。

对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。

作者签名:日期:指导教师签名:日期:使用授权说明本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。

作者签名:日期:学位论文原创性声明本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。

除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。

对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。

本人完全意识到本声明的法律后果由本人承担。

作者签名:日期:年月日学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。

本人授权大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。

涉密论文按学校规定处理。

作者签名:日期:年月日导师签名:日期:年月日注意事项1.设计(论文)的内容包括:1)封面(按教务处制定的标准封面格式制作)2)原创性声明3)中文摘要(300字左右)、关键词4)外文摘要、关键词5)目次页(附件不统一编入)6)论文主体部分:引言(或绪论)、正文、结论7)参考文献8)致谢9)附录(对论文支持必要时)2.论文字数要求:理工类设计(论文)正文字数不少于1万字(不包括图纸、程序清单等),文科类论文正文字数不少于1.2万字。

eda课程设计基于fpga秒表电路设计

eda课程设计基于fpga秒表电路设计

一、概述EDA(Electronics Design Automation)是电子设计自动化的缩写,是一种利用计算机技术对电子系统进行设计的方法。

FPGA(Field Programmable Gate Array)是一种可编程逻辑器件,可以根据设计要求对硬件电路进行重新编程。

秒表电路是一种常见的数字电路,可以用于测量时间间隔。

本篇文章将基于EDA课程设计,利用FPGA进行秒表电路设计的研究和探讨。

二、背景知识在进行本课程设计之前,需要了解以下一些基本的背景知识:1. EDA技术:EDA技术是一种利用计算机辅助进行电子设计的方法,包括了电路仿真、综合、布局布线等一系列的设计流程。

在本课程设计中,将会使用EDA技术来进行秒表电路的设计和验证。

2. FPGA技术:FPGA是一种可编程的逻辑器件,可以根据设计的需要进行重编程,灵活性很高。

在本课程设计中,将会使用FPGA来实现秒表电路的硬件设计。

3. 秒表电路:秒表电路是一种数字电路,可以用来实现时间的计时和显示功能。

在本课程设计中,将会对秒表电路的设计进行详细讨论。

三、课程设计目标本课程设计的主要目标是使用EDA技术和FPGA技术,设计并验证一个基于FPGA的秒表电路。

具体目标包括:1. 学习和掌握EDA软件的使用方法,包括电路设计、仿真验证等功能。

2. 熟悉FPGA的工作原理和编程方法,能够进行FPGA的硬件设计。

3. 设计并验证一个完整的秒表电路,包括计时功能、显示功能等。

四、课程设计步骤本课程设计将分为以下几个步骤进行:1. 学习EDA软件的基本操作:首先需要学习和掌握EDA软件的基本操作方法,包括电路设计、综合、布局布线、仿真验证等功能。

这一步是为了为后续的秒表电路设计和验证做好准备。

2. 学习FPGA的编程方法:其次需要了解FPGA的工作原理和编程方法,包括FPGA的硬件描述语言、开发工具的使用等。

这一步是为了进行秒表电路的硬件设计做好准备。

基于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的数字秒表的设计与实现

4.5.1 模块描述 ................................................................................................................................. 19 4.5.2 模块仿真 ................................................................................................................................. 20 4.6 显示模块设计 ................................................................................................................................ 21 4.6.1 模块描述 ................................................................................................................................. 21 4.6.2 模块仿真 ................................................................................................................................. 23 4.7 按键消抖模块设计....................................................................................................................... 24 4.7.1 模块描述 ................................................................................................................................. 24 4.7.2 模块仿真 ................................................................................................................................. 24 4.8 数码管简介(七段数码管) ................................................................................................... 26 第5章 实验项目系统电路设计 ....................................................................................................... 27

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

由分析可知,秒表可分为三个部分,六十进制计数器,状态装换及锁存器组成。

其实试验程序如下所示:LIBRARY IEEE; --状态转换USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY MB ISPORT(CLK0,CLK2,RST,START,STOP,LAPE:IN STD_LOGIC;Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END ENTITY MB;ARCHITECTURE behave OF MB ISTYPE states IS(st0,st1,st2,st3);SIGNAL current_state,next_state:states;SIGNAL C1,C0:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL D:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL EN,GT:STD_LOGIC;BEGINREG:PROCESS(CLK0) --状态机BEGINIF CLK0'EVENT AND CLK0='1' THENcurrent_state<=next_state;END IF;END PROCESS REG;COM:PROCESS(current_state)BEGINCASE current_state ISWHEN st0 =>EN<='0';GT<='0';IF START='1'THENnext_state<=st1;ELSEnext_state<=st0;END IF;WHEN st1 => EN<='1';GT<='0';IF STOP='1'THENnext_state<=st2;ELSIF RST='1' THENnext_state<=st0;ELSIF LAPE='1' THENnext_state<=st3;ELSEnext_state<=st1;END IF;WHEN st2 =>EN<='0';GT<='0';IF START='1' THENnext_state<=st1;ELSIF RST='1' THENnext_state<=st0;ELSEnext_state<=st2;END IF;WHEN st3 =>EN<='1';GT<='1';IF RST='1' THENnext_state<=st0;ELSIF START='1' THENnext_state<=st1;ELSIF STOP='1' THENnext_state<=st2;ELSEnext_state<=st3;END IF;WHEN OTHERS =>next_state<=st0;END CASE;END PROCESS COM;CNT:PROCESS(CLK2,EN,RST) --六十进制计数器BEGINIF RST='1' THENC1<="0000";C0<="0000";ELSIF EN='1' THENIF CLK2'EVENT AND CLK2='1' THENIF C0="1001" THENC0<="0000";IF C1="0101" THENC1<="0000";ELSE C1<=C1+1;END IF;ELSE C0<=C0+1;END IF;END IF;END IF;END PROCESS CNT;GATA:PROCESS(LAPE) --锁存BEGINIF LAPE'EVENT AND LAPE='1' THEND<=C1&C0;END IF;END PROCESS GATA;WITH GT SELECTQ<= C1&C0 WHEN '0',D WHEN '1';END ARCHITECTURE behave;四,实验仿真结果:程序编译后,可进行仿真,其复位开始及暂停仿真图如图8-2所示:图 8-2 复位开始及暂停仿真图Lape功能的仿真如图8-3 所示图 8-3 lape功能仿真图通过时序仿真后,就可以进行管脚锁定,最后下载到试验箱进行验证,观察到实验结果符合本实验的四个设计要求。

基于FPGA的数字秒表的设计

基于FPGA的数字秒表的设计

基于FPGA的数字秒表的设计
应用语言设计数字系统,无数设计工作可以在计算机上完成,从而缩短了系统的开发时光,提高了工作效率。

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

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

系统框图1所示。

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

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

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

系统时光
可以同单独的至零信号,将数码管显示时光挺直复原到00.0O状态。

2 模块功能设计及仿真
2.1 分频模块
开发板提供的系统时钟为50 MHz,通过分频模块3次分频,将系统的
第1页共3页。

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

数字秒表设计
一、实验目的
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分频的)。

相关文档
最新文档