数电自主设计实验报告——Verilog秒表

合集下载

用Verilog HDL语言编写的电子秒表

用Verilog  HDL语言编写的电子秒表

module jian_kong(rest,kon,clk001,clk001out);//开始与暂停按键的控制电路 input rest; input kon; input clk001; output clk001out; wire k; wire d; assign d=~k; assign clk001out=k&clk001; D_FF D_FF0(rest,kon,d,k); endmodule module D_FF(rest,clk,d,q); input rest; input clk; input d; output q; reg q; always@(posedge rest or posedge clk) if(rest==1'b1) begin q<=1'b0; end else begin q<=d; end endmodule //到此程序全部结实
Module shumaguan(a_to_g,A_TO_D,clk,qian,bai,shi,ge);//数码管驱动 output reg [6:0]a_to_g; output reg [3:0]A_TO_D; input wire clk; input wire [3:0]qian; input wire [3:0]bai; input wire [3:0]shi; input wire [3:0]ge; reg [3:0]duan; reg [1:0]wei; reg a; reg [16:0]q; always@(posedge clk) begin if(q==49999) begin q<=0; a<=~a; end else q<=q+1; end
always@(*)//4位位选译码 case(wei) 3:begin A_TO_D=4'b1110; duan=qian; end 2:begin A_TO_D=4'b1101; duan=bai; end 1:begin A_TO_D=4'b1011; duan=shi; end 0:begin A_TO_D=4'b0111; duan=ge; end default:A_TO_D=4'b1110; endcase always@(posedge a)//四个状态循环 if(wei==3) wei<=0; else wei<=wei+1; endmodule //到此数码管驱动模块结束

verilog实验报告

verilog实验报告

verilog实验报告Verilog实验报告引言:Verilog是一种硬件描述语言(HDL),用于设计和模拟数字电路。

它是一种高级语言,能够描述电路的行为和结构,方便工程师进行数字电路设计和验证。

本实验报告将介绍我在学习Verilog过程中进行的实验内容和所获得的结果。

实验一:基本门电路设计在这个实验中,我使用Verilog设计了基本的逻辑门电路,包括与门、或门和非门。

通过使用Verilog的模块化设计,我能够轻松地创建和组合这些门电路,以实现更复杂的功能。

我首先创建了一个与门电路的模块,定义了输入和输出端口,并使用逻辑运算符和条件语句实现了与门的功能。

然后,我创建了一个测试模块,用于验证与门的正确性。

通过输入不同的组合,我能够验证与门的输出是否符合预期。

接下来,我按照同样的方法设计了或门和非门电路,并进行了相应的测试。

通过这个实验,我不仅学会了使用Verilog进行基本门电路的设计,还加深了对逻辑电路的理解。

实验二:时序电路设计在这个实验中,我学习了如何使用Verilog设计时序电路,例如寄存器和计数器。

时序电路是一种具有状态和时钟输入的电路,能够根据时钟信号的变化来改变其输出。

我首先设计了一个简单的寄存器模块,使用触发器和组合逻辑电路实现了数据的存储和传输功能。

然后,我创建了一个测试模块,用于验证寄存器的正确性。

通过输入不同的数据和时钟信号,我能够观察到寄存器的输出是否正确。

接下来,我设计了一个计数器模块,使用寄存器和加法电路实现了计数功能。

我还添加了一个复位输入,用于将计数器的值重置为初始状态。

通过测试模块,我能够验证计数器在不同的时钟周期内是否正确地进行计数。

通过这个实验,我不仅学会了使用Verilog设计时序电路,还加深了对触发器、寄存器和计数器的理解。

实验三:组合电路设计在这个实验中,我学习了如何使用Verilog设计组合电路,例如多路选择器和加法器。

组合电路是一种没有状态和时钟输入的电路,其输出只取决于当前的输入。

数电自主设计实验报告——Verilog秒表

数电自主设计实验报告——Verilog秒表

姓名班级学号实验日期节次教师签字成绩基于BASYS2开发板的记忆秒表设计一、实验目的1、熟悉基于Verilog HDL语言输入方式的数字电路的设计方法。

2、掌握基于FPGA的设计流程。

3、熟悉BASYS2开发板的使用方法。

4、熟悉Xilinx ISE软件的使用方法。

5、培养自己独立自主设计并完成实验的能力。

二、总体设计方案或技术路线本实验利用BASYS2开发板的已有资源来进行设计实验,并用Xilinx ISE软件来编写和综合Verilog代码。

总体设计方案是设计一个带有记忆功能的秒表。

具体而言,该秒表通过BASYS2开发板的50M的时钟进行分频计时,最大计时时间为99.99s,用4位数码管动态显示计时时间,除了有基本的运行、暂停及复位清空功能,还有存储当前时间和查看存储时间的功能。

三、实验电路图BASYS2开发板原理图--数码管板上数码管为4位共阳极数码管,每段为低电平点亮,位选接了三极管增大驱动电流,同时为非逻辑,所以位选信号为低电平有效。

BASYS2开发板原理图--按键本实验用到了两个按键BTN0和BTN1,BTN0为复位按键,对应程序的clear信号,BTN1为存储按键,对应程序的btn[1]信号,按一次该按键数据存储一次,下一次按下时这一次存的数据将被替换掉。

BASYS2开发板原理图--开关本实验用到了两个开关SW7和SW1,SW7为运行、暂停开关,对应程序的sw[0]信号,开关打到上方为运行,下方为暂停,SW1为显示切换开关,对应程序的sw[1]信号,在计时暂停的前提下,将开关打到上方显示出存储的时间数据。

四、仪器设备名称、型号和技术指标硬件:BASYS2开发板软件:Xilinx ISE(编程)、Digilent Adept(下载)五、程序流程图六、程序源代码/////////////////////////////////////////////////////////程序文件`timescale 1ns / 1ps////////////////////////////////////////////////////////////////////////////////// // Company:// Engineer://// Create Date: 15:45:01 11/26/2014// Design Name:// Module Name: miaobiao// Project Name:// Target Devices:// Tool versions:// Description://// Dependencies://// Revision:// Revision 0.01 - File Created// Additional Comments://///////////////////////////////////////////////////////////秒表的顶层模块module miaobiao(input wire clk,///////////////////////////////开发板系统时钟50MHzinput wire[1:0] btn,////////////////////////两个按键:[0]复位和[1]存时间input wire[1:0] sw,/////////////////////////两个开关:[0]运行/暂停和[1]显示存储时间output wire[7:0] smg,/////////////////////数码管的8个段选信号output wire[3:0] smg_an/////////////////数码管的4个位选信号);wire clear;assign clear=btn[0];////////////////////////////////////将复位按键信号传给clear变量wire clk_1k;clkdiv #(50000) m0(clk,clear,clk_1k);//将50MHz进行5万分频输出1kHz时钟信号wire[15:0]number;timer m1(sw[0]&clk_1k,clear,number);///////////计时器模块,输出当前时间数据wire[15:0]num_save;save m2(clk,clear,btn[1],number,num_save);//////按键按下存储当前时间wire[15:0]num_display;/////////////////////////////////////////////////////////////////////////////根据开关状态选择显示内容choose_4num m3(sw,number,num_save,num_display);display m4(clk_1k,clear,num_display,smg,smg_an);///////将数字送给数码管显示endmodule///////////////////////////////////////////////////////////////////////////////4选1数据选择器模块module choose_4num(input wire[1:0]sw,input wire[15:0]number,input wire[15:0]num_save,output reg[15:0]num_display);always@(*)case(sw)0:num_display<=number;/////////////显示内容为当前时间1:num_display<=number;/////////////。

vhdl秒表报告

vhdl秒表报告

实验:vhdl秒表设计报告一、实验目的:秒表的逻辑结构比较简单,它主要由、显示译码器、分频器、十进制计数器、六进制计数器组成。

秒表实现功能:计时范围60s。

可以用4个键(k0-k3)控制计数器实现清零,开始,暂停,结束功能。

清零键k0:当k0按下后,计数器清零,显示为0.开始键k1:k1按下后,开始计数暂停键k2:k2按下后,显示暂停,但计数器继续在行走。

结束键k3:k3按下后,计数器停止,显示最终的时间。

二、结构组成:1、一个十进制计数器:用来对秒时钟进行计数;2、一个六进制计数器:用来分别对十秒进行计数;3、分频率器:用来产生1hz的计数脉冲;4、状态控制器:对秒表各状态的控制。

设计为4个状态s1,s2,s3,s4.三、实验内容及步骤:1、用vhdl语言实现各小功能模块设计。

并仿真无误,生成模块符号。

2、设计顶层原理图文件。

3、综合编译并仿真,实现特定功能。

4、下载到硬件上,确保设计的正确。

四、实验源代码如下:1,分频器模块:功能:产生秒时钟。

原理图如下源代码vhdl语言如下:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity div isport(inclk:in std_logic;outclk:out std_logic:='0');end;architecture behave of div issignal temp:integer range 0 to 99999;signal internal:std_logic:='0';beginprocess(inclk)beginif inclk'event and inclk='1'thenif temp=10thentemp<=0;internal<=not internal;else temp<=temp+1;end if;outclk<=internal;end if;end process;end behave;2,十进制计数器模块原理图:十进制vhdl源码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt10 isport(clk,clr,en:in std_logic;q:buffer std_logic_vector(3 downto 0);c10:out std_logic);end;architecture behave of cnt10 isbeginprocess(clr,clk)beginif clr='0'then q<="0000";elsif clk'event and clk='1'thenif en='1'thenif q<9else q<="0000";end if;end if;end if;end process;process(q)beginif q="0000"then c10<='1';else c10<='0';end if;end process;end;3,六进制计数模块原理图源代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt6 isport(clk,clr,en:in std_logic;q:buffer std_logic_vector(2 downto 0);c6:out std_logic);end;architecture behave of cnt6 isbeginprocess(clr,clk)beginif clr='0'then q<="000";elsif clk'event and clk='1'thenif en='1'thenif q<5else q<="000";end if;end if;end if;end process;process(q)beginif q="000"then c6<='1';else c6<='0';end if;end process;end;4,十进制锁存原理图:代码:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity suo isport(inp:in std_logic_vector(3 downto 0);suo:in std_logic;--stop:in std_logic;clr:in std_logic;outp:out std_logic_vector(3 downto 0)); end;architecture behave of suo issignal temp:std_logic_vector(3 downto 0);signal temp1:std_logic_vector(3 downto 0); beginprocess(suo)beginif suo'event and suo='0'then temp<=inp;end if;end process;process(inp,clr)beginif clr='0' then outp<="0000";elsif suo='1' then outp<=inp;else outp<=temp;end if;end process;end behave;5,六进制锁存原理图:Vhdl语言:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity suo6 isport(inp:in std_logic_vector(2 downto 0);suo:in std_logic;clr:in std_logic;clk:in std_logic;outp:out std_logic_vector(3 downto 0)); end;architecture behave of suo6 issignal temp:std_logic_vector(3 downto 0); beginprocess(suo)beginif suo'event and suo='0'then temp<='0'&inp; --temp1<=temp;end if;end process;process(clr,clk)beginif clr='0' then outp<="0000";elsif clk'event and clk='1'thenif suo='1' then outp<='0'&inp;else outp<=temp;end if;end if;end process;end behave;6,状态机控制器原理图:Vhdl语言:library ieee;use ieee.std_logic_1164.all;entity key isport(clk:in std_logic;k:in std_logic_vector(3 downto 0);suo:out std_logic;clr:out std_logic;--stop:out std_logic;en:out std_logic);--_vector(2 downto 0)); end;architecture behave of key istype statetype is (s0,s1,s2,s3);signal state:statetype:=s0;beginprocess(clk)beginif clk'event and clk='1'thencase state iswhen s0=> if k(1)='0'then state <=s1;else state <=s0;end if;when s1=> if k(0)='0'then state <=s0;elsif k(2)='0' then state <=s2;elsif k(3)='0' then state <=s3;else state <=s1;end if;when s2=> if k(1)='0'then state <=s1;elsif k(3)='0' then state <=s3;else state <=s2;end if;when s3=> if k(0)='0'then state <=s0;else state <=s3;end if;when others=>null;end case;end if;end process;process(clk)beginif clk'event and clk='1'thencase state iswhen s0=> en<='0'; suo<='0'; clr<='0';when s1=> en<='1'; suo<='1'; clr<='1';when s2=> en<='1'; suo<='0'; clr<='1';when s3=> en<='0'; suo<='1'; clr<='1';when others=> null;end case;end if;end process;end;五,顶层原理图文件:六,仿真结果结果分析:k0为0时,清零初始化。

基于verilog语言编程的数字秒表设计

基于verilog语言编程的数字秒表设计

数字秒表设计系别:电子通信工程系专业:电子信息工程班级:学号:姓名:数字秒表(基于verilong语言编程)课程设计一、设计要求用verilong语言编写程序,结合实际电路,设计一个4位LED数码显示“秒表”,显示时间为99.9~00.0秒,每秒自动减一,精度为0.1。

另设计一个“开始”按键和一个“复位”按键。

再增加一个“暂停”按键。

按键说明:按“开始”按键,开始计数,数码管显示从99.9开始每秒自动减一;按“复位”按键,系统复位,数码管显示99.9;按“暂停”按键,系统暂停计数,数码管显示当时的计数。

二、设计目的1、通过本次课程设计加深对verilong语言课程的全面认识、复习和掌握,对EPM7064芯片的应用达到进一步的了解。

2、掌握定时器、外部中断的设置和编程原理。

3、通过此次课程设计能够将软硬件结合起来,对程序进行编辑,调试。

使其能够通过电脑下载到芯片,正常工作。

4、实际操作Quartus II软件,复习巩固以前所学知识。

三、总体设计本秒表系统具有复位、暂停、秒表计时等功能。

clk为系统工作时钟,采用Altera DE2上的50M时钟信号,经过分频器产生秒表计时周期为0.01s的时钟,再经过计数器,分别对秒表的百分位、十分位、秒、秒十位、分、分十位进行计数。

onoff为启动/暂停控制信号,当它为0时,启动计时,当它为1时,计时暂停。

clr为复位信号,当该信号有效时,计数器和译码清零,此时数码管显示输出为00:00:00。

在总体电路图中,根据设计要求,需要两个输入控制信号onoff和clr。

由于开发板上除了拨动开关就是瞬时的按键开关,且按键开关平时都呈高电平,按一下为低电平。

故在实际测试时采用了拨动开关SW0来控制秒表的启动/暂停,通过KEY0来控制秒表的清零。

四、设计思路描述该实验要求进行计时并在数码管上显示时间,通过相关软件Quartus II编译,利用JTAG 下载电路到核心芯片,驱动硬件工作。

秒表vhdl

秒表vhdl

EDA实验报告秒表一、实验目的实现秒表功能, 要求有分,秒,1%秒显示.二、实验原理:一百进制的十毫秒,分计数器和六十进制的秒计数器;以及十毫秒,秒,分的译码显示部分。

输入:p_clk 100Hz 基准时钟输入IO30p_rst 复位输入IO41p_ena 秒表启/停IO40输出:s100l 1%秒低位显示IO08..IO11 s100h 1%秒高位显示IO12..IO15 s1l 秒低位显示IO16..IO19 s1h 秒高位显示IO20..IO22 m1l 分低位显示IO32..IO35 m1h 分高位显示IO36..IO38三、试验仪器EDA试验箱、PC机四、试验步骤1破解软件2、新建工程3、程序输入及编译新建文件并输入程序并进行编译。

LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY EX18 ISPORT (p_clk: IN STD_LOGIC; -- 100Hz -- IO30(P125)p_rst: IN STD_LOGIC; -- IO41(P119)p_ena: IN STD_LOGIC; -- IO40(P118)s100l: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); -- IO11..IO08 (P59, P51, P49, P48) s100h: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); -- IO15..IO12 (P64, P63, P62, P60) s1h : OUT STD_LOGIC_VECTOR(2 DOWNTO 0); -- IO22..IO20 (P73, P72, P70)s1l : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); -- IO19..IO16 (P69, P68, P67, P65) m1h : OUT STD_LOGIC_VECTOR(2 DOWNTO 0); -- IO38..IO36 (P116, P114, P113)m1l : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) -- IO35..IO32 (P112, P111, P110, P109) );END EX18;ARCHITECTURE behv OF EX18 ISSIGNAL clks10 : STD_LOGIC;SIGNAL clks1 : STD_LOGIC;SIGNAL clk10s : STD_LOGIC;SIGNAL clk1m : STD_LOGIC;SIGNAL clk10m : STD_LOGIC;COMPONENT cnt10PORT (clk : IN STD_LOGIC;rst : IN STD_LOGIC;ena : IN STD_LOGIC;outy: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); cout: OUT STD_LOGIC);END COMPONENT;COMPONENT cnt6PORT (clk : IN STD_LOGIC;rst : IN STD_LOGIC;ena : IN STD_LOGIC;outy: OUT STD_LOGIC_VECTOR(2 DOWNTO 0); cout: OUT STD_LOGIC);END COMPONENT;BEGINu_s100l:cnt10 PORT MAP (clk => p_clk ,rst => p_rst ,ena => p_ena ,outy => s100l ,cout => clks10);u_s100h:cnt10 PORT MAP (clk => clks10,rst => p_rst ,ena => p_ena , outy => s100h , cout => clks1 );u_s1l:cnt10 PORT MAP ( clk => clks1 , rst => p_rst , ena => p_ena , outy => s1l , cout => clk10s );u_s1h:cnt6 PORT MAP ( clk => clk10s, rst => p_rst , ena => p_ena , outy => s1h , cout => clk1m );u_m1l:cnt10 PORT MAP ( clk => clk1m , rst => p_rst , ena => p_ena , outy => m1l , cout => clk10m );u_m1h:cnt6 PORT MAP ( clk => clk10m, rst => p_rst , ena => p_ena , outy => m1h );END behv;4、时序仿真打开波形编辑器,设置仿真时间区域仿真结果RLT电路cl k ena rstcout out y 30cl k ena rstcout out y 30cl k ena rstcout out y 30cl k ena rstcout out y 20cl k ena rstcout out y 30cl k ena rstout y 20cnt 6:u _s1hs100l [3.0]s1h[2.0]s1l [3.0]m1h[2.0]m1l [3.0]cnt 10:u _s1lp_rstp_ena cnt 10:u _s100ls100h[3.0]cnt 6:u _m1hp_cl k cnt 10:u _s100hcnt 10:u _m1l5、管脚分配与锁定程序通过编译成功后,根据模式18电路的连接方法,出现如下界面:六、配置文件下载连接好试验线路,打开电源开关。

秒表计时电路设计verilog

秒表计时电路设计verilog

电子科技大学通信学院秒表计时电路实验报告班级通信一班学生学号教师秒表计时电路秒表计时电路一、设计思路概述1.设计要求秒表计时功能,显示分、秒、0.01秒具有启动、暂停、停止和清空功能增加有趣的流水灯输入信号:4bit按键,50MHz时钟输出信号:6位数码管2.设计分析本设计要求秒表计时功能,显示分、秒、0.01秒,而这可以由分频电路实现,将电路的输入时钟进行分频,得到1/60Hz,1Hz,和100Hz信号,就可以达到本设计要求的显示要求了。

本设计要求具有启动、暂停、停止和清空功能,而这个可以由状态机实现,通过合理的配置状态转换,就可以达到要求。

流水灯的实现说来简单,其实也可以做的复杂,漂亮的流水灯其观赏性还是很好地,这里我们只讨论简单流水灯的实现,即单个灯从左到右逐步发光。

这实际是一个移位寄存器,我们可以通过不同的时钟来驱动它,实现不同的流水速度。

这里,我们实现了一个1Hz,和一个10Hz的流水灯电路。

二、总体设计框图及详细说明三、各部分代码设计1、500000进制计数器(分频器)设计:always @(negedge clk or negedge rst10ms)beginif (~rst10ms) beginclk10ms<=0;clk10msreg<=0;endelse if (clk10msreg == 249999) beginclk10ms<=~clk10ms ;clk10msreg<=clk10msreg+1;endelse if (clk10msreg==499999) beginclk10ms<=~clk10ms;clk10msreg<=0;endelse begin clk10msreg<=clk10msreg+1;endend2、状态机设计always @(negedge clk or negedge clear) beginif (~clear) beginstate <= idlestate; rst <= 0; rst10ms <= 0;endelse begincase (state)idlestate: beginif(~start)beginstate<= prestate; rst<=0;rst10ms<=0;endelsestate<=idlestate; endprestate: beginstate<=runstate;rst<=1;rst10ms<=1;endholdstate: beginif(~stop)beginstate<=idlestate; rst<=1;rst10ms<=0;endelse if(~start)beginstate<= runstate; rst<=1;rst10ms<=1;endelsestate<=holdstate; endrunstate: beginif(~stop)beginstate<=idlestate; rst<=1;rst10ms<=0;endelse if(~hold)beginstate<= holdstate; rst<=1;rst10ms<=0;endelsestate<=runstate;enddefault: state <= state;endcaseendend3.10进制计数器(分频器)设计module count10(rst, clk, clkout, counter);input rst;input clk;output reg clkout;output reg [3:0]counter;always @(negedge clk or negedge rst) beginif (~rst) begin clkout<=0;counter<=0;endelse if (counter == 4) begin clkout<=~clkout;counter<=counter+1; endelse if (counter == 9) begin clkout<=0;counter<=0; endelse begin counter<=counter+1;endendendmodule4、6进制计数器(分频器)设计module count6(rst, clk, clkout, counter);input rst;input clk;output reg clkout;output reg [3:0]counter;always @(negedge clk or negedge rst) beginif (~rst) beginclkout <= 0;counter <= 0;endelse if (counter == 2) beginclkout <= ~clkout;counter <= counter + 4'b1;endelse if (counter == 5) beginclkout <= ~clkout;counter <= 0;endelse begincounter <= counter + 4'b1;endendendmodule5、流水灯设计always @(negedge clk1s or negedge rst)beginif (~rst)ledg <= 8'b0;else if (ledg == 8'b0)ledg<=8'b10000000;elseledg<=(ledg>>1);endalways @(negedge clk100ms or negedge rst) beginif (~rst)ledr <= 18'b0;else if (ledr == 18'b0)ledr<=18'b100000000000000000;elseledr<=(ledr>>1);end6、显示译码电路设计always @(negedge clk or negedge rst) begin if (~rst) begindisplayreg <= 3'b000;segcode[0] <= 7'b1111111;segcode[1] <= 7'b1111111;segcode[2] <= 7'b1000000;segcode[3] <= 7'b1000000;segcode[4] <= 7'b1000000;segcode[5] <= 7'b1000000;segcode[6] <= 7'b1000000;segcode[7] <= 7'b1000000;endelse begincase (timeout[displayreg])0: segcode[displayreg] <= 7'b1000000;1: segcode[displayreg] <= 7'b1111001;2: segcode[displayreg] <= 7'b0100100;3: segcode[displayreg] <= 7'b0110000;4: segcode[displayreg] <= 7'b0011001;5: segcode[displayreg] <= 7'b0010010;6: segcode[displayreg] <= 7'b0000010;7: segcode[displayreg] <= 7'b1011000;8: segcode[displayreg] <= 7'b0000000;9: segcode[displayreg] <= 7'b0010000;default: segcode[displayreg] <= 7'b1111111;endcasedisplayreg <= displayreg + 3'b1;endend四、总体电路设计module today(key, ledr, ledg, hex, clk);input [3:0] key;input clk;output reg [17:0] ledr;output reg [7:0] ledg;output [55:0] hex;wire clear;wire start;wire stop;wire hold;assign clear = key[0];assign start = key[1];assign stop = key[2];assign hold = key[3];reg [19:0] clk10msreg;reg clk10ms;wire clk100ms;wire clk1s;wire clk10s;wire clk1min;wire clk10min;wire clk1h;reg [1:0] state;parameter idlestate = 2'b00, prestate = 2'b01, holdstate = 2'b10, runstate = 2'b11;reg rst;reg rst10ms;reg [2:0] displayreg;wire [3:0] timeout [7:0];reg [6:0] segcode[7:0];assign hex = {segcode[7], segcode[6], segcode[5], segcode[4], segcode[3], segcode[2], segcode[1], segcode[0]};always @(negedge clk or negedge clear) beginif (~clear) beginstate <= idlestate; rst <= 0; rst10ms <= 0;endelse begincase (state)idlestate: beginif(~start)beginstate<= prestate;rst<=0;rst10ms<=0;endelsestate<=idlestate;endprestate: beginstate<=runstate;rst<=1;rst10ms<=1;endholdstate: beginif(~stop)beginstate<=idlestate;rst<=1;rst10ms<=0;endelse if(~start)beginstate<= runstate;rst<=1;rst10ms<=1;endelsestate<=holdstate;endrunstate: beginif(~stop)beginstate<=idlestate;rst<=1;rst10ms<=0;endelse if(~hold)beginstate<= holdstate;rst<=1;rst10ms<=0;endelsestate<=runstate;enddefault: state <= state;endcaseendendalways @(negedge clk or negedge rst10ms)beginif (~rst10ms) beginclk10ms<=0;clk10msreg<=0;endelse if (clk10msreg == 249999) beginclk10ms<=~clk10ms ;clk10msreg<=clk10msreg+1;endelse if (clk10msreg==499999) beginclk10ms<=~clk10ms; clk10msreg<=0;endelse begin clk10msreg<=clk10msreg+1;endendcount6 min10counter(rst, clk10min, clk1h, timeout[7]); count10 min1counter (rst, clk1min,clk10min, timeout[6]); count6 sec10counter(rst, clk10s,clk1min, timeout[5]); count10 sec1counter (rst, clk1s, clk10s, timeout[4]); count10 ms100counter(rst, clk100ms, clk1s, timeout[3]); count10 ms10counter (rst, clk10ms, clk100ms, timeout[2]); assign timeout[1] = 4'b1111;assign timeout[0] = 4'b1111;always @(negedge clk or negedge rst) beginif (~rst) begindisplayreg <= 3'b000;segcode[0] <= 7'b1111111;segcode[1] <= 7'b1111111;segcode[2] <= 7'b1000000;segcode[3] <= 7'b1000000;segcode[4] <= 7'b1000000;segcode[5] <= 7'b1000000;segcode[6] <= 7'b1000000;segcode[7] <= 7'b1000000;endelse begincase (timeout[displayreg])0: segcode[displayreg] <= 7'b1000000;1: segcode[displayreg] <= 7'b1111001;2: segcode[displayreg] <= 7'b0100100;3: segcode[displayreg] <= 7'b0110000;4: segcode[displayreg] <= 7'b0011001;5: segcode[displayreg] <= 7'b0010010;6: segcode[displayreg] <= 7'b0000010;7: segcode[displayreg] <= 7'b1011000;8: segcode[displayreg] <= 7'b0000000;9: segcode[displayreg] <= 7'b0010000;default: segcode[displayreg] <= 7'b1111111;endcasedisplayreg <= displayreg + 3'b1;endendalways @(negedge clk1s or negedge rst)beginif (~rst)ledg <= 8'b0;else if (ledg == 8'b0)ledg<=8'b10000000;elseledg<=(ledg>>1);endalways @(negedge clk100ms or negedge rst) beginif (~rst)ledr <= 18'b0;else if (ledr == 18'b0)ledr<=18'b100000000000000000;elseledr<=(ledr>>1);endendmodulemodule count6(rst, clk, clkout, counter);input rst;input clk;output reg clkout;output reg [3:0]counter;always @(negedge clk or negedge rst) begin if (~rst) beginclkout <= 0;counter <= 0;endelse if (counter == 2) beginclkout <= ~clkout;counter <= counter + 4'b1;endelse if (counter == 5) beginclkout <= ~clkout;counter <= 0;endelse begincounter <= counter + 4'b1;endendendmodulemodule count10(rst, clk, clkout, counter);input rst;input clk;output reg clkout;output reg [3:0]counter;always @(negedge clk or negedge rst) beginif (~rst) begin clkout<=0;counter<=0;endelse if (counter == 4) begin clkout<=~clkout;counter<=counter+1; endelse if (counter == 9) begin clkout<=0;counter<=0; endelse begin counter<=counter+1;endendendmodule五、总结及心得体会通过这次试验,我们基本掌握了状态机的实现方法,进一步熟悉和掌握了Verilog HDL的基本使用方法。

verilog实验报告流水灯数码管秒表交通灯

verilog实验报告流水灯数码管秒表交通灯

流水灯实验目的:在basys2开发板上实现LED灯的花样流水的显示,如隔位显示,依次向左移位显示,依次向右移位显示,两边同时靠中间显示。

实验仪器:FPGA开发板一块,计算机一台。

实验原理:当一个正向的电流通过LED时,LED就会发光。

当阳极的电压高于阴极的电压时,LED就会有电流通过。

当在LED上增添一个典型值为1.5V—2.0V之间的电压时,LED就会有电流通过并发光。

实验内容:顶层模块:输入信号:clk_50MHz(主时钟信号),rst(重置信号),输出信号:[7:0] led(LED灯控制信号)。

module led_top(clkin,rst,led_out);input clkin, rst;output [7:0] led_out;wire clk_1hz;divider_1hz d0(clkin, rst, clk_1hz);led l0(clk_1hz, rst, led_out);endmodule分频模块:module divider_1hz(clkin,rst,clkout);input clkin,rst;output reg clkout;reg [24:0] cnt;always@(posedge clkin, posedge rst)beginif(rst) begincnt<=0;clkout<=0; endelse if(cnt==24999999) begincnt<=0;clkout=!clkout; endelse cnt<=cnt+1;endendmodule亮灯信号模块:module led(clkin,rst,led_out);input clkin,rst;output [7:0] led_out;reg [2:0] state;always@(posedge clkin, posedge rst)if(rst) state<=0;else state<=state+1;always@(state)case(state)3'b000:ledout<=8'b0000_0001;3'b001:ledout<=8'b0000_0010;3'b010:ledout<=8'b0000_0100;3'b011:ledout<=8'b0000_1000;3'b100:ledout<=8'b0001_0000;3'b101:ledout<=8'b0010_0000;3'b110:ledout<=8'b0100_0000;3'b111:ledout<=8'b1000_0000;endcaseendmodule实验中存在的问题:1 芯片选择问题automotive spartan3EXA3S100E XA3S250E CPG132spartan3EXC3S100E XC3S250E CP1322 时序逻辑部分,阻塞赋值和非阻塞赋值混用always@(posedge clk)begina=b+c;d<=e+f;end3 UCF文件格式错误NET “CLK” LOC = “B8”;NET “a” LOC = “N11”;NET “b” LOC = “G13”;NET “c[0]”LOC =“K11;数码管实验目的:设计一个数码管动态扫描程序,实现在四位数码管上动态循环显示“1”、“2”“3”“4”;实验仪器:FPGA开发板一块,计算机一台。

verilog秒表设计【管理资料】

verilog秒表设计【管理资料】

深圳大学实验报告课程名称:数字系统设计实验项目名称:Verilog秒表设计学院:信息工程学院专业:电子信息工程指导教师:邓小莺报告人:陈耀省学号:2010130267班级:电子三班实验时间:2012年11月实验报告提交时间:2012年11月28日教务部制一、实验目的1、进一步熟悉ISE软件的使用,熟悉FPGA开发流程;2、掌握编写Verilog代码的步骤,学会绘制ASM图;3、学会自顶向下的设计方法,使用不同的模块实现系统的设计。

二、实验设备1、装有ISE软件的PC机一台;2、Nexys3开发板一块。

三、实验内容与要求设计一个秒表它具有计时功能。

此秒表有两个按键(reset, start)按下reset键后,秒表清零。

开始默认秒表计时,按下start键后,停止计时,再次按下start键后,又开始计时,如此反复。

用FPGA开发板上的两个七段数码管显示时间(以秒为单位),计时由0 到 59 循环。

三、实验步骤1、设计系统框图,设计采取自顶向下的设计方案,整个秒表系统的原理图如下所示。

主要包括五个模块——按键消抖模块、分频模块、按键功能控制模块、计数模块、数码管驱动显示模块。

2、根据系统的原理图,画出各个模块的ASM图。

(1)利用D触发器对按键进行消抖处理,其电路图如下。

利用下面这个电路即可实现对start键和reset键的消抖。

只有连续输入三个周期的高电平时,按键才有效。

(2)分频模块的ASM图。

此ASM图将100MHz的信号分频为100Hz的信号,用于计数和数码管的扫描。

(3)start键与reset键功能控制模块的ASM图。

图中rst为复位信号,sta为计时信号。

利用状态机实现不同状态之间的转换并输出复位信号与计时信号。

默认状态是start_time,即计时状态。

(4)计数模块的ASM图。

输入100Hz的时钟用于计数,当复位信号有效时,将所有的数全部置0。

否则sta信号有效时开始计数。

最后输出秒位与十秒位。

基于FPGAVerilog的数字式秒表设计

基于FPGAVerilog的数字式秒表设计

基于FPGA的数字式秒表一、设计任务及要求秒表由于其计时精确,分辨率高(秒),在各种竞技场所得到了广泛的应用,本次设计的任务就是设计一个基于 FPGA 的数字式秒表。

1、基本要求:(1)性能指标:秒表的分辨率为秒,最长计时时间为秒;(2)设置启/停开关和复位开关(计数控制器):启/停开关 S1 的使用方法与传统的机械计时器相同,即按一下启/停开关,启动计时器开始计时,再按一下启/停开关计时终止。

复位开关 S2 用来使计时器清 0,复位开关可以在任何情况下使用,即使在计时过程中,只要按一下复位开关,计时进程应立即终止,并对计时器清零。

(开关按下为 0,弹起为 1)。

(3)秒表的计时基准信号:以周期为秒(频率 100HZ)的计时脉冲作为一个比较精准的计时基准信号输入到秒位计数器的时钟端;在设计中采用分频器把 1000HZ 的时钟信号转换为 100HZ 的计时基准信号,其分频系数为 10。

(4)数码管动态显示:七段数码管采用动态扫描的方式显示,扫描需要一个比较高频率的信号,本次设计选用 1000HZ 。

为了得到 1000Hz 信号,必须对输入的时钟信号 50MHZ 进行分频。

显示模块共用 11 个管脚,其中 8 个用于连接 8 个数码管的七段 LED,还有 3 个管脚用于选择点亮哪个数码管,每隔很短的一段时间 8 个数码管交替点亮,依次循环,动态显示,由于人眼的视觉残留,可以观察到连续的测量计数器的计数值。

上电后,八个数码管中左边四个显示自己的学号后四位,在运行过程中一直不变;右边四个显示计时时间,范围 0000~9999,利用两个按钮 S1、S2 控制计时。

2、提高要求:加入小数点,计时数码管显示范围 ~。

二、 系统原理框图100Hz50MHz1000Hz 三、 电路实现四、 功能模块1、 分频器(以10分频器为例)(1)Verilog HDL 语言程序module fp10(Clk,Out10分频器);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的脉冲。

Verilog 实验报告 秒表

Verilog 实验报告 秒表

Verilog HDL实验报告基于Verilog HDL的数字秒表班级:信科14-04班姓名:温华强学号:08143080教师:王冠军基于Verilog HDL的数字秒表一、秒表功能1. 计时范围:00:00:00—59:59:992. 显示工作方式:八位数码管显示3.具有暂停和清零的功能二、实验设计原理1、秒表的逻辑结构较简单,它主要由十进制计数器、六进制计计数器、分频器、数据选择器和显示译码器组成,在整个秒表中最关键的是如何获得一个精确的100HZ计时脉冲,除此之外,整个秒表还需有一个启动信号和一个清零信号,以便秒表能随意停止、启动以及清零复位。

2、秒表有共有8个输出显示,其中6个显示输出数据,分别为百分之一秒,十分之一秒,秒,十秒,分,十分,所以共有6个计数器与之相对应,另外两个为间隔符,显示‘-’。

8个计数器的输出全都为BCD码输出,这样便与同显示译码器连接。

3、可定义一个24位二进制的寄存器hour用于存放8个计数器的输出,寄存器从高位到低位每连续4位为一组,分别存放百分之一秒,十分之一秒,间隔符,秒,十秒,间隔符,分,十分,由频率信号输出端输出频率为100HZ的时钟信号输入到百分之一秒模块的时钟端ckl,百分之一秒模块为100进制的计数器,当计数器到“1001”时,百分之一秒模块清零,同时十分之一秒模块加1,十分之一秒模块也为100进制的计数器,当计数到“1001”时,十分之一模块清零,同时秒模块加1;以此类推,一直到分模块计数器到59进59。

秒表计数单位与对应的输出信号4、为了消除按键消抖问题,定义寄存器key-inner来存储按键key的输入信号,key-flag作为启动/暂停的转换标志,key-inner[0]出现一个下降沿时,key-flag取反一次,当key-flag为0时计数器启动,1时计数器暂停,当key-flag 为1同时key-inner[1]为9时,计数器清零。

5、定义18位寄存器count用于存放分频和扫描用的计数值。

verilog_HDL秒表

verilog_HDL秒表

verilog_HDL秒表实验八 verilog HDL秒表一、实验目的:1、了解数字秒表的工作原理。

2、进一步熟悉用verilog HDL 语言编写驱动七段码管显示的代码。

3、掌握verilog HDL 编写中的一些小技巧。

二、实验要求:实现数字秒表功能,要求有分、秒、1,秒显示,该秒表能够随时控制启/停,清零重新计时功能。

三、实验原理:秒表的工作原理与多功能数字电子钟大致相同,唯一不同的是,由于秒表的分辨率为0.01 秒,所以整个秒表的工作时钟是在100Hz的时钟信号下完成。

假设该秒表的应用场合小于1小时,秒表的显示格式为mm-ss-xx(mm表示分钟:0,59;ss 表示秒:0,59;xx 表示百分之一秒:0,99)。

四、实验步骤:1、用verilog HDL语言编写出秒表电路程序;通过Quartus?进行编辑、编译、综合、适配、仿真测试,给出其所有信号的时序仿真波形。

2、按实验要求锁定管脚,重新综合(注:此实验中,使用了时钟信号,请关闭时钟信号管脚的自动锁定功能,具体方法参照ALTERA软件介绍)。

3、在EDA6000软件中建立实验模式。

4、下载设计文件,硬件验证秒表的工作性能。

代码:十进制计数器:module count10(RST,SRT,CLK,cout,Q); input RST,SRT,CLK;output cout;output [3:0] Q;reg [3:0] Q;always @(posedge CLK or posedge RST ) beginif(RST) Q=4'b0000;else if (SRT)beginif (Q<4'b1001) Q=Q+4'b0001;else Q=4'b0000;endendassign cout=Q[3]&Q[0];endmodule六进制计数器:module count6(RST,SRT,CLK,cout,Q); input RST,SRT,CLK;output cout;output [2:0] Q;reg [2:0] Q;always @(posedge CLK or posedge RST ) beginif(RST) Q=3'b000;else if (SRT)beginif (Q<3'b101) Q=Q+3'b001;else Q=3'b000;endendassign cout=Q[2]&Q[0];endmodule顶层模块设计:。

FPGA电子秒表计时器verilog实验报告

FPGA电子秒表计时器verilog实验报告

华中科技大学《电子线路设计、测试与实验》实验报告实验名称:用EDA技术设计多功能数字钟院(系):电子信息与通信学院专业班级:姓名:学号:时间:地点:实验成绩:指导教师:2018 年 3 月 27 日一. 实验任务及要求基本要求:电子秒表1)可计时的范围0.00s~99.99s(显示用七段数码管,显示小数点)。

2)能够暂停,能够在计时结束使用灯光或者声音报警提示。

提高要求: PWM波产生器1)可输出占空比按10%递进的PWM波(示波器测量查看)。

二.实验条件实验板:Nexys4 DDR实验软件:ISE14.7,ModelSim三.预习要求1.NEXYS 4 DDR开发板说明。

2.有限状态机。

3.数码管扫描显示。

四.实验原理1.电子秒表设计框图模块分析1)分频模块(Divider.v)将系统给定的100MHZ 的频率通过分频模块变成100Hz 的clk(用来计时)和4000Hz的clk_seg(用来扫描数码管)。

代码如下:原理:输入的100MHz 的信号为CLK_100MHz,每当CLK_100MHz 上升沿来时,Count_DIV 计数加1,且每当Count_DIV =100M/(2*100)=0.5M 时,CLK_Out取反一次并且Count_DIV <=0,这样会得到一个100Hz 的信号。

当需要得到4000Hz的clk_seg时,在顶层模块中修改parameter OUT_Freq=4000;这样,每当Count_DIV=100M/(2*4000)=12500时,CLK_Out取反一次并且Count_DIV <=0,这样会得到一个4000Hz 的信号。

在主程序中修改参数如下:仿真时,为便于观察,在testbench中,将CLK_100MHz的周期设为2ns:always #1 CLK_100MHz <= ~CLK_100MHz;并修改参数如下,验证分频模块的正确性(图中数字16,8,1只表示频率的倍数关系,并非真正的频率)其仿真图如下图:从图中可以看出,CLK_100MHz的周期为2ns,clk_seg的周期为4ns,clk的周期为32ns,符合倍数关系,故分频模块的正确性得到验证。

数字式秒表verilog语言实现

数字式秒表verilog语言实现

一、实验目的(1)熟练掌握分频器、各种进制的同步计数器的设计。

(2)熟练掌握同步计数器的级联方法。

(3)掌握数码管的动态显示驱动方式。

(4)掌握计数器的功能和应用。

(5)理解开关防颤动的必要性。

(6)掌握简单控制器的设计方法。

二、实验内容和原理1、实验设计要求:(1)计时范围0’0’.0’’~59’59’.9’’,分辨率为0.1s,用数码管显示计时值。

(2)秒表有一个按键开关:当电路处于“初始”状态时,第一次按键,计时开始(“计时”状态);再次按键。

计时停止(“停止”状态);第三次按键,计时器复位为0’0’.0’’,且电路恢复到“初始”状态。

2、根据设计要求,可画出秒表电路的原理框图,如图1-2所示,秒表电路由时钟管理模块(DCM)、分频器模块、按键处理模块、控制器、计时模块和显示模块组成。

图1-2 秒表电路的原理框图(1)DCM模块由于数字钟为低速电路,而XUP Virtex-II Pro 开发系统只提供100MHz主时钟,因此需插入DCM分频模块以降低系统的工作时钟,从而提高系统的可靠性。

DCM可采用16分频,输出6.25MHz的sys_clk信号作为系统的主时钟。

ISE生成DCM内核的Verilog HDL 代码:VgaDCM DCMInst(.CLKIN_IN(clk),.CLKDV_OUT(sys_clk),.CLKIN_IBUFG_OUT(),.CLK0_OUT(), .LOCKED_OUT());(2)分频器模块产生用于计时的1/10秒脉冲信号pulse10,频率为10Hz ; 产生用于显示模块的扫描脉冲信号pulse400,频率为400Hz 。

1/10秒脉冲信号pulse10和扫描脉冲信号pulse400的脉冲宽度为一个系统主时钟信号sys_clk 的周期。

分频器模块原理框图如图1-3所示,先设计一个15625分频器,产生400Hz 的扫描信号pulse400,再由pulse400控制40分频器产生1/10秒脉冲信号pulse10。

verilog秒表实验报告

verilog秒表实验报告

一,实验原理二,各模块程序与仿真结果图。

1,分频器,将晶振的48MHz频率分频为电子秒表的最小分辨频率,周期0.01S。

同时在译码部分需要一个1KHz的扫描信号,所以分频器的功能就是产生一个100Hz信号和1kHz信号。

源代码如下:module divclk(clk,clk_100,clk_1k);input clk;output reg clk_100,clk_1k;reg[29:0]counter1,counter2;initial begin counter1<=0;counter2<=0;clk_100<=0;clk_1k<=0;endalways@(posedge clk)beginif(counter1==240000)begin counter1<=0;clk_100<=~clk_100;endelse begin counter1<=counter1+1;endif(counter2==24000)begin counter2<=0;clk_1k<=~clk_1k;endelse begin counter2<=counter2+1;endendendmodule仿真结果2,计数器秒表计数器和一般计数器不同的是进制,在0.01s__0.99s时,都是十进制的,而到了秒和分的时候,十位秒和个位秒是十进制,秒和分之间则为六十进制所以在进位时注意区分。

秒表有两个按键,一个复位按键reset,一个run/stop按键,reset按键比较好处理,因为是点触式,可以检测其下降沿部位(低电平有效),当硬件检测到,说明是有按键按下。

而run/stop按键则为,按下一次这个键,秒表run和stop切换一次可定义一个信号寄存器,在检测到这个按键按下时,自身在0和1之间翻转一次,1表示run,0表示stop。

我们知道,在按键按下一次时会有如下的毛刺信号,这个毛刺信号持续时间虽然只有1-3ms,但是这对于硬件来说,还是很长的,最关键的是,会产生很多个下降沿和电平触发。

秒表的设计_Verilog_HDL

秒表的设计_Verilog_HDL

FPGA及数字系统设计专周报告系别:XXXXXXXX班级:XXXXX学号:XX姓名:XXXX日期:XXXX年XX月XX日一、专周设计课题秒表的设计二、专周实习目的1、熟练利用Verilog HDL语言进行数字系统设计。

2、掌握数字系统的设计方法——自顶向下的设计思想。

3、掌握计数器的设计与使用。

4、根据秒表的功能要求设计一个秒表。

5、熟练掌握用Quartus II软件进行系统原理图设计、文本设计以及进行波形仿真。

三、专周实习所需器材装有Quartus II软件的电脑一台、FPGA教学实验系统一台、下载电缆一根。

四、专周实习要求1、有秒、分计数,数码扫描显示输出。

2、有清零端和暂停端。

3、在功能允许的情况下,可自由发挥。

4、下载,检查结果是否正确。

五、专周实习原理1、功能描述秒表是一种计时的工具,有着很广泛的用途。

本实验中的秒表要求有两个功能按钮:一个是计数和停止计数按钮,当第一次按下此按钮时,秒表开始计数,再一次按下时,秒表停止计数,并显示所计的数字;另一个是清零按钮,当按下此按钮时,秒表清零。

在数码管上采用动态扫描显示输出。

2、基本原理:本设计中用到的主要元件有计数器、分频器、数据选择器、译码器、位选信号发生器等。

秒、分都是60进制计数,所以必须采用两个60进制的计数器,而百分秒择采用的是100进制;分频器主要将1KHZ的时钟信号经过10分频后,产生100HZ的单位时钟周期;数据选择器主要功能是将即将显示的数据送给译码器;译码器将BCD码转换为七段译码进行显示;位选信号发生器根据人眼暂留效应和显示的数码的个数,产生一段循环码。

原理框图如下图。

3、自顶向下的设计方法自顶向下的设计方法是数字系统设计中最常用的设计方法,也是基于芯片的系统设计的主要方法。

自顶向下的设计方法利用功能分割手段将设计由上到下进行层次话和模块化,及分层次、分模块进行设计和仿真。

功能分割时,将系统功能分解为功能块,功能块再分解为逻辑块,逻辑块再分解为更少的逻辑块和电路。

电子技术综合实验报告-秒表

电子技术综合实验报告-秒表
用 sel[2..0]和q[6..0]分别接7 段数码管的选择端SEL[2..0]和g~a。 使
流 交 习 学 供 仅
程序 1)分频程序
module fenpin100Hz(clk,hz,hz_1k); input clk; output reg [3:0]hz;
output reg [15:0]hz_1k;
if(hz_1k==47999) hz_1k<=0; else hz_1k<=hz_1k+1;
always @(negedge hz_1k[16]) if(hz==9)
hz<=0; else
结果用 8 只数码管显示;有两个按钮开关,一个按钮使秒表复位,
另一个按钮控制秒表的启动/暂停。
下图显示了该跑表前面板的基本排布构想。
Stopwatch
POWER
RESET
RUN/STOP
(五)实验内容:Verilog 的语法,建模,设计时间测量的方法:
使用 现在时间测量一般采用数字计器来进行
(六) 实验原理
module jishu_jinwei(hz,rst,stop,n_1,n_2,n_3,n_4,n_5,n_6); input hz; input stop; input rst; output reg [3:0]n_1,n_2,n_3,n_4,n_5,n_6;
wire [3:0]cnt_1,cnt_2,cnt_3,cnt_4,cnt_5,cnt_6; *//Jinwei U2、U3、U5、U9 是十进制位,jinwei_6 U4、U6 是六进制位//*
input [3:0]num; output reg [6:0]led; 译码仿真图

使
பைடு நூலகம்

verilog电子秒表设计

verilog电子秒表设计

华中科技大学《电子线路设计、测试与实验》实验报告实验名称:电子秒表院(系):光学与电子信息学院专业班级:光材1102姓名:***学号:U*********时间:2013.12.5地点:南一楼实验成绩:指导教师:**2013 年12 月3 日实验目的:利用层次化方法在实验板设计实现一个能显示00.00 秒(百分之一秒)到59.99 秒,当计时达到并超过1 分钟时,给出LED 常亮信号告警,计数结果停留在计数最大值(即99.99 秒)上的电子秒表。

功能要求:基本功能:6) 设计一个能显示00.00 秒到59.99 秒的电子秒表。

7) 利用实验板所提供的50MHz 信号做为时钟信号。

8) 计数结果在AN3~AN0 中提供的数码管中显示。

9) 具有继续/暂停按键和复位清零开关。

拨码开关SW0 为复位开关,当SW0 为HIGH 时,系统复位,电子秒表显示时间为0 秒;当SW0 为LOW 时,系统开始按继续/暂停按键BTN0 控制进行工作;BTN0 为继续/暂停按键,当继续/暂停按键BTN0 按下时,系统暂停计数,AN1~AN0 显示停留在所暂停时刻;当继续/暂停按键BTN0 松开时,系统正常计数,显示精度为0.01 秒。

10) 当计时达到并超过1 分钟时,LD0 闪烁告警,计数结果停留在计数最大值上。

设计步骤与要求:1) 计算并说明采用Basys2 实验板时钟50MHz 实现系统功能的基本原理。

2) 在Xilinx ISE13.1 软件中,利用层次化方法,设计实现模一百计数及显示的电路系统,设计模块间的连接调用关系,编写并输入所设计的源程序文件。

3) 对源程序进行编译及仿真分析(注意合理设置,以便能够在验证逻辑的基础上尽快得出仿真结果)。

4) 输入管脚约束文件,对设计项目进行编译与逻辑综合,生成下载所需.bit类型文件。

# PlanAhead Generated physical constraintsNET "CLK" LOC = B8;NET "CLR" LOC = P11;NET "PAUSE" LOC = G12;NET "WARN" LOC = M5;NET "display[0]" LOC = F12;NET "display[1]" LOC = J12;NET "display[2]" LOC = M13;NET "display[3]" LOC = K14;NET "out_display[0]" LOC = L14;NET "out_display[1]" LOC = H12;NET "out_display[2]" LOC = N14;NET "out_display[3]" LOC = N11;NET "out_display[4]" LOC = P12;NET "out_display[5]" LOC = L13;NET "out_display[6]" LOC = M12;NET "out_display[7]" LOC = N13;NET "CLR" CLOCK_DEDICA TED_ROUTE = FALSE;# PlanAhead Generated IO constraintsNET "CLK" IOSTANDARD = LVCMOS33;NET "CLR" IOSTANDARD = LVCMOS33;NET "PAUSE" IOSTANDARD = LVCMOS33;NET "WARN" IOSTANDARD = LVCMOS33;NET "display[0]" IOSTANDARD = LVCMOS33;NET "display[1]" IOSTANDARD = LVCMOS33;NET "display[2]" IOSTANDARD = LVCMOS33;NET "display[3]" IOSTANDARD = LVCMOS33;NET "out_display[0]" IOSTANDARD = LVCMOS33;NET "out_display[1]" IOSTANDARD = LVCMOS33;NET "out_display[2]" IOSTANDARD = LVCMOS33;NET "out_display[3]" IOSTANDARD = LVCMOS33;NET "out_display[4]" IOSTANDARD = LVCMOS33;NET "out_display[5]" IOSTANDARD = LVCMOS33;NET "out_display[6]" IOSTANDARD = LVCMOS33;NET "out_display[7]" IOSTANDARD = LVCMOS33;NET "CLK" DRIVE = 12;5) 在Basys2 实验板上下载所生成的.bit 文件,观察验证所设计的电路功能。

VHDL计时秒表实验报告

VHDL计时秒表实验报告

可编程逻辑器件应用项目报告书项目名称:计时秒表指导老师:姓名:学号:(以后写报告要包含以下一些内容:)一、设计要求--------------------------------------------------------------------------------二、设计目的--------------------------------------------------------------------------------三、设计方案--------------------------------------------------------------------------------四、设计程序---------------------------------------------------------------------------------五、管脚分配---------------------------------------------------------------------------------六、硬件下载实现现象描述------------------------------------------七、体会、对设计工作的总结与展-------------------------------------------一、设计要求:计时秒表是我们经常见的,在体育运动上也应用非常广的一种工具。

譬如我们在进行50米、100米短跑运动中,需要一个计时非常经准的秒表来测速。

在这里,我们需设计一个计时秒表,具有以下功能:①有启/停开关,用于开始/结束计时操作;②用六个七段数码管显示计时数;③秒表计时长度为59.59.59,超过计时长度,有溢出则报警;④设置复位开关,在任何情况下,只要按下复位开关,秒表都要无条件地进行复位清0操作。

三、设计方案:(1)时钟源使用频率为1Hz的连续脉冲。

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

姓名班级学号实验日期节次教师签字成绩基于BASYS2开发板的记忆秒表设计一、实验目的1、熟悉基于Verilog HDL语言输入方式的数字电路的设计方法。

2、掌握基于FPGA的设计流程。

3、熟悉BASYS2开发板的使用方法。

4、熟悉Xilinx ISE软件的使用方法。

5、培养自己独立自主设计并完成实验的能力。

二、总体设计方案或技术路线本实验利用BASYS2开发板的已有资源来进行设计实验,并用Xilinx ISE软件来编写和综合Verilog代码。

总体设计方案是设计一个带有记忆功能的秒表。

具体而言,该秒表通过BASYS2开发板的50M的时钟进行分频计时,最大计时时间为99.99s,用4位数码管动态显示计时时间,除了有基本的运行、暂停及复位清空功能,还有存储当前时间和查看存储时间的功能。

三、实验电路图BASYS2开发板原理图--数码管板上数码管为4位共阳极数码管,每段为低电平点亮,位选接了三极管增大驱动电流,同时为非逻辑,所以位选信号为低电平有效。

BASYS2开发板原理图--按键本实验用到了两个按键BTN0和BTN1,BTN0为复位按键,对应程序的clear信号,BTN1为存储按键,对应程序的btn[1]信号,按一次该按键数据存储一次,下一次按下时这一次存的数据将被替换掉。

BASYS2开发板原理图--开关本实验用到了两个开关SW7和SW1,SW7为运行、暂停开关,对应程序的sw[0]信号,开关打到上方为运行,下方为暂停,SW1为显示切换开关,对应程序的sw[1]信号,在计时暂停的前提下,将开关打到上方显示出存储的时间数据。

四、仪器设备名称、型号和技术指标硬件:BASYS2开发板软件:Xilinx ISE(编程)、Digilent Adept(下载)五、程序流程图六、程序源代码/////////////////////////////////////////////////////////程序文件`timescale 1ns / 1ps//////////////////////////////////////////////////////////////////////////////////// Company:// Engineer://// Create Date: 15:45:01 11/26/2014// Design Name:// Module Name: miaobiao// Project Name:// Target Devices:// Tool versions:// Description://// Dependencies://// Revision:// Revision 0.01 - File Created// Additional Comments://///////////////////////////////////////////////////////////秒表的顶层模块module miaobiao(input wire clk,///////////////////////////////开发板系统时钟50MHzinput wire[1:0] btn,////////////////////////两个按键:[0]复位和[1]存时间input wire[1:0] sw,/////////////////////////两个开关:[0]运行/暂停和[1]显示存储时间output wire[7:0] smg,/////////////////////数码管的8个段选信号output wire[3:0] smg_an/////////////////数码管的4个位选信号);wire clear;assign clear=btn[0];////////////////////////////////////将复位按键信号传给clear变量wire clk_1k;clkdiv #(50000) m0(clk,clear,clk_1k);//将50MHz进行5万分频输出1kHz时钟信号wire[15:0]number;timer m1(sw[0]&clk_1k,clear,number);///////////计时器模块,输出当前时间数据wire[15:0]num_save;save m2(clk,clear,btn[1],number,num_save);//////按键按下存储当前时间wire[15:0]num_display;/////////////////////////////////////////////////////////////////////////////根据开关状态选择显示内容choose_4num m3(sw,number,num_save,num_display);display m4(clk_1k,clear,num_display,smg,smg_an);///////将数字送给数码管显示endmodule///////////////////////////////////////////////////////////////////////////////4选1数据选择器模块module choose_4num(input wire[1:0]sw,input wire[15:0]number,input wire[15:0]num_save,output reg[15:0]num_display);always@(*)case(sw)0:num_display<=number;/////////////显示内容为当前时间1:num_display<=number;/////////////。

当前时间2:num_display<=num_save;/////////显示内容为存储时间3:num_display<=number;/////////////。

当前时间default:num_display<=number;endcaseendmodule//////////////////////////////////////////////////////////////////////////////////存储时间模块module save(input wire clk_save,input wire clear,input wire button,input wire[15:0]number,output reg[15:0]num_save);always@(posedge clk_save)beginif(1==clear)num_save<=0;else if(1==button)num_save<=number;elsenum_save<=num_save;endendmodule//////////////////////////////////////////////////////////////////////////////////////计时器模块module timer(input wire clk_timer,input wire clear,output reg[15:0] number);reg[3:0] reg_1ms;always@(posedge clk_timer,posedge clear)beginif(1==clear)beginnumber<=0;reg_1ms<=0;endelsebeginreg_1ms<=reg_1ms+1;if(reg_1ms>=9)///////////////1ms的计数变量到10清零,同时10ms变量加一beginreg_1ms<=0;number[3:0]<=number[3:0]+1;if(number[3:0]>=9)////10ms变量到10清零,100ms加一beginnumber[3:0]<=0;number[7:4]<=number[7:4]+1;if(number[7:4]>=9)////100ms变量到10清零,1s加一beginnumber[7:4]<=0;number[11:8]<=number[11:8]+1;if(number[11:8]>=9)/////1s到10清零,10s加一beginnumber[11:8]<=0;number[15:12]<=number[15:12]+1;if(number[15:12]>=9)////10s变量到10清零number[15:12]<=0;///综上,计时到99.99s后清零endendendendendendendmodule/////////////////////////////////////////////////////////////////////////////////////动态扫描显示数字模块module display(input wire clk_dis,input wire clear,input wire[15:0] number,output wire[7:0] smg,output wire[3:0] smg_an);reg[1:0] counter;reg[3:0] reg_num;wire dp;always@(posedge clk_dis,posedge clear)beginif(1==clear)begincounter<=0;endelsecounter<=counter+1;endalways@(*)begincase(counter)0:reg_num<=number[3:0];////////将10ms 变量送到数码管第0位显示1:reg_num<=number[7:4];////////将100ms 变量送到数码管第1位显示2:reg_num<=number[11:8];//////将1s 变量送到数码管第2位显示3:reg_num<=number[15:12];////将10s 变量送到数码管第3位显示default:reg_num<=0;endcaseendassign dp=(2==counter);//////////////////第2位数码管的小数点点亮,其余小数点熄灭num2smg m0(counter,reg_num,dp,smg_an,smg);endmodule//////////////////////////////////////////////////////////////////////////////////////时钟分频模块module clkdiv#(parameter div=50000)///////默认5万分频(input wire clk,input wire clear,output reg new_clk);reg[31:0] counter;always@(posedge clk,posedge clear)beginif(1==clear)begincounter<=0;new_clk<=0;endelse if(counter>=div/2-1)begincounter<=0;new_clk<=~new_clk;//二分频endelsecounter<=counter+1;endendmodule///////////////////////////////////////////////////////////////////////////数字转换成数码管段、位码模块module num2smg(// input wire clk_smg,input wire[1:0] which,input wire[3:0] num,input wire dp,//dp=1时,点亮小数点output reg[3:0] smg_an,output wire[7:0] smg);always@(*)case(which)/////////////////////////////////////////数码管位选子模块3:smg_an<=4'b0111;2:smg_an<=4'b1011;1:smg_an<=4'b1101;0:smg_an<=4'b1110;default:smg_an<=4'b1111;endcasereg[7:0] r_smg;always@(*)//////////////////////////////////////////////数码管段选子模块begincase(num)0:r_smg<=8'hc0;1:r_smg<=8'hf9;2:r_smg<=8'ha4;3:r_smg<=8'hb0;4:r_smg<=8'h99;5:r_smg<=8'h92;6:r_smg<=8'h82;7:r_smg<=8'hf8;8:r_smg<=8'h80;9:r_smg<=8'h90;10:r_smg<=8'h88;11:r_smg<=8'h83;12:r_smg<=8'hc6;13:r_smg<=8'ha1;14:r_smg<=8'h86;15:r_smg<=8'h8e;default:r_smg<=8'hff;endcaseendassign smg=r_smg-128*dp;////////////////////////////////////判断是否显示小数点endmodule////////////////////////////////////////////////////////////////////////////程序结束END//////////////////////////////////引脚约束文件////////////////////////////////////////////////////时钟约束NET"clk"TNM_NET=clk;TIMESPEC TS_CLK=PERIOD"clk"20ns high 50%;NET"clk"LOC="B8";//////////////////////////////////////////////////////////数码管NET"smg<7>"LOC="N13";NET"smg<6>"LOC="M12";NET"smg<5>"LOC="L13";NET"smg<4>"LOC="P12";NET"smg<3>"LOC="N11";NET"smg<2>"LOC="N14";NET"smg<1>"LOC="H12";NET"smg<0>"LOC="L14";NET"smg_an<3>"LOC="K14";NET"smg_an<2>"LOC="M13";NET"smg_an<1>"LOC="J12";NET"smg_an<0>"LOC="F12";//////////////////////////////////////////////////////按键//NET"btn<3>"LOC="A7";//NET"btn<2>"LOC="M4";NET"btn<1>"LOC="C11";NET"btn<0>"LOC="G12";////////////////////////////////////////////////////开关NET"sw<1>"LOC="L3";NET"sw<0>"LOC="N3";七、实验结果最后,成功地编写出程序,调试通过,完成所有功能,整个设计达到预期目标:最大计时时间为99.99s,用4位数码管动态显示计时时间,除了有基本的运行、暂停及复位清空功能,还有存储当前时间和查看存储时间的功能。

相关文档
最新文档