基于verilog语言编程的数字秒表设计
Verilog秒表设计 精品
课程名称:数字系统设计一、实验目的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信号有效时开始计数。
最后输出秒位与十秒位。
(5)数码管驱动模块的ASM图。
使用100Hz的信号扫描数码管,并将对应的数字以十进制形式显示在数码管上。
因为只用到两个数码管,所以前两个数码管置1,即保持不亮,只点亮后两个数码管。
3、根据所绘制各个模块的ASM图和系统的原理图,编写Verilog代码。
用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 //到此数码管驱动模块结束
基于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程序和原理图。
数电自主设计实验报告——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;/////////////。
基于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 下载电路到核心芯片,驱动硬件工作。
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的数字式秒表设计
基于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秒表
秒表下载到目标板上显示效果,计时长度为1小时,计时精度为1秒。
初始值为:00:00计时最大值:59:59设计思路:共3个模块:顶层模块----顶层模块对底层模块进行例化,顶层模块不做逻辑设计。
底层模块----共2个底层模块,计时模块:通过在例化时对分频系数的改变,得到1秒,10秒,1分,10分的输出,再对每位计数值的最大值进行例化。
译码模块:对输出要显示的时间数字进行译码。
顶层模块,顶层只做例化。
例化模块为计时模块、译码模块。
//============================================================ //Author:tianwenfei//Date:2011-10-14//Function:This is watch module.//============================================================ `define UD#1module WATCH1(//Input portsSYSCLK,RST_B,//Output portsLED_DATA,LED_SEL);//============================================================ //Input and output declaration//============================================================ input SYSCLK;input RST_B;output[7:0]LED_DATA;output[3:0]LED_SEL;//============================================================ //Wire and reg declaration//============================================================ wire[7:0]LED_DATA;wire[3:0]LED_SEL;wire SYSCLK;wire RST_B;//============================================================ //Wire and reg in the module//============================================================ wire[3:0]DATA1;wire[3:0]DATA2;wire[3:0]DATA3;wire[3:0]DATA4;parameter CNT_1S=36'h17D7840;parameter CNT_10S=36'hEE6B280;parameter CNT_1M=36'h59682F00;parameter CNT_10M=36'h37E11D600;//============================================================ //Logic//============================================================ //InstanceCNT_TIME I_CNT_1S(//Input ports.SYSCLK(SYSCLK),.RST_B(RST_B),.CLK_DIV_COEF(CNT_1S),.CNT_MAX(4'h9),//Output ports.DATA_OUT(DATA1));CNT_TIME I_CNT_10S(//Input ports.SYSCLK(SYSCLK),.RST_B(RST_B),.CLK_DIV_COEF(CNT_10S),.CNT_MAX(4'h5),//Output ports.DATA_OUT(DATA2));CNT_TIME I_CNT_1M(//Input ports.SYSCLK(SYSCLK),.RST_B(RST_B),.CLK_DIV_COEF(CNT_1M),.CNT_MAX(4'h9),//Output ports.DATA_OUT(DATA3));CNT_TIME I_CNT_10M(//Input ports.SYSCLK(SYSCLK),.RST_B(RST_B),.CLK_DIV_COEF(CNT_10M),.CNT_MAX(4'h5),//Output ports.DATA_OUT(DATA4));LED_CTL I_LED_CTL(//Input ports..SYSCLK(SYSCLK),.RST_B(RST_B),.SCAN_COEF(24'h3D090),.DATA_0(DATA1),.DATA_1(DATA2),.DATA_2(DATA3),.DATA_3(DATA4),//Output ports..LED_DATA(LED_DATA),.LED_SEL(LED_SEL));endmodule此为计时模块//============================================================ //Author:tianwenfei//Date:2011-10-13//Function:This is a count time module.//============================================================ `define UD#1module CNT_TIME(//Input portsSYSCLK,RST_B,CLK_DIV_COEF,CNT_MAX,//Output portsDATA_OUT);//============================================================ //Input and output declaration//============================================================ input SYSCLK;input RST_B;input[WIDTH-1:0]CLK_DIV_COEF;input[3:0]CNT_MAX;output[3:0]DATA_OUT;//============================================================ //Wire and reg declaration//============================================================ wire SYSCLK;wire RST_B;wire[WIDTH-1:0]CLK_DIV_COEF;wire[3:0]CNT_MAX;wire[3:0]DATA_OUT;parameter WIDTH=36;//============================================================ //Wire and reg in the module//============================================================ reg[WIDTH-1:0]CLK_DIV_CNT;reg[WIDTH-1:0]CLK_DIV_CNT_N;reg DIV_CLK;reg DIV_CLK_N;reg[3:0]DIV_CLK_CNT;reg[3:0]DIV_CLK_CNT_N;//============================================================ //Logic//============================================================ //Division clock.always@(posedge SYSCLK or negedge RST_B)beginif(!RST_B)CLK_DIV_CNT<=`UD36'h0;elseCLK_DIV_CNT<=`UD CLK_DIV_CNT_N;endalways@(*)beginif(CLK_DIV_CNT==CLK_DIV_COEF)CLK_DIV_CNT_N=36'h0;elseCLK_DIV_CNT_N=CLK_DIV_CNT+36'h1;end//Duty50%square wave clock.always@(posedge SYSCLK or negedge RST_B)beginif(!RST_B)DIV_CLK<=`UD1'h0;elseDIV_CLK<=`UD DIV_CLK_N;endalways@(*)beginif(CLK_DIV_CNT==CLK_DIV_COEF)DIV_CLK_N=~DIV_CLK;elseDIV_CLK_N=DIV_CLK;end//Count the divison clock.always@(posedge SYSCLK or negedge RST_B)beginif(!RST_B)DIV_CLK_CNT<=`UD4'h0;elseDIV_CLK_CNT<=`UD DIV_CLK_CNT_N;endalways@(*)beginif((DIV_CLK_CNT==CNT_MAX)&&(DIV_CLK)&&(!DIV_CLK_N)) DIV_CLK_CNT_N=4'h0;else if((DIV_CLK)&&(!DIV_CLK_N))DIV_CLK_CNT_N=DIV_CLK_CNT+4'h1;elseDIV_CLK_CNT_N=DIV_CLK_CNT;endassign DATA_OUT=DIV_CLK_CNT;endmodule此模块为译码模块//============================================================ //Author:tianwenfei//Date:2011-10-13//Function:This is a decorder module.//============================================================ `define UD#1module LED_CTL(//Input ports.SYSCLK,RST_B,SCAN_COEF,DATA_0,DATA_1,DATA_2,DATA_3,//Output ports.LED_DATA,LED_SEL);//============================================================ //Input and output declaration//============================================================ input SYSCLK;//System clock,50MHz.input RST_B;//Global reset,low active.input[23:0]SCAN_COEF;//The coef of scan,fast or sllow.input[3:0]DATA_0;//The data will show in led0.input[3:0]DATA_1;//The data will show in led1.input[3:0]DATA_2;//The data will show in led2.input[3:0]DATA_3;//The data will show in led3.output[7:0]LED_DATA;//The data output to led.output[3:0]LED_SEL;//Seclet led,uesed for scan.//============================================================ //Wire and reg declaration//============================================================ wire SYSCLK;wire RST_B;wire[23:0]SCAN_COEF;wire[3:0]DATA_0;wire[3:0]DATA_1;wire[3:0]DATA_2;wire[3:0]DATA_3;reg[7:0]LED_DATA;reg[3:0]LED_SEL;//============================================================ //Wire and reg in the module//============================================================ reg[3:0]LED_DATA_HEX;//The hex of the output data.reg[23:0]LED_SCAN_CNT;//Count for scan the led,200HZ.reg[1:0]LED_SEL_NUM;//The num of the led is secleted.reg[23:0]LED_SCAN_CNT_N;//Next value of LED_SCAN_CNT.reg[1:0]LED_SEL_NUM_N;//Next value of LED_SEL_NUM.reg[24:0]CNT_TIME;//0.5Sreg[24:0]CNT_TIME_N;reg DP;//Pointreg DP_N;//============================================================ //Logic//============================================================ //Count system clock for Scan the led.always@(posedge SYSCLK or negedge RST_B)beginif(!RST_B)LED_SCAN_CNT<=`UD24'h0;elseLED_SCAN_CNT<=`UD LED_SCAN_CNT_N;endalways@(*)beginif(LED_SCAN_CNT==SCAN_COEF)LED_SCAN_CNT_N=24'h0;elseLED_SCAN_CNT_N=LED_SCAN_CNT+24'h1;end//Count the number of the led is secleted.always@(posedge SYSCLK or negedge RST_B)beginif(!RST_B)LED_SEL_NUM<=`UD2'h0;elseLED_SEL_NUM<=`UD LED_SEL_NUM_N;endalways@(*)beginif(LED_SCAN_CNT==SCAN_COEF)LED_SEL_NUM_N=LED_SEL_NUM+2'h1; elseLED_SEL_NUM_N=LED_SEL_NUM;end//The output control.always@(*)begincase(LED_SEL_NUM)2'b00:LED_SEL=4'b0111;2'b01:LED_SEL=4'b1011;2'b10:LED_SEL=4'b1101;2'b11:LED_SEL=4'b1110;default:LED_SEL=4'b0000;endcaseendalways@(*)begincase(LED_SEL_NUM)2'b00:LED_DATA_HEX=DATA_0[3:0];2'b01:LED_DATA_HEX=DATA_1[3:0];2'b10:LED_DATA_HEX=DATA_2[3:0];2'b11:LED_DATA_HEX=DATA_3[3:0];default:LED_DATA_HEX=4'h0;endcaseend//Count the time of0.5S.always@(posedge SYSCLK or negedge RST_B) beginif(!RST_B)CNT_TIME<=`UD25'h0;elseCNT_TIME<=`UD CNT_TIME_N;endalways@(*)beginif(CNT_TIME==25'h17d7840)CNT_TIME_N=25'h0;elseCNT_TIME_N=CNT_TIME+25'h1;end//Pointalways@(posedge SYSCLK or negedge RST_B) beginif(!RST_B)DP<=1'h1;elseDP<=DP_N;endalways@(*)beginif(CNT_TIME==25'h17d7840)DP_N=~DP;elseDP_N=DP;endalways@(*)beginif((DP)&(LED_SEL_NUM==2'h2))LED_DATA[7]=1'h0;elseLED_DATA[7]=1'h1;end//Dataalways@(*)begincase(LED_DATA_HEX)4'h0:LED_DATA[6:0]=7'b1000000;4'h1:LED_DATA[6:0]=7'b1111001;4'h2:LED_DATA[6:0]=7'b0100100;4'h3:LED_DATA[6:0]=7'b0110000;4'h4:LED_DATA[6:0]=7'b0011001;4'h5:LED_DATA[6:0]=7'b0010010;4'h6:LED_DATA[6:0]=7'b0000010;4'h7:LED_DATA[6:0]=7'b1111000;4'h8:LED_DATA[6:0]=7'b0000000;4'h9:LED_DATA[6:0]=7'b0010000;default:LED_DATA[6:0]=7'b1111111; endcaseendendmodule。
基于verilog的数字秒表的设计实现
《HDL语言应用与设计》实验报告基于Verilog HDL数字秒表的设计班级:信科13-01班姓名:张谊坤学号: 08133367教师:王冠军基于Verilog HDL数字秒表的设计一、秒表功能1. 计时范围:00:00:00—59:59:992. 显示工作方式:八位数码管显示3.具有暂停和清零的功能二、实验原理1.实验设计原理(1)秒表的逻辑结构较简单,它主要由十进制计数器、六进制计数器、分频器、数据选择器、和显示译码器等组成。
在整个秒表中最关键的是如何获得一个精确的100HZ计时脉冲,除此之外,整个秒表还需有一个启动信号和一个清零信号,以便秒表能随意停止、启动以及清零复位。
(2)秒表有共有8个输出显示,其中6个显示输出数据,分别为百分之一秒、十分之一秒、秒、十秒、分、十分,所以共有6个计数器与之相对应;另外两个为间隔符,显示‘-’。
8个计数器的输出全都为BCD码输出,这样便与同显示译码器连接。
(3)可定义一个24位二进制的寄存器hour用于存放8个计数器的输出,寄存器从高位到低位每连续4位为一组,分别存放百分之一秒、十分之一秒、间隔符、秒、十秒、间隔符、分、十分。
由频率信号输出端输出频率为100HZ的时钟信号,输入到百分之一秒模块的时钟端clk,百分之一秒模块为100进制的计数器,当计数到“1001”时,百分之一秒模块清零,同时十分之一秒模块加1;十分之一秒模块也为100进制的计数器,当计数到“1001”时,十分之一秒模块清零,同时秒模块加1;以此类推。
直到分模块计数到59进59。
秒表计数单位与对应输出信号hour[3:0] 百分之一秒hour[7:4] 十分之一秒hour[11:8] 秒Hour[15:12] 十秒Hour[19:16] 分hour[23:20] 十分(4)为了消除按键消抖问题,定义寄存器key-inner来存储按键key的输入信号,key-flag作为启动/暂停的转换标志,key-inner[0]出现一个下降沿时,key-flag取反一次,当key-flag为0时计数器启动,1时计数器暂停,当key-flag为1同时key-inner[1]为9时,计数器清零。
秒表的设计_Verilog_HDL
一、专周设计课题秒表的设计二、专周实习目的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、自顶向下的设计方法自顶向下的设计方法是数字系统设计中最常用的设计方法,也是基于芯片的系统设计的主要方法。
它的基本原理框图如下:....................................................................自顶向下的设计方法利用功能分割手段将设计由上到下进行层次话和模块化,及分层次、分模块进行设计和仿真。
功能分割时,将系统功能分解为功能块,功能块再分解为逻辑块,逻辑块再分解为更少的逻辑块和电路。
基于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分频的)。
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顶层模块设计:。
数字式秒表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电子秒表设计
华中科技大学《电子线路设计、测试与实验》实验报告实验名称:电子秒表院(系):光学与电子信息学院专业班级:光材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 文件,观察验证所设计的电路功能。
Verilog秒表计时电路
秒表计时电路1.实验内容1.秒表计时功能,显示分、秒、0.01秒2.具有启动、暂停、停止和清空功能3.增加有趣的流水灯4.输入信号:4bit按键,50MHz时钟5.输出信号:6位数码管2.实验原理(1) Verilog语言Verilog HDL是一种硬件描述语言,以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。
本实验使用Verilog语言编写代码,通过编译,综合等实现电路设计。
其中涉及基本的语法知识,可通过查阅相关资料进行了解。
(2) quartus软件Quartus是Altera公司的综合性PLD/FPGA开发软件,支持原理图、VHDL、VerilogHDL以及AHD等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。
本实验以quartus为平台,完成代码的编辑,编译,综合及分配引脚等,最后下载。
(3) Altera DE2实验板DE2板具有很多特性可以允许使用者实现像从单个电路到多媒体工程的广泛的电路设计。
除了一些硬件特性,DE2还有对标准IO接口的软件支持和一个可以接入多种元件的控制平台。
并且这些软件还提供一系列展现DE2板高级性能的演示。
为了向用户提供最大的灵活性,所有的连接通过Cyclone II FPGA设备。
因此用户可以配置FPGA来实现任何系统设计。
本实验用到的电路模块如右(4) 数码管采用共阳数码管,数码管段选方式如下每一个数码管单独与FPGA连接通过并行总线控制数码管显示3.设计思路及实现方案(1)时钟分频clk10ms→ clk100ms → clk1s→clk10s→clk1min→clk10min→clk1h分频单元:六分频,十分频50MHz到100Hz分频,500000分频(2)状态机设计(3)设计框图4.代码添加及说明a)六进制分频代码//计数器实现6分频,计数到达2和5,输出始终翻转一次,且计数达到5时计数清零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 == 4’b0010) begin //计数满2输出反转clkout <= ~clkout;counter <= counter + 4'b1;endelse if (counter == 4’b0101) begin //计数满4输出反转同时清零clkout <= ~clkout;counter <= 0;endelse begincounter <= counter + 4'b1;endendendmoduleb)十进制分频代码//计数器实现10分频,计数到达4和9,输出始终翻转一次,且计数达到9时计数清零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 counter<=0;clkout<=0; end//计数满4输出反转else if (counter ==4'b0100) begin clkout<=~clkout;counter<=counter+1; end //计数满9输出反转同时计数清零else if (counter ==4'b1001) begin clkout<=~clkout;counter<=0; endelse begin counter<=counter+1; endendendmodulec)时钟分频代码always @(negedge clk or negedge rst10ms) beginif(~rst10ms)begin clk10msreg<=0;clk10ms<=0;endelse if(clk10msreg==249999)begin clk10ms<=~clk10ms;clk10msreg<=0;endelse begin clk10msreg<=clk10msreg+1;endd)状态机代码always @(negedge clk or negedge clear) beginif (~clear) beginstate <= idlestate; rst <= 0; rst10ms <= 0;endelse begincase (state)idlestate:begin if(~start)begin state<=prestate;rst<=0;rst10ms<=0;endelse begin state<=idlestate;endendprestate: begin state<=runstate;rst<=1;rst10ms<=1;endholdstate:begin if(~start)begin state<=runstate;rst<=1;rst10ms<=1;endelse if(~stop)begin state<=idlestate;rst<=1;rst10ms<=0;endelse begin state<=holdstate;endendrunstate:begin if(~stop)begin state<=idlestate;rst<=1;rst10ms<=0;endelse if(~hold)begin state<=holdstate;rst<=1;rst10ms<=0;endelse begin state<=runstate;endenddefault: state <= state;endcaseendende)各级分频代码count6 min10counter(rst, clk10min,clk1h, timeout[7]); //10min6分频得1hcount10 min1counter (rst, clk1min, clk10min, timeout[6]);//1min 10分频得10mincount6 sec10counter(rst, clk10s, clk1min, timeout[5]);//10s 6分频得1mincount10 sec1counter (rst, clk1s, clk10s, timeout[4]);// 1s 10分频得10scount10 ms100counter(rst, clk100ms, clk1s, timeout[3]); // 100ms10分频得1scount10 ms10counter (rst, clk10ms, clk100ms, timeout[2]); // 10ms10分频得100msassign timeout[1] = 4'b1111;assign timeout[0] = 4'b1111;5.实验结果及分析实验中共有四个控制按键分别测试其控制功能即启动,暂停,停止,清空。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字秒表设计系别:电子通信工程系专业:电子信息工程班级:学号:姓名:数字秒表(基于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 下载电路到核心芯片,驱动硬件工作。
Altera_EPM7064(84PIN)有四个引脚GCLK1(83脚),GCLRn(1脚),OE1(84脚),OE2(2脚)。
GCLK1是全局时钟,GCLRn(1脚是全局清零,OE1(84脚),OE2(2脚)是全局使能实现“开始”按键的功能;实现“清零(复位)”按键的功能;做为时钟信号CLK输入的入口地址。
可将开关设计与此,其优势在在于到达延迟时间相等。
其中“开始”按键当开关由1拨向0(由上向下拨)时开始计时;“清零(复位)”按键当开关由1拨向0(由上向下拨)时数码管清零(复位),此时若再拨“开始”按键则又可重新开始计时。
1)电源部分需要并联四个电容,以达到滤波作用,获得实验所需的电压;2)利用三极管分别连接LED数码管和EPM7064,起到放大(电流)作用;3)本实验时钟信号的产生有晶振直接提供,同时由编写的子程序决定输出频率;4)芯片所需程序由计算机编译,采用Quartus II软件,编译调试无误后,进行下载;5)IDI、TMS、TCK、TDO是JTAG的标准线。
用来实现连接芯片,实现下载功能。
五、原理图跟据数字秒表的原理图如图一所示,为设计项目选定CyclongII系列中的EP2C35F672C6器件,锁定顶层设计中各端口所对应的引脚号,并编译通过。
然后对器件编程,使用USB-Blaste下载电缆把项目以在线配置的方式下载到Altera DE2实验板的EP2C35F672C6器件中。
该数字式秒表具有清零功能,通过KEY0来控制,能够在计时过程中随时清零。
用SW0键来控制锁存/计时,能在计时过程中通过按SW0键,SW0拨动开关打上时计时暂停,打下时仍继续。
实验证明该秒表工作正常,基本上已达到了预期的设计要求。
图一、数字秒表原理图六、PCB图图二、数字秒表PCB图七、系统软件设计在设计电路时,要遵循从上到下的设计原则。
首先从系统设计入手,在顶层进行功能划分和结构设计,顶层模块的每个层次模块均可完成一个较为独立的功能,次模块在调试成功后可生成一个默认符号,以供上一层模块调用。
本系统由4个模块组成,分别是分频电路模块、模10计数模块和动态译码显示模块。
本设计最小计时单位为0.1s,设计时需获得一个比较精确的10Hz(周期为0.1s)的计时脉冲。
由于最终的设计结果要下载到可编程逻辑器件中测试,因此可利用Altera DE2开发板的12M晶振时钟。
将12M时钟信号CLK送到分频器CLKGEN进行60万分频后,得到10Hz的频率由NEWCLK输出。
采用Verilog语言编程,编译无误通过后创建默认文件符号CLKGEN以供上层电路调用。
程序实现如下:module clock(clk,key,dig,seg); //模块名clockinput clk; //输入时钟input[1:0] key; //输入按键output[7:0] dig; //数码管选择输出引脚output[7:0] seg; //数码管段输出引脚reg[7:0] seg_r; //定义数码管输出寄存器reg[7:0] dig_r; //定义数码管选择输出寄存器reg[3:0] disp_dat; //定义显示数据寄存器reg[24:0]count; //定义计数寄存器reg[15:0]hour; //定义现在时刻寄存器reg sec,keyen; //定义标志位reg[1:0]dout1,dout2,dout3; //寄存器wire[1:0]key_done; //按键消抖输出assign dig = dig_r; //输出数码管选择assign seg = seg_r; //输出数码管译码结果//秒信号产生部分always @(posedge clk) //定义clock上升沿触发begincount = count + 1'b1;if(count == 25'd6000000) //0.5S到了吗?begincount = 25'd0; //计数器清零sec = ~sec; //置位秒标志endend//按键消抖处理部分assign key_done = (dout1 | dout2 | dout3); //按键消抖输出always @(posedge count[17])begindout1 <= key;dout2 <= dout1;dout3 <= dout2;endalways @(negedge key_done[0])beginkeyen = ~keyen; //将琴键开关转换为乒乓开关end//数码管动态扫描显示部分always @(posedge clk) //count[17:15]大约1ms改变一次begincase(count[17:15]) //选择扫描显示数据3'd0:disp_dat = hour[3:0]; //秒个位3'd1:disp_dat = hour[7:4]; //秒十位3'd2:disp_dat = hour[11:8]; //分个位3'd3:disp_dat = hour[15:12]; //分十位endcasecase(count[17:15]) //选择数码管显示位3'd0:dig_r = 8'b11111110; //选择第一个数码管显示3'd1:dig_r = 8'b11111101; //选择第二个数码管显示3'd2:dig_r = 8'b11111011; //选择第三个数码管显示3'd3:dig_r = 8'b11110111; //选择第四个数码管显示endcaseendalways @(posedge clk)begincase(disp_dat)4'h0:seg_r = 8'hc0; //显示04'h1:seg_r = 8'hf9; //显示14'h2:seg_r = 8'ha4; //显示24'h3:seg_r = 8'hb0; //显示34'h4:seg_r = 8'h99; //显示44'h5:seg_r = 8'h92; //显示54'h6:seg_r = 8'h82; //显示64'h7:seg_r = 8'hf8; //显示74'h8:seg_r = 8'h80; //显示84'h9:seg_r = 8'h90; //显示9//4'ha:seg_r = 8'hbf; //显示-default:seg_r = 8'hff; //不显示endcase//if((count[17:15]== 3'd2)&sec)//seg_r = 8'hff;end//计时处理部分always @(negedge sec or negedge key_done[1])//计时处理beginif(!key_done[1]) //是清零键吗?beginhour = 16'h0; //是,则清零endelse if(!keyen)beginhour[3:0] = hour[3:0] + 1'b1; //秒加1if(hour[3:0] == 4'ha)beginhour[3:0] = 4'h0;hour[7:4] = hour[7:4] + 1'b1; //秒的十位加一if(hour[7:4] == 4'h6)beginhour[7:4] = 4'h0;hour[11:8] = hour[11:8] + 1'b1;//分个位加一if(hour[11:8] == 4'ha)beginhour[11:8] = 4'h0;hour[15:12] = hour[15:12] + 1'b1;//分十位加一if(hour[15:12] == 4'h6)hour[15:12] = 4'h0;endendendendendendmodule在QuartusII环境下,打开一个新的原理图编辑窗口,然后调入秒表电路设计所需要的50万分频器CLKGEN、十进制计数器/分频器CNT10(4片),译码器DISP,以及电路需要的输入/输出元件。
完成电路元件之间和输出/输入之间的连接,并通过QuartusII的编译八、焊接调试电路板组装心得:收集资料,设计出电路原理图,选择元件型号,清点元器件的个数。
测试元件,包括测电阻的阻值,根据电路图和电路板本身的实际连通情况开始整体布局连接电路。