FPGA数字跑表

合集下载

基于FPGA的数字跑表功能的数字钟设计

基于FPGA的数字跑表功能的数字钟设计

摘要近年来,科学技术发展飞速,人们的生活质量也不断提高。

传统的时钟已经无法满足现代人的生活要求。

多功能数字钟无论在形态还是在性能上都改变了原有的风格。

本次设计基于原始的数字钟,在此基础上增加了诸项功能。

不仅具备时,分,秒计数功能,另外增加了校时功能,整点报时功能,闹钟功能以及数字跑表功能。

设计中采用了EDA技术,使用硬件描述语言Verilog HDL对各大功能模块的逻辑功能进行代码编写。

于QuartusII软件环境下,采用层次化设计与模块化设计的方法,由各个功能模块连接建立顶层图,构成基于FPGA的多功能数字钟。

设计实验板的主芯片为EP3C25Q240C8,多功能数字钟由分频器模块,时钟计数模块,校时控制模块,闹钟模块,整点报时与音乐演奏模块,数据选择模块,译码显示模块,按键去抖动模块和数字跑表模块构成。

经过程序编译和模块仿真,在实验板上下载验证,该系统可以完成时,分,秒的正常显示,通过按键切换功能模式,进入闹钟时间设定,校时,数字跑表模式。

可以手动调整时间,设定闹钟及数字跑表计时。

关键词:FPGA;Verilog HDL;数字钟;THE DIGITAL CLOCK WITH STOPWATCH FUCTIONABSTRACTIn recent years, the rapid development of science technology, quality of life is also rising. Traditional clock has been unable to meet the requirements of modern life. Both in the form of multi-function digital clock or in the performance has changed the original style.The design is based on the original digital clock, on the basis of it increased various functions. Not only have the time, minutes, seconds count function, also add the function of adjusting time, the whole point timekeeping function, alarm function and digital stopwatch functions. EDA technology used in the design, using Verilog HDL hardware description language for logic functions in major functional modules of code to write. Under Quartus II software environment, using hierarchical design methods and modular design, the top chart established by the various functional modules connecting each other, constitute FPGA-based multifunctional digital clock.The main system chip of design experiment board is EP3C25Q240C8, multifunctional digital clock is composed of the divider module, the clock counting module, the adjust time control module, the alarm module, the whole point timekeeping and music module, the data selection module, the decoding module, the key to jitter module and digital stopwatch module. After the program compiled and module simulation, download on the breadboard validation, The system can complete hours, minutes, seconds display properly, through the key switch function mode, enter the alarm time setting, adjustment time, digital stopwatch mode. You can adjust the time manually, set the alarm and digital stopwatch timer.Keywords:FPGA;Verilog HDL;Digital clock;目录摘要 (i)ABSTRACT ............................................................... i i 第一章绪论 . (1)1.1 基于FPGA数字钟的背景和意义 (1)1.2 课题的研究方法和相关技术的发展 (1)1.3 本文的研究目的和主要研究内容 (2)第二章 FPGA简介 (3)2.1 FPGA的原理与基本结构 (3)2.2 FPGA设计流程 (3)第三章 Quartus II 简介 (4)第四章数字钟总体设计方案 (5)4.1数字钟的基本构成 (5)4.2数字钟的工作原理 (5)第五章数字钟的具体设计流程 (6)5.1 本设计的顶层图 (6)5.2 分频模块 (6)5.3 按键去抖动模块 (7)5.4 时钟模块 (8)5.4.1 模式切换功能 (9)5.4.2 时钟计数功能 (9)5.4.3 校时控制功能 (10)5.4.4 闹钟设定功能 (10)5.4.5 数字跑表功能 (11)5.5 数据选择模块 (11)5.6 译码显示模块 (13)5.7 闹钟音乐模块 (14)5.8 整点报时与音乐演奏模块 (15)结束语 (17)致谢 (18)参考文献 (19)附录A FPGA器件EP3C25_V5电路板 (21)附录B 本设计使用的EP3C25_V5管脚配置文件 (22)程序源代码 (23)第一章绪论1.1 基于FPGA数字钟的背景和意义现今的电子产品要求功能要多样,体积越小越好,且功耗应达到最低[1]。

fpga跑表课程设计

fpga跑表课程设计

fpga跑表课程设计一、课程目标知识目标:1. 理解FPGA的基本原理,掌握跑表设计的基础知识;2. 学会使用硬件描述语言(如VHDL/Verilog)进行FPGA设计;3. 掌握跑表设计的时序逻辑和组合逻辑,并能够运用到实际设计中;4. 了解FPGA设计中时钟信号的重要性,学会合理分配时钟资源。

技能目标:1. 能够运用所学知识,独立完成FPGA跑表的设计与仿真;2. 培养学生的实际操作能力,提高问题分析和解决能力;3. 学会使用相关软件工具(如Quartus、Vivado等)进行FPGA设计;4. 培养学生的团队协作能力,提高项目完成效率。

情感态度价值观目标:1. 培养学生对电子设计及FPGA技术的兴趣,激发创新意识;2. 培养学生严谨、认真的学习态度,养成良好的学术道德;3. 引导学生关注社会发展,认识到FPGA技术在现代科技中的重要性;4. 培养学生克服困难的意志,提高面对挑战的自信心。

本课程针对高年级学生,结合学科特点,注重理论与实践相结合。

通过本课程的学习,使学生能够掌握FPGA跑表设计的核心知识,提高实际操作能力,培养学生的创新意识和团队协作精神,为今后从事相关领域工作打下坚实基础。

二、教学内容1. FPGA基础知识:- FPGA原理与结构;- 硬件描述语言基础(VHDL/Verilog);- 常用FPGA开发工具介绍。

2. 跑表设计原理:- 跑表功能需求分析;- 时序逻辑与组合逻辑设计;- 时钟信号分配与设计。

3. FPGA跑表设计实践:- 设计流程与方法;- 代码编写与仿真;- FPGA配置与测试。

4. 教学大纲安排:- 第一周:FPGA原理与硬件描述语言基础;- 第二周:跑表设计原理与时序逻辑设计;- 第三周:组合逻辑设计及时钟信号分配;- 第四周:FPGA跑表设计实践与项目指导;- 第五周:项目验收与评价。

教学内容关联教材章节:- 第一章:FPGA原理与结构;- 第二章:硬件描述语言基础;- 第三章:数字电路设计;- 第四章:FPGA设计实例。

FPGA LCD1602 时钟 跑表

FPGA   LCD1602  时钟 跑表
data <= 0;
en_sel <= 1'b1;
count<=0;
end
else
case(state)
clear_lcd:
end
always @(posedge clk_LCD,negedge rst)//initial
begin
if(!rst)
begin
state <= clear_lcd;
RS <= 0;
write_data=4, //and one
write_data_first= 5; //write data
assign RW = 0; //write
assign lcd_e = en_sel ? clk_LCD : 0;
reg [7:0] data_in [4:0];
always @(posedge clk)
if(mode==1)
begin
data_in[0]<=8'ha0;
data_in[1]<=8'ha0;
data_in[2]<=8'ha0;
module lcd_1602(clk,rst,mode,add,RS,lcd_e,data);
input clk, rst, mode, add;
output RS,lcd_e;
output [7:0] data ;
wire clk_LCD, clk1hz, clk1khz,clk100hz;
input [3:0] h1,h2,m1,m2;
input [2:0] modecount;
output reg RS;

跑表-《现代电子技术综合实验》实验报告

跑表-《现代电子技术综合实验》实验报告

电子科技大学《现代电子技术综合实验》实验报告实验题目基于FPGA的数字跑表设计姓名xxx学号xx学院通信与信息工程学院专业通信工程指导老师陈学英指标1、跑表精度为0.01秒2、跑表计时范围为:1小时3、设置开始计时/停止计时、复位两个按钮4、显示工作方式:用六位BCD 七段数码管显示读数。

显示格式:扩展功能:按键消抖选手分时显示要求(1) 设计出符合设计要求的解决方案(2) 设计出单元电路(3) 利用EDA 软件对各单元电路及整体电路进 行仿真(4) 在开发板上实现设计(5) 撰写设计报告分 秒 0.01秒设计方框图单元电路划分计数器分频器使能控制器(开关,复位等以设置到计数器中,没有单独设计模块,特此说明下)扫描显示控制器各单元电路设计计数器程序中本应该采用写一个六进制和十进制的计数器,然后采用画图的方法实现总计数器的设计(即采用两个六进制计数器和四个十进制计数器),本实验中采用了直接对总的计数器进行总体描述来实现(因为编写相对简单,不易处错误)。

用了一个特别长的一大串if内嵌套if进行处理。

同时,里面直接写了开始和复位的功能,相当于把使能模块并入其中。

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

所以必须对其进行处理,否则在按键按下一次后,run/stop 会反转多次。

消抖方法分为硬件消抖和软件延时消抖。

在FPGA 中可以定义三个D 触发器,进行硬件3ms 消抖(时间可以根据实际情况而定)。

代码如下:module myroad(i nput clk100,//100hz时钟input clk1000,//1000hz时钟input reset,//复位键input key,//开始停止按键output reg [3:0] num0,//跑表的最低位output reg [3:0] num1,//跑表的第2位output reg [3:0] num2,//跑表的最3位output reg [3:0] num3,//跑表的最4位output reg [3:0] num4,//跑表的最5位output reg [3:0] num5//跑表的最6位);reg keyout,run;//key的衍生内部信号reg clr,dout1,dout2,dout3,do1,do2,do3;//reset的内部衍生信号,以及6个消抖的内部变量initial beginnum0<=0;num1<=0;num2<=0;num3<=0;num4<=0;num5<=0;run<=1;clr<=1;dout1<=1;dout2<=1;dout3<=1;do1<=1;do2<= 1;do3<=1;keyout<=1;End//赋初值,居然是被允许的,还是ISE比quarters要宽松一些。

电子实验数字跑表

电子实验数字跑表

电子科技大学基于FPGA的数字系统设计——数字跑表的设计学生姓名:学号:指导教师:摘要本文利用XILINX-ISE开发软件和XILINX EDA教学实验开发板实现数字跑表的开始、暂停以及复位等功能。

ISE工程利用VHDL语言编写,单模块包含时钟分频进程、始能及清零进程、时钟数据产生进程、位码产生进程和显示进程;分模块设计包含时钟分频模块、控制模块、计数器模块、显示模块。

计时区间00’00’’00到59’59’’99。

课余设计的单模块源程序: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 paobiao isPort ( clkin : in STD_LOGIC;enable : in STD_LOGIC;clear : in STD_LOGIC;seg : out STD_LOGIC_VECTOR (7 downto 0);wei : out STD_LOGIC_VECTOR (2 downto 0);enout : out STD_LOGIC);end paobiao;architecture Behavioral of paobiao issignal cnt100: integer range 1 to 240000;signal cnt1k: integer range 1 to 24000;signal clk100: std_logic:='0';signal clk1k : std_logic:='0';signal en: std_logic:='0';signal d1: integer range 0 to 5:=0;signal d2: integer range 0 to 9:=0;signal d3: integer range 0 to 5:=0;signal d4: integer range 0 to 9:=0;signal d5: integer range 0 to 9:=0;signal d6: integer range 0 to 9:=0;signal num: integer range 1 to 6:=1;beginenout<='0';process(clkin)beginif clkin'event and clkin='1' thenif cnt100=240000 thencnt100<=1;clk100<=not clk100;elsecnt100<=cnt100+1;end if;if cnt1k=24000 thencnt1k<=1;clk1k<=not clk1k;elsecnt1k<=cnt1k+1;end if;end if;end process;process(enable,clear)beginif clear='0' thenen<='0';elseif enable'event and enable='1' thenen<=not en;end if;end if;end process;process(clear,d1,d2,d3,d4,d5,d6)beginif clear='0' thend1<=0;d2<=0;d3<=0;d4<=0;d5<=0;d6<=0;-- en<=0;elseif en='1' and clk100'event and clk100='1' then if d6=9 thend6<=0;if d5=9 thend5<=0;if d4=9 thend4<=0;if d3=5 thend3<=0;if d2=9 thend2<=0;if d1=5 thend1<=0;elsed1<=d1+1;end if;elsed2<=d2+1;end if;elsed3<=d3+1;end if;elsed4<=d4+1;end if;elsed5<=d5+1;end if;elsed6<=d6+1;end if;end if;end if;end process;process(num)beginif clk1k'event and clk1k='1' thenif num=6 thennum<=1;elsenum<=num+1;end if;end if;end process;process(num)variable data: integer range 0 to 9;begincase num iswhen 1 => wei<="111";data:=d1;when 2 => wei<="110";data:=d2;when 3 => wei<="100";data:=d3;when 4 => wei<="011";data:=d4;when 5 => wei<="001";data:=d5;when 6 => wei<="000";data:=d6;end case;case data iswhen 0 => seg<="00000011";when 1 => seg<="10011111";when 2 => seg<="00100101";when 3 => seg<="00001101";when 4 => seg<="10011001";when 5 => seg<="01001001";when 6 => seg<="01000001";when 7 => seg<="00011111";when 8 => seg<="00000001";when 9 => seg<="00001001";end case;end process;end Behavioral;管脚分配NET "clkin" LOC = T8;NET "enout" LOC = D7;NET "seg<0>" LOC = C11;NET "seg<1>" LOC = A11;NET "seg<2>" LOC = B12;NET "seg<3>" LOC = A12;NET "seg<4>" LOC = C12;NET "seg<5>" LOC = C13;NET "seg<6>" LOC = A13;NET "seg<7>" LOC = B14;NET "wei<0>" LOC = F8;NET "wei<1>" LOC = D8;NET "wei<2>" LOC = E7;NET "clear" LOC = E4;NET "enable" LOC = G6;课时设计一、系统总体设计指标:1、跑表精度为0.01秒2、跑表计时范围为:1小时3、设置开始计时/停止计时、复位两个按钮4、显示工作方式:用六位BCD七段数码管显示读数。

基于FPGA的数字跑表设计报告

基于FPGA的数字跑表设计报告

基于FPGA的数字跑表设计报告姓名:学号:指导老师:***摘要:本文详细介绍了数字秒表的设计指标,设计思路,设计方案,系统电路设计,系统单元模块设计,系统硬件实现与测试的结果。

一 引言 科技高度发展的今天,集成电路和计算机应用得到了高速发展。

尤其是计算机应用的发展。

它在人们日常生活已逐渐崭露头角。

大多数电子产品多是由计算机电路组成,如:手机、mp3等。

而且将来的不久他们的身影将会更频繁的出现在我们身边。

各种家用电器多会实现微电脑技术。

电脑各部分在工作时多是一时间为基准的。

本文就是基于计算机电路的时钟脉冲信号、状态控制等原理设计出的数字秒表。

秒表在很多领域充当一个重要的角色。

在各种比赛中对秒表的精确度要求很高,尤其是一些科学实验。

他们对时间精确度达到了几纳秒级别。

二 项目任务与设计思路 本项目的任务是掌握使用VHDL 语言的设计思想;熟悉ise 软件的使用;了解XILINX 学生EDA 实验板。

了解 EDA 技术,对计算机系统中时钟控制系统进一步了解,掌握状态机工作原理,同时了解计算机时钟脉冲是怎么产生和工作的。

在掌握所学的计算机组成与结构课程理论知识时。

通过对数字秒表的设计,进行理论与实际的结合,提高与计算机有关设计能力,提高分析、解决 计算机技术实际问题的能力。

通过课程设计深入理解计算机结构与控制实现的技术,达到课程设计的目标。

项目任务与设计思路本项目的指标:1、跑表精度为0.01秒2、跑表计时范围为:1小时3、设置开始计时/停止计时、复位两个按钮4、显示工作方式:用六位BCD 七段数码管显示读数。

显示格式:三 基于VHDL 方法设计方案 VHDL 的设计流程主要包括以下几个步骤:1.文本编辑:用任何文本编辑器都可以进行,也可以用专用的HDL 编辑环境。

通常VHDL 文件保存为.vhd文件2.功能仿真:将文件调入HDL 仿真软件进行功能仿真,检查逻辑功能是否正确。

3.逻辑综合:将源文件调入逻辑综合软件进行综合,即把语言综合成最简的布尔表达式。

基于FPGA的数字跑表设计

基于FPGA的数字跑表设计

0 引言在科技高度发展的今天,随着大规模集成电路和计算机的发展,现代电子设计的方法与技术也在不断发生变化。

目前,比较有效的电子设计方法是将板卡设计、可编程逻辑设计和软件开发融合在一起。

而且,计算机的应用与发展已经在人们的日常生活中逐渐崭露头角。

大多数电子产品多是由计算机电路组成,本次设计的课题就是基于计算机电路的时钟脉冲信号、状态控制等原理设计出的数字跑表。

跑表是体育比赛中常用的计时仪器,所以对时间的精确度很高。

1 系统设计1.1 总体设计基于前面的分析,课题数字跑表设计由FPGA器件完成按键控制、数字的显示等核心数字电路的功能。

设计数字跑表,令它通过两个按键来控制计时的开始和结束,一个是清0控制按键,用于设置跑表为初始零状态;另一个是开始/停止控制按键,在清0控制按键无效的时候,按一下开始/停止键则计时器开始计时,再按一下则暂停计时,再按一下则继续计时。

数字跑表总体设计框图如图1所示。

1.2 各部分模块设计根据此设计流程,我们可以将数字跑表的设计分为三个主要部分:(1)分频首先根据FPGA器件的基础时钟,进行时钟的设计,将器件自带的时钟频率进行分频,分频成为课题数字跑表所需的时钟信号,课题要求输入时钟频率为100Hz,100Hz=0.01s,使其满足数字跑表计时精度为10ms的要求,我们已知的FPGA器件上自带的时钟信号为50MHz。

图1 数字跑表的流程框图(2)控制根据要求数字跑表要具有控制功能,通过两个按键控制,一个为清零控制按键,控制异步清零,和启动功能,用于设置跑表为初始零状态,另一个按键为开始/停止按键,控制数字跑表的启动和停止,按一下开始/停止键则计时器开始计时,再按一下则暂停计时,再按一下则继续计时。

(3)显示最后一步,对所得的数据进行处理,并将其显示。

由显示的时分秒用7段数码管显示出来。

将三个部分整合起来放在index, design idea, design scheme, circuit design of the system, design of the corresponding module of the system, system hardware implementation and test results.Keywords: digital stopwatch;FPGA;Verilog HDL language始/暂停按键)输出信号:MSH,MSL,SH,SL,MH,ML(7段数码管)分频部分器件图如图4所示。

基于FPGA的数字跑表设计

基于FPGA的数字跑表设计

摘要:本设计以Xilinx公司的XC3S200A芯片为核心,通过VHDL语言进行编程实现。

在48MHz时钟源输入下,通过分频、计数实现精度为百分之一秒的计时,最终用六位LED数码管显示,并可以通过两个按键控制跑表的复位、停止和启动。

一.引言大多数数字系统使用了两种不同的设计方法。

从硬件的角度来看,发展的动力是提高性能:更快、更小、功耗更低、价格更便宜。

这种方式需要巨额的费用,花费的时间也很长。

但是,从软件的角度看,更倾向于使用一个标准的处理器架构,这样只要开发出应用软件然后下载到这些平台即可。

但是由于对操作系统的需求、编译器的低效率等原因,也会造成大的开销。

结果,作为一种折中的方式,可编程器件就被开发出来了。

它拥有众多的优点:在高性能的平台上进行硬件设计,拥有最优化的资源,不需要操作系统,可重新配置等。

现场可编程门阵列(Field Programmable Gate Array,FPGA)是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物,不但有较高的性能,同时又具备可编程逻辑的灵活性和可重用性。

二.项目任务与设计思路跑表设计指标:1、跑表精度为0.01秒2、跑表计时范围为:1小时3、设置开始计时/停止计时、复位两个按钮4、显示工作方式:用六位BCD八段数码管显示读数。

显示格式:分秒0.01秒设计思路简述:1、按键:两个按键均采用边缘触发,其中复位键按下后将强制归零并屏蔽启停键作用,启停键每次生效将使计数器的开关状态翻转一次。

2、计数:由于原始时钟频率为48MHz,故先对源时钟进行480000进制计数,以产生间隔为1ms的进位信号,对该信号进行计数并进位,可得到百分秒的计数值,以此类推,可得到十分秒、秒、十秒、分、十分的计数值,需要注意的是,对十秒和十分的计数应是六进制的。

3、LED显示:由于LED采用动态显示,位选与段选使用同一个1KHz的时钟信号进行同步。

其中位选信号从低位到高位一次点亮各位数码管,当某位数码管被点亮时,相应的段选信号就会被送至数码管,控制其显示字符。

数字跑表实验设计

数字跑表实验设计

数字跑表 设计报告设计任务:在掌握了VHDL 硬件编程语言和了解了基本的FPGA 设计步骤后,设计出一个符合设计指标的数字跑表,并下载到实验板上通过验证。

设计指标:1、跑表精度为0.01秒2、跑表计时范围为:1小时3、设置开始计时/停止计时、复位两个按钮4、显示工作方式:用六位BCD 七段数码管显示读数。

显示格式:设计步骤:(1) 设计出符合设计要求的解决方案。

(2) 设计出单元电路。

(3) 利用EDA 软件对各单元电路及整体电路进行仿真。

(4) 利用EDA 软件在ELB 电子课程设计实验箱上实现设计。

(5) 撰写设计报告。

设计思路:首先,分析一个完整的数字跑表的具有哪些功能:1、计时功能 2、相应的控制按钮 3、显示计数结果的功能模块;接下来就开始考虑如何应用电路实现上述的三个模块: 1、计时模块应包括稳定、准确的时钟输入和计数模块,考虑到设计指标要求跑表精度为0.01秒,那么计数脉冲的时钟输入就应该是频率为100HZ 的脉冲,而实验板上提供的晶振是32MHZ ,所以先要设计一个320000分频器,分频器的输出才可作计数器的输入;其次计数模块设计应综合考虑跑表的计时范围(1小时)和显示输出(6位输出),6位输出中有两位是六进制输出,其余四位是十进制输出,所以可通过设计4个模10计数器和2个模6分 秒 0.01秒计数器来实现,其中较低位的进位输出就是高位的计数输入端。

2、根据设计指标的要求,控制模块应包括开始计时/停止计时、复位两个按钮,即电路设计经常用到的史能端和清零端,这两个控制端口直接接到计数器的清零和史能端即可实现、复位、开始计时/停止计时;但是外围史能输入需要经过史能转换电路后,才可变为计数器可用的史能控制信号。

3、显示计数结果的模块实现较为简单,只需将六位计数结果通过七段译码电路接到输出即可点亮数码管,无需时序控制,直接用组合逻辑电路就可以实现。

数码管显示可以采用扫描显示,用一个频率1KHz的信号扫描一个多路选择器,实现对六位已经锁存的计数结果的扫描输出。

FPGA数字跑表

FPGA数字跑表

电子信息工程专业FPGA与ASIC设计实践教程设计报告班级:电子信息工程1303班学号:201315110: 田佳鑫日期:2015年11月4日指导老师:何英昊目录1系统总体方案及硬件设计 (3)1.1设计容 (3)1.2 设计要求 (3)1.3 实现要求 (3)2各模块设计及电路图 (3)2.1设计项目简介 (3)2.2分块设计代码 (4)2.3总体框图设计 (7)2.4管脚锁定图 (8)3课程设计体会 (8)1系统总体方案及硬件设计1.1 设计容数字跑表电路1.2设计要求(1)跑表的计时围为0.01—59min59.99s。

(2)具有异步清零、启动。

计时和暂停功能。

(3)输入时钟频率为100Hz。

(4)要求数字跑表的输出能够直接驱动共阴极7段数码管。

1.3 实现要求(1)分析功能要求,划分功能模块。

(2)编写各模块的Verilog HDL语言设计程序。

(3)在QuartusⅡ软件或其他EDA软件上完成设计和仿真。

(4)根据实验装置上的CPLD/FPGA芯片,在适配时选择相应的芯片,将设计生成配置文件或JEDEC文件,然后将配置文件或JEDEC文件下载到实验装置上运行,操作实验装置上设定的功能开关,验证设计功能。

2各模块设计及电路图2.1 设计项目简介主控模块分别连接6个数码管显示模块和分频模块,分频模块给主控模块的计数器提供时钟源,主控模块在按键的控制下,在其中计数器的作用下输出给数码管显示装置,实现跑表功能。

2.2分块设计代码(1)分频模块:module fenpin(CLK,CLK2);//输入50MHz,输出分频到1Hzinput CLK;output CLK2;reg CLK2;reg[31:0] counter2;parameter N2=5000000; always(posedge CLK)beginif(counter2==250000)begincounter2<=0;CLK2<=~CLK2;endelsecounter2<=counter2+1;endendmodule(2)控制模块:module sz(clk,clr,pause,msh,msl,sh,sl,mh,ml); inputclk,clr;input pause;output[3:0]msh,msl,sh,sl,mh,ml;reg[3:0]msh,msl,sh,sl,mh,ml;reg1,2;always(posedgeclk or posedgeclr)beginif(clr)begin{msh,msl}<=8'h00;1<=0;endelseif(!pause)beginif(msl==9)beginmsl<=0;if(msh==9)beginmsh<=0;1<=1;endelsemsh<=msh+1;endelsebeginmsl<=msl+1;1<=0;endendalways(posedge1 or posedgeclr) beginif(clr)begin{sh,sl}<=8'h00;2<=0;endelseif(sl==9)beginsl<=0;if(sh==5)beginsh<=0;2<=1;endelsesh<=sh+1;endelsebeginsl<=sl+1;2<=0;endendalways(posedge2 or posedgeclr) beginif(clr)begin{mh,ml}<=8'h00;endelseif(ml==9)beginml<=0;if(mh==5)mh<=0;elsemh<=mh+1;endml<=ml+1;endendmodule(3)显示模块:module XS7D(DIN,DOUT);input [3:0]DIN;output [6:0]DOUT;reg [6:0]DOUT;always (DIN)begincase(DIN) 0:DOUT='b1000000;1:DOUT='b1111001;2:DOUT='b0100100;3:DOUT='b0110000;4:DOUT='b0011001;5:DOUT='b0010010;6:DOUT='b0000010;7:DOUT='b1111000;8:DOUT='b0000000;9:DOUT='b0010000; 10:DOUT='b0001000; 11:DOUT='b0000011; 12:DOUT='b1000110; 13:DOUT='b0100001; 14:DOUT='b0000110; 15:DOUT='b0001110; endcaseendendmodule2.3总体框图设计2.4管脚锁定图三、课程设计体会习制作数字跑表,我对于可编程逻辑器件有了更加深刻地体会。

数字跑表设计

数字跑表设计

西南科技大学设计报告课程名称:基于FPGA的现代数字系统设计设计名称:基于原理图的数字跑表设计姓名:学号:班级:指导教师:西南科技大学信息工程学院一、实验目的1、设计一个数字跑表,具有复位、暂停、秒表等功能二、实验原理1.完成一个具有数显输出的数字跑表计数器设计,原理图如下图所示。

、数字跑表计数器原理图任务分析:输入端口:1)复位信号CLR,当CLR=1,输出全部置0,当CLR=0,系统正常工作。

2)暂停信号PAUSE,当PAUSE=1,暂停计数,当PAUSE=0,正常计数。

3)系统时钟CLK,CLK=50MHz输出端口:数码管驱动----DATA1,位宽14位,其中,DATA1[7:0]是数码管显示值,DATA1[14:8]是数码管控制端口屏蔽未用端口---ctr,位宽是2,将未用的两个数码管显示关闭(1)跑表的计时范围为0.01s~59min59.99s,计时精度为10ms;(2)具有异步复位清零、启动、计时和暂停功能;(3)输入时钟频率为100Hz;(4)要求数字跑表的输出能够直接驱动共阴极7段数码管显示.按照自顶向下设计,应该分为以下模块:分频----将下载板上50MHz时钟分频为周期是0.01秒的时钟,提供给百分计数计数1----百分计数,输入周期是0.01秒的时钟,计数,满100进位,注意个位,十位的不同生成计数2---60进制计数器,输入百分位,或者秒位的进位,计数,满60向高位进位,注意个位,十位的不同生成数码管显示控制----驱动数码管数据,显示控制端口。

三、实验步骤1、数码管显示驱动模块的设计(1)建立工程:file->New Project,并注意器件、EDA工具的正确选择(2)建立新Verilog HDL模块编辑窗口,选择资源类型为Verilog Module,并输入合法文件名,在文本编辑窗口输入代码。

(3)执行综合得到综合后的电路,并进行功能时序仿真。

2.计数器模块的设计设计步骤同数码管的设计,并完成模块的设计输入、综合、功能仿真。

基于FPGA数字跑表的设计

基于FPGA数字跑表的设计

基于FPGA数字跑表的设计现代电子技术实验报告数字跑表的设计目录 (2)一、基于FPGA的VHDL设计流程 (3)1.1 VHDL语言介绍 (3)1.1.1 VHDL的特点 (3)1.2 FPGA开发介绍 (4)1.2.1 FPGA简介 (4)1.2.2 FPGA设计流程 (4)1.2.3 实验板使用芯片XC3S200A介绍 (6)二、总体电路的设计 (6)2.1设计要求 (6)2.2系统工作原理 (6)2.3单元电路的划分 (6)三、电子秒表的单元电路设计 (7)3.1 电子秒表的设计过程及结果分析 (7)3.1.1 分频器 (7)3.1.2按键消抖 (8)3.1.3 控制电路 (8)3.1.4 计数器 (9)3.1.5 寄存器 (12)3.1.6 显示模块 (15)3.1.7 使能模块 (17)四、顶层设计 (18)4.1 顶层设计 (18)4.2 分配引脚和下载实现 (19)4.3 测试结果及结论 (20)五、经验及收获 (22)一、基于FPGA的VHDL设计流程1.1 VHDL语言介绍VHDL(Very-high-speed Integrated Circuit Hardware Description Language)诞生于1982年.1987年底,VHDL被IEEE(The Institute of Electrical and Electronics Engineers)和美国国防部确认为标准硬件描述语言.自IEEE公布了VHDL的标准版本(IEEE-1076)之后,各EDA公司相继推出了自己的VHDL设计环境,并宣布自己的设计工具可以和VHDL接口.此后VHDL在电子设计领域得到了广泛的接受,并逐步取代了原有的非标准硬件描述语言.1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能力上扩展VHDL的内容,公布了新版本的VHDL,即IEEE标准的1076-1993版本.现在,VHDL和VERILOG作为IEEE的工业标准硬件描述语言,又得到众多EDA公司的支持,在电子工程领域,已成为事实上的通用硬件描述语言.有专家认为,在新的世纪中,VHDL和VERILOG语言将承担起几乎全部的数字系统设计任务.1.1.1 VHDL语言的特点与其他硬件描述语言相比,VHDL具有以下特点:1、功能强大、设计灵活:VHDL具有功能强大的语言结构,可以用简洁明确的源代码来描述复杂的逻辑控制.它具有多层次的设计描述功能,层层细化,最后可直接生成电路级描述.VHDL支持同步电路、异步电路和随机电路的设计,这是其他硬件描述语言所不能比拟的.VHDL还支持各种设计方法,既支持自底向上的设计,又支持自顶向下的设计;既支持模块化设计,又支持层次化设计.2、支持广泛、易于修改:由于VHDL已经成为IEEE标准所规范的硬件描述语言,大多数EDA工几乎都支持VHDL,这为VHDL的进一步推广和广泛应用奠定了基础.在硬件电路设计过程中,主要的设计文件是用VHDL编写的源代码,因为VHDL易读和结构化,所以易于修改设计.3、强大的系统硬件描述能力:VHDL具有多层次的设计描述功能,既可以描述系统级电路,又可以描述门级电路.而描述既可以采用行为描述、寄存器传输描述或结构描述,也可以采用三者混合的混合级描述.另外,VHDL支持惯性延迟和传输延迟,还可以准确地建立硬件电路模型.VHDL支持预定义的和自定义的数据类型,给硬件描述带来较大的自由度,使设计人员能够方便地创建高层次的系统模型.4、独立于器件的设计、与工艺无关:设计人员用VHDL进行设计时,不需要首先考虑选择完成设计的器件,就可以集中精力进行设计的优化.当设计描述完成后,可以用多种不同的器件结构来实现其功能.5、很强的移植能力:VHDL是一种标准化的硬件描述语言,同一个设计描述可以被不同的工具所支持,使得设计描述的移植成为可能.6、易于共享和复用:VHDL采用基于库(Library)的设计方法,可以建立各种可再次利用的模块.这些模块可以预先设计或使用以前设计中的存档模块,将这些模块存放到库中,就可以在以后的设计中进行复用,可以使设计成果在设计人员之间进行交流和共享,减少硬件电路设计.1.2 FPGA开发介绍现场可编程门阵列(FPGA)器件是八十年代中期出现的新产品,它的应用大大地方便了IC的设计,因而随着数字技术日益广泛的应用,以FPGA为代表的ASIC器件得到了迅速的普及和发展,器件集成度和速度都在高速增长.传统的电路设计过程是:先画原理图、把原理图绘制成印制电路板图、再制版、安装、调试.有了FPGA,我们只需要在计算机上绘出原理图,再运行相应的软件,就可把所设计的逻辑电路在FPGA中实现.所有步骤均可自动完成.电子设计工程师自己设计专用集成电路成为了一件很容易的事情.FPGA作为专用集成电路(ASIC)概念上的一个新型范畴和门类,以其高度灵活的用户现场编程方式,现场定义高容量数字单片系统的能力,能够重复定义、反复改写的新颖功能,为复杂数字系统设计、研制以及产品开发提供了有效的技术手段.电子应用设计工程师应用FPGA技术不仅可避免通常ASIC单片系统设计周期长,前期投资风险大的弱点,而且克服了过去板级通用数字电路应用设计的落后,繁琐和不可靠性.目前FPGA的两个重要发展与突破是,大多数厂商在其高端器件上都提供了片上的处理器(如CPU、DSP)等硬核(Hard Core)或固化核(Fixed Core).比如Xilinx的Virtex IIPro芯片可以提供Power PC,而Altera的Stratix、Excalibur等系列芯片可以提供Nios、DSP和Arm等模块.在FPGA上集成微处理器,使SOPC设计更加便利与强大.另一个发展是在不同器件商推出的高端芯片上大都集成了高速串行收发器,一般能够达到3Gb/s以上的数据处理能力,在Xilinx、Altera、Lattice都有相应的器件型号提供该功能.这些新功能使FPGA的数据吞吐能力大幅度增强.1.2.2 FPGA设计流程对于目标器件为FPGA和CPLD的HDL设计,其工程设计的基本流程如图:图1FPGA设计流程图1、文本编辑用任何文本编辑器都可以进行,通常VHDL文件保存为vhd文件,Verilog文件保存为v文件.2、使用编译工具编译源文件HDL的编译器有很多,ACTIVE公司,MODELSIM公司,SYNPLICITY公司,SYNOPSYS公司,VERIBEST公司等都有自己的编译器.3、逻辑综合将源文件调入逻辑综合软件进行综合.综合的目的是在于将设计的源文件由语言转换为实际的电路.但是此时还没有在芯片中形成真正的电路.这一步的最终目的是生成门电路级的网表(Netlist).4、布局、布线将第3步生成的网表文件调入PLD厂家提供的软件中进行布线,即把设计好的逻辑安放到CPLD/FPGA内.这一步的目的是生成用于下载(编程Programming)的编程文件.在这一步,将用到第3步生成的网表,并根据CPLD /FPGA厂商的器件容量,结构等进行布局、布线.这就好像在设计PCB时的布局布线一样.先将各个设计中的门根据网表的内容和器件的结构放在器件的特定部位.然后,在根据网表中提供的各门的连接,把各个门的输入输出连接起来.最后,生成一个供编程的文件.这一步同时还会加一些时序信息(Timing)到你的设计项目中去,以便于你做后仿真.5、后仿真利用在布局布线中获得的精确参数,用仿真软件验证电路的时序.(也叫布局布线仿真或时序仿真).这一步主要是为了确定你的设计在经过布局布线之后,是不是还满足你的设计要求.6、编程,下载如果前几步都没有发生错误,并且符合设计要求,这一步就可以将由适配器等产生的配置或下载文件通过编程器或下载电缆下载到目标芯片中.7、硬件测试硬件测试的目的是为了在更真实的环境中检验HDL设计的运行情况,特别是对于HDL 程序设计上不是十分规范,语义上含有一定歧义的程序.1.2.3 实验板使用芯片XC3S200A介绍本实验设计中采用的是Xilinx公司的ETL-001 FPGA开发板进行开发设计,该开发板所提供的主芯片XC3S200A是Xilinx公司最新推出的90nm半导体工艺的低端低成本的FPGA芯片,可以广泛地运用在通信,军事,电力,控制,消费电子,汽车电子绝大多数电子应用领域.芯片主要特性如下表1所示:表1实验板XC3S200A该芯片是基于SRAM工艺的超大规模可编程逻辑芯片,提供了高达20万的等效系统门,3854个查找表(LUT),3854个寄存器(FF),288Kbit的块状SRAM以及16个18*18的乘法器,以及60对差分I/O,LVD.芯片主要特性如上表示.二、系统总体设计2.1 电子秒表的设计任务目标1、跑表精度为0.01秒2、跑表计时范围为:1小时3、设置开始计时/停止计时、复位两个按钮4、显示工作方式:用六位BCD七段数码管显示读数.显示格式:00:00:00扩展功能:按键消抖;选手时间分时显示;2.2系统工作原理系统基本流程图如图:图1系统基本流程图2.3单元电路的划分根据要求设计的电路包括以下几个模块:1.分频器:由于我们要以1ms为最小单位进行计时.分频器的功能是对晶体振荡器产生的48MHz时钟信号进行分频,产生1KHz的基准信号,对晶体振荡器产生的时钟信号进行分频,产生时间基准信号.2.计数锁存器:由于我们要实现按不同的键让秒表产生不同的反应.所以需要这个模块对时间基准脉冲进行计数,完成计时功能.并完成对数据的锁存使显示保持暂停.3.控制器:由于我们要实现按不同的键让秒表产生不同的反应.所以需要这个模块控制计数器的运行、停止以及复位,产生锁存器的使能信号.4.按键消抖电路:由于普通按键会产生抖动现象,只按一下,可能出现多次抖动的现象,使按键不灵敏.所以需要消除按键输入信号抖动的影响,输出单脉冲.5.扫描显示的控制电路:包括扫描计数器、数据选择器和7段译码器,控制8个数码管以扫描方式显示计时结果.单元电路划分总框图如下图2:图2单元电路划分总框图三、单元电路设计3.1单元电路设计思路3.1.1分频器分频器的功能是对晶体振荡器产生的48MHz时钟信号进行分频,产生1KHz和100Hz的基准信号.对于频率为1khz的信号,分频系数为48000,因此需要一个24000进制的计数器,每当计数24000个时钟,分频输出信号c1000取反一次,c1000取反两次得到一个周期的信号.这样可实现对输入时钟信号的4800次分频,从而得到1khz的信号.对于频率为100hz 的信号,原理相同,分频系数为480000.生成的分频器模块如图3所示:图3分频器模块其中,clkin为48MHz晶振时钟信号;c1000为分频输出的1KHz时钟信号,c100为分频输出的100Hz时钟信号.设计程序如下:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_arith.ALL;use IEEE.STD_LOGIC_unsigned.ALL; entity fdiv isPort ( clkin : in STD_LOGIC;c1000 : out STD_LOGIC;c100 : out STD_LOGIC); end fdiv;architecture Behavioral of fdiv issignal c1000_temp:integer range 0 to 23999:=0;signal c100_temp:integer range 0 to 239999:=0;signal fd1000,fd100:STD_LOGIC:='0'; beginprocess (clkin) isbeginif rising_edge(clkin) thenif c1000_temp=23999 thenc1000_temp<=0;fd1000<= not fd1000;else c1000_temp<=c1000_temp+1;end if;end if;end process;c1000 <=fd1000;process (clkin) isbeginif rising_edge(clkin) thenif c100_temp=239999 thenc100_temp<=0;fd100<= not fd100;else c100_temp<=c100_temp+1;end if;end if;end process;c100 <=fd100;end Behavioral;仿真波形图4如下图4分频器仿真波形由仿真波形可知,分频器的设计是符合预期期望的,当产生输入晶振信号时,经过分频器内部处理的信号最终产生两个输出信号,分别是1KHz和100Hz,由波形图可以看出,当时钟信号计数24000个脉冲时,1KZ的波形翻转一次,从而产生1KZ的信号;同理,100Hz的信号也符合预期设计.3.1.2按键消抖由于实验板上的按键,在按下和松开的短暂时间里,会出现抖动现象,这样会严重影响按键的效果,故此需要设计一个消抖电路,来消除这种不利的影响,按键消抖电路不仅可以消除按键抖动的影响,而且每按一次键,只输出一个脉冲,其宽度为一个时钟周期,达到整形的作用, 按键消抖电路是利用时间基准信号对按键按下时产生的抖动进行整形,使其输出为正常的脉冲信号的.消抖设计框图5如下:图5消抖模块设计原理图程序设计如下:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_unsigned.ALL; use IEEE.STD_LOGIC_arith.ALL; entity XD isPort ( clk1k : in STD_LOGIC;keyin : in STD_LOGIC;keyout : out STD_LOGIC); end XD;architecture Behavioral of XD issignal key1,key2:std_logic;signal count:integer range 1 to 3:=1 beginprocess(clk1k,keyin)beginif clk1k'event and clk1k='1' thenif count=3 thenkey1<='1';elsekey1<='0';count<=count+1;end if;key2<=key1;e nd if;if keyin='0' thencount<=1;end if;end process;keyout<=(not key1) and key2;end Behavioral;仿真波形图6如下:在按键按下的一个周期内,消抖模块输出仅有一个时钟周期,抑制了按键按下状态不稳的情况。

FPGA数字跑表课程设计

FPGA数字跑表课程设计

摘要本设课程设计是基于FPGA的数字跑表的设计,利用Verilog HDL 语言和Quartus II软件以及FPGA实验操作平台来实现的。

本论文的重点是用硬件语言Verilog HDL 来描述数字跑表,偏重于软件设计。

大致内容是首先简单介绍了EDA的现状和前景, Verilog HDL 语言特点,应用平台FPGA,之后阐述了数字跑表的设计思想和大体的设计流程,最后进入本设计的核心设计部分,用Verilog HDL 语言设计数字跑表电路,着重对各个模块进行了详细的分析和说明。

【关键词】Verilog HDL 语言;Quartus II 软件;数字秒表目录1 绪论 (2)1.1 EDA的现状和发展及FPGA简介 (2)1.2 Verilog HDL语言及QuartusⅡ软件简介 (2)1.3 基于FPGA实现数字跑表运行的方案设计基本原则 (3)1.4 论文主要完成的工作 (3)2 系统的硬件设计 (4)2.1数字跑表概述 (4)2.2整体方案设计和功能分割 (4)2.3各功能模块的设计和实现 (6)2.4 控制系统的实现 (8)3 系统的软件设计 (8)3.1 软件整体设计 (8)3.2主要模块软件设计(主要模块流程图和仿真波形图) (9)4 总结 (12)参考文献 (13)1.绪论1.1 EDA简介及FPGA简介EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪60年代中期从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。

伴随着集成电路(IC)技术的发展,电子设计自动化(EDA)逐渐成为重要的设计手段,已经广泛应用于模拟与数字电路系统等许多领域。

而电子设计自动化(EDA)的实现是与CPLD/FPGA技术的迅速发展息息相关的,利用PLD/FPGA,电子系统设计工程师可以在实验室中设计出专用IC,实现了系统的集成。

FPGA综合实验项目介绍(电子科技大学)(课堂PPT)

FPGA综合实验项目介绍(电子科技大学)(课堂PPT)
选择控制:来自扫描输出的两位信号。 数据输出:数码管七位信号
36
模块设计
扫描控制器
系统时钟48MHz 输出扫描频率控制在1KHZ—100KHZ左右。
37
扫描模块内部流程
CLK 48MHz


8
频 CLK_1000 计 器 48KHz 数

S(2:0)
38
系统图
39
加速度传感器计步器综合设计
30
模块设计
答题定时器
模块计时启动信号QZ,来自编码锁存的抢中信号 系统时钟48MHz 计时10秒,输出数据数码管显示(共阳)
31
答提定时器内部流程
QZ 抢中
CLK 48MHz
分 频 器 1Hz
倒 Q(9—0) 计 时间数据 数 器 时间到
七 段 译 SOUT(6:0) 码 器
SJD_DT
CLK 系统时钟

48MHZ
34
报警延迟器内部流程2
START
QZ
SJD_QD
SJD_DT CLK
触发 BJ1 计数延时1
触发 BJ2 计数延时2
触发 计数延时3 BJ3
触发 BJ4 计数延时4
35

与门
BJ 报警输出
模块设计
多路选择器
数据输入:抢中选手号码,抢答计时,答题计时, 三个数据均是七段码信号。
内部模块
分频器 计数器 扫描显示及译码控制 开始/停止使能控制 清零控制
7
模块设计
分频器
•提供的标准信号是48MHz • 输出二个信号1KHz、100Hz
8
分频器实现原理
基于计数器方法实现
例 clkin

FPGA数字跑表程序设计与防仿真

FPGA数字跑表程序设计与防仿真

FPGA数字跑表程序设计与防仿真第一篇:FPGA数字跑表程序设计与防仿真一、设计名称:基于FPGA的数字系统设计(数字跑表)二、设计指标:1、跑表精度为0.01秒2、跑表计时范围为:1小时3、设置开始计时/停止计时、复位两个按钮4、显示工作方式:用六位BCD七段数码管显示读数。

显示格式为xx分xx秒xx0.01秒三、设计要求:1、设计出符合设计要求的解决方案2、设计出单元电路3、利用EDA软件对各单元电路及整体电路进行仿真4、利用EDA软件在实验板上实现设计四、方案设计:1、由石英振荡器产生正弦信号,然后通过分频器分频产生需要的分频信号2、由开关通过使能控制对计数器的工作状态进行控制3、分频信号控制计数器计数4、将计数器结果输入显示模块,完成在七段数码管上的显示五、系统设计框图:六、单元电路划分分频器(1)设计思路:由于显示最末位为0.01秒故需给计数器提供100Hz的时钟信号;显示部分由于一次只能显示单只数码管,为满足设计要求一次显示六位则需提高显示模块时钟信号频率,利用视觉效应使人一次看到六位显示,故分频器需要提供100Hz和1KHz两个输出信号。

分频器通过计数的方法实现分频功能。

(2)元件符号:(3)源程序:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entity clock isPort(clk : in STD_LOGIC;clk1 : out STD_LOGIC;clk2 : out STD_LOGIC);end clock;architecture Behavioral of clock is signal fcount1:integer range 1 to 24000:=1;signal fcount2:integer range 1 to 5:=1;signal clk1_tmp:STD_LOGIC:='0';signal clk2_tmp:STD_LOGIC:='0';begin process(clk,fcount1,clk1_tmp)beginif clk'event and clk = '1' thenif fcount1= 24000 thenfcount1 <= 1;clk1_tmp<= not clk1_tmp;elsefcount1 <= fcount1 + 1;end if;end if;end process;clk1<= clk1_tmp;process(clk1_tmp,clk1_tmp,fcount2,clk2_tmp) beginif clk1_tmp'event and clk1_tmp = '1' thenif fcount2= 5 thenend process;clk2<=clk2_tmp;end Behavioral;fcount2 <= 1;clk2_tmp<= not clk2_tmp;elsefcount2 <= fcount2 + 1;end if;end if;(4)仿真结果:(5)结果分析:仿真结果显示分频程序正确的产出了实验所需频率信号.十进制计数器(1)源程序:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entity counter10 isPort(rst : in STD_LOGIC;clk : in STD_LOGIC;carry_in : in STD_LOGIC;carry_out : out STD_LOGIC;count_out : out STD_LOGIC_VECTOR(3 downto 0));end counter10;architecture Behavioral of counter10 issignal count_tmp:STD_LOGIC_VECTOR(3 downto 0):=“0000”;signal pause : STD_LOGIC:='1';begin process(clk,rst,carry_in,count_tmp)begin if rising_edge(carry_in)then pause <= not pause;end if;if rst='0' th en count_tmp<=“0000”;carry_out<='0';elsif clk'event and clk='1' thenif pause='1' thenif count_tmp=“1001” thencount_tmp<=“0000”;carry_out<='1';ELSEcount_tmp<=count_tmp+1;carry_out<='0';end if;end if;end if;count_out<=count_tmp;end process;end Behavioral;(2)仿真结果:(3)结果分析:仿真结果显示当无reset信号输入时计数器正常计数并在记满时自动清零并产生进位信号,当有reset输入时会清零,程序符合设计要求.六进制计数器(1)源程序:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entity counter6 isPort(rst : in STD_LOGIC;clk : in STD_LOGIC;carry_in : in STD_LOGIC;carry_out : out STD_LOGIC;count_out : out STD_LOGIC_VECTOR(3 downto 0));end counter6;architecture Behavioral of counter6 issignal count_tmp:STD_LOGIC_VECTOR(3 downto 0):=“0000”;beginprocess(clk,rst,carry_in,count_tmp)begin if rst='0' then count_tmp<=“0000”;carry_out<='0';elsif clk'event and clk='1' thenif carry_in='1' thenif count_tmp=“0101” thencount_tmp<=“0000”;carry_out<='1';ELSEcount_tmp<=count_tmp+1;carry_out<='0';end if;end if;end if;count_out<=count_tmp;end process;end Behavioral;(2)仿真结果:显示模块(1)设计思路:数码管显示需要对应位置显示对应位数的时间,故需要一个信号同时选择六个地址输入的一个和其所对应的数码管,因此需要一个六位计数器产生这个选择信号。

基于FPGA的数字跑表的设计学士学位论文

基于FPGA的数字跑表的设计学士学位论文

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

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

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

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

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

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

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

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

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

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

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

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

FPGA数字跑表程序

FPGA数字跑表程序

(1)跑表的计时范围为0。

01s~59min59。

99s,计时精度为10ms;(2)具有异步复位清零、启动、计时和暂停功能;(3)输入时钟频率为100Hz;(4)要求数字跑表的输出能够直接驱动共阴极7段数码管显示/*信号定义CLK:时钟信号;CLR:异步复位信号;PAUSE: 暂停/启动信号;MSH,MSL:百分秒的高位和低位;SH,SL:秒信号的高位和低位;MH,ML:分钟信号的高位和低位。

*/module h (clk,clr,pause,msh,msl,sh,sl,mh,ml,led1,led2,led3,led4,led5,led6);input clk,clr;input pause;output [6:0]led1;output [6:0]led2;output [6:0]led3;output [6:0]led4;output [6:0]led5;output [6:0]led6;output [3:0] msh,msl,sh,sl,mh,ml;reg [6:0]led1;reg [6:0]led2;reg [6:0]led3;reg [6:0]led4;reg [6:0]led5;reg [6:0]led6;reg[3:0] msh,msl,sh,sl,mh,ml;reg cn1,cn2;//cn1为百分秒向秒的进位,cn2为秒向分的进位//百分秒计数进程,每计满100,cn1产生一个进位1 always @(posedge clk or posedge clr)beginif(clr)//异步复位begin{msh,msl}〈=8'h00; //从00开始计数cn1<=0;endelseif(!pause) //PAUSE为0时正常计数,为1时暂时计数beginif (msl==9)beginmsl〈=0;//低位百分秒计数到10是归零if (msh==9)beginmsh<=0; //高位百分秒计数到10是归零cn1<=1; //CN1触发进位endelse //低位计数到10,高位未计数到10时,高位计数msh<=msh+1;endelsebegin //低位计数未到10时,继续计数msl<=msl+1;cn1〈=0; //低位未计数到10时,CN1不产生进位endendend//秒计数模块,每计数满60,CN2产生一个进位always @(posedge cn1 or posedge clr)beginif (clr)begin //异步复位{sh,sl}<=8'h00;cn2〈=0;endelseif(sl==9)beginsl<=0; //低位秒计数到10,低位归零if (sh==5)beginsh〈=0; //低位计数到10,高位计数到6时,高位秒归零cn2〈=1; //cn2触发进位endelsesh〈=sh+1; //低位计数到10,高位未到6时,低位计数endelsebeginsl〈=sl+1;//低位未计数到10,低位计数cn2<=0;//低位未计数到10时,CN2不产生进位endend//分钟计数模块,每计满60,系统自动清0always@(posedge cn2 or posedge clr)beginif(clr)begin //异步复位{mh,ml}〈=8’h00;endelseif(ml==9)beginml〈=0; //低位分计数到10时,低位归零if (mh==5)mh<=0; //低位计数到10,高位计数到6时,高位归零elsemh〈=mh+1;//低位计数到10,高位未计数到6时,高位计数endelseml〈=ml+1; //低位计数未到10时,低位计数end//led显示模块always@(msl[3:0])begincase(msl[3:0]) //利用case语句控制显示低位百分秒的0~90:led1=’b1000000;1:led1='b1111001;2:led1='b0100100;3:led1='b0110000;4:led1=’b0011001;5:led1=’b0010010;6:led1='b0000010;7:led1='b1111000;8:led1=’b0000000;9:led1=’b0010000;endcaseendalways@(msh[3:0])begincase(msh[3:0]) //利用case语句控制显示高位百分秒的0~90:led2=’b1000000;1:led2='b1111001;2:led2=’b0100100;3:led2='b0110000;4:led2='b0011001;6:led2=’b0000010;7:led2=’b1111000;8:led2=’b0000000;9:led2='b0010000;endcaseendalways@(sl[3:0])begincase(sl[3:0]) //利用case语句控制显示低位秒的0~90:led3='b1000000;1:led3=’b1111001;2:led3=’b0100100;3:led3='b0110000;4:led3='b0011001;5:led3='b0010010;6:led3=’b0000010;7:led3=’b1111000;8:led3='b0000000;9:led3='b0010000;endcaseendalways@(sh[3:0])begincase(sh[3:0])//利用case语句控制显示高位秒的0~5 0:led4='b1000000;1:led4=’b1111001;2:led4=’b0100100;3:led4=’b0110000;4:led4=’b0011001;5:led4=’b0010010;endcaseendalways@(ml[3:0])begincase(ml[3:0])//利用case语句控制显示低位分的0~9 0:led5='b1000000;1:led5='b1111001;2:led5='b0100100;3:led5='b0110000;4:led5=’b0011001;5:led5='b0010010;6:led5=’b0000010;7:led5=’b1111000;9:led5=’b0010000;endcaseendalways@(mh[3:0])begincase(mh[3:0]) //利用case语句控制显示高位分的0~5 0:led6='b1000000;1:led6=’b1111001;2:led6=’b0100100;3:led6='b0110000;4:led6=’b0011001;5:led6=’b0010010;endcaseendendmodulemodule led (ledin,ledout);//七段译码模块input[3:0]ledin;output[6:0]ledout;reg[6:0] ledout;always@(ledin) //case语句进行译码begin case(ledin)//分别对应数码管的a—-g4’d0:ledout=7’b11000000;4’d1:ledout=7'b11111001;4’d2:ledout=7’b10100100;4’d3:ledout=7'b10110000;4'd4:ledout=7’b10011001;4’d5:ledout=7'b10010010;4'd6:ledout=7’b10000010;4'd7:ledout=7’b11111000;4’d8:ledout=7’b10000000;4'd9:ledout=7’b10010000;default:ledout=7’bx;endcaseendendmodule分频模块module clk(f50m,f100);input f50m;output f100;reg f100;reg [31:0]h;always@(posedge f50m)beginif(h==250000)//对计数器进行判断,确定f100信号是否反转beginh<=0;//不计数f100〈=~f100;endelse //未计数到250000时,继续计数h<=h+1;endendmodule。

数字跑表

数字跑表

自己做的简易数字跑表,基于de2的fpga的验证,有复位,暂停功能。

自己测试过了,成功。

只是这个算法很简单,就是一步步写的verilog语言。

现在正在设计另一种算法。

module paobiao1(CLK,CLR,PAUSE,HEX0,HEX1,HEX2,HEX3,HEX4,HEX5,HEX6,HEX7); input CLK,CLR,PAUSE;output[6:0]HEX0,HEX1,HEX2,HEX3,HEX4,HEX5,HEX6,HEX7;reg[6:0]HEX0,HEX1,HEX2,HEX3,HEX4,HEX5,HEX6,HEX7;reg[3:0] MSH,MSL,SH,SL,MH,ML,H,L;reg[18:0]count;reg [3:0]cn1,cn2,cn3;always @(posedge CLK )begincount=count+1'b1;if(count==19'd250000)beginif(CLR)begin{MSH,MSL}=8'h00;cn1=0;HEX1=7'b1000000;HEX0=7'b1000000;endelseif(!PAUSE)beginif(MSL==4'ha)beginMSH=MSH+4'h1;MSL=4'h0;case(MSH)4'h0:HEX1=7'b1000000;4'h1:HEX1=7'b1111001;4'h2:HEX1=7'b0100100;4'h3:HEX1=7'b0110000;4'h4:HEX1=7'b0011001;4'h5:HEX1=7'b0010010;4'h6:HEX1=7'b0000010;4'h7:HEX1=7'b1111000;4'h8:HEX1=7'b0000000;4'h9:HEX1=7'b0010000;4'ha:HEX1=7'b1000000;endcaseif(MSH==4'ha)beginMSH=4'h0;cn1=1;endendelsebeginMSL=MSL+1; cn1=0;case(MSL)4'h0:HEX0=7'b1000000;4'h1:HEX0=7'b1111001;4'h2:HEX0=7'b0100100;4'h3:HEX0=7'b0110000;4'h4:HEX0=7'b0011001;4'h5:HEX0=7'b0010010;4'h6:HEX0=7'b0000010;4'h7:HEX0=7'b1111000;4'h8:HEX0=7'b0000000;4'h9:HEX0=7'b0010000;4'ha:HEX0=7'b1000000;endcaseendendendendalways @(posedge cn1 or posedge CLR)beginif(CLR)begin{SH,SL}=8'h00;cn2=0;HEX2=7'b1000000;HEX3=7'b1000000;endelseif(!PAUSE)beginif(SL==4'h9)beginSH=SH+4'h1; SL=4'h0;case(SL)4'h0:HEX2=7'b1000000;endcasecase(SH)4'h0:HEX3=7'b1000000;4'h1:HEX3=7'b1111001;4'h2:HEX3=7'b0100100;4'h3:HEX3=7'b0110000;4'h4:HEX3=7'b0011001;4'h5:HEX3=7'b0010010;4'h6:HEX3=7'b1000000;endcaseif(SH==4'h6)begin SH=4'h0; cn2=1; endendelsebegin SL=SL+1; cn2=0;case(SL)4'h0:HEX2=7'b1000000;4'h1:HEX2=7'b1111001;4'h2:HEX2=7'b0100100;4'h3:HEX2=7'b0110000;4'h4:HEX2=7'b0011001;4'h5:HEX2=7'b0010010;4'h6:HEX2=7'b0000010;4'h7:HEX2=7'b1111000;4'h8:HEX2=7'b0000000;4'h9:HEX2=7'b0010000;4'ha:HEX2=7'b1000000;endcaseendendendalways @( posedge cn2 or posedge CLR)beginif(CLR)begin{MH,ML}=8'h00;cn3=0;HEX4=7'b1000000;HEX5=7'b1000000;endelseif(!PAUSE)beginif(ML==4'h9)beginMH=MH+1; ML=4'h0;case(ML)4'h0:HEX4=7'b1000000;endcasecase(MH)4'h0:HEX5=7'b1000000;4'h1:HEX5=7'b1111001;4'h2:HEX5=7'b0100100;4'h3:HEX5=7'b0110000;4'h4:HEX5=7'b0011001;4'h5:HEX5=7'b0010010;4'h6:HEX5=7'b1000000;endcaseif(MH==4'h6)begin MH=4'h0; cn3=1; endendelsebegin ML=ML+1; cn3=0;case(ML)4'h0:HEX4=7'b1000000;4'h1:HEX4=7'b1111001;4'h2:HEX4=7'b0100100;4'h3:HEX4=7'b0110000;4'h4:HEX4=7'b0011001;4'h5:HEX4=7'b0010010;4'h6:HEX4=7'b0000010;4'h7:HEX4=7'b1111000;4'h8:HEX4=7'b0000000;4'h9:HEX4=7'b0010000;4'ha:HEX4=7'b1000000;endcaseendendendalways @( posedge cn3 or posedge CLR ) beginif(CLR)begin{H,L}=8'h00;HEX6=7'b1000000;HEX7=7'b1000000;endelseif(!PAUSE)beginif(L==4'h9)beginH=H+1; L=4'h0;case(L)4'h0:HEX6=7'b1000000;endcasecase(H)4'h0:HEX7=7'b1000000;4'h1:HEX7=7'b1111001;4'h2:HEX7=7'b0100100;4'h3:HEX7=7'b0110000;4'h4:HEX7=7'b0011001;4'h5:HEX7=7'b0010010;4'h6:HEX7=7'b0000010;4'h7:HEX7=7'b1111000;4'h8:HEX7=7'b0000000;4'h9:HEX7=7'b0010000;4'ha:HEX7=7'b1000000;endcaseif(H==4'ha) H=4'h0 ;endelsebegin L=L+1;case(L)4'h0:HEX6=7'b1000000;4'h1:HEX6=7'b1111001;4'h2:HEX6=7'b0100100;4'h3:HEX6=7'b0110000;4'h4:HEX6=7'b0011001;4'h5:HEX6=7'b0010010;4'h6:HEX6=7'b0000010;4'h7:HEX6=7'b1111000;4'h8:HEX6=7'b0000000;4'h9:HEX6=7'b0010000;4'ha:HEX6=7'b1000000;endcaseendendendendmodule。

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

电子信息工程专业
FPGA与ASIC设计实践教程
设计报告
班级:电子信息工程1303班
学号:201315110
姓名: 田佳鑫
日期:2015年11月4日
指导老师:何英昊
目录
1系统总体方案及硬件设计 (3)
1.1设计内容 (3)
1.2 设计要求 (3)
1.3 实现要求 (3)
2各模块设计及电路图 (3)
2.1设计项目简介 (3)
2.2分块设计代码 (4)
2.3总体框图设计 (7)
2.4管脚锁定图 (8)
3课程设计体会 (8)
1系统总体方案及硬件设计
1.1 设计内容
数字跑表电路
1.2设计要求
(1)跑表的计时范围为0.01—59min59.99s。

(2)具有异步清零、启动。

计时和暂停功能。

(3)输入时钟频率为100Hz。

(4)要求数字跑表的输出能够直接驱动共阴极7段数码管。

1.3 实现要求
(1)分析功能要求,划分功能模块。

(2)编写各模块的Verilog HDL语言设计程序。

(3)在QuartusⅡ软件或其他EDA软件上完成设计和仿真。

(4)根据实验装置上的CPLD/FPGA芯片,在适配时选择相应的芯片,将设计生成配置文件或JEDEC文件,然后将配置文件或JEDEC文件下载到实验装置上运行,操作实验装置上设定的功能开关,验证设计功能。

2各模块设计及电路图
2.1 设计项目简介
主控模块分别连接6个数码管显示模块和分频模块,分频模块给主控模块的计数器提供时钟源,主控模块在按键的控制下,在其中计数器的作用下输出给数码管显示装置,实现跑表功能。

振荡器
控制按键分频器计




2.2分块设计代码
(1)分频模块:
module fenpin(CLK,CLK2); //输入50MHz,输出分频到1Hz input CLK;
output CLK2;
reg CLK2;
reg[31:0] counter2;
parameter N2=5000000;
always@(posedge CLK)
begin
if(counter2==250000)
begin
counter2<=0;
CLK2<=~CLK2;
end
else
counter2<=counter2+1;
end
endmodule
(2)控制模块:
module sz(clk,clr,pause,msh,msl,sh,sl,mh,ml);
inputclk,clr;
input pause;
output[3:0]msh,msl,sh,sl,mh,ml;
reg[3:0]msh,msl,sh,sl,mh,ml;
reg cn1,cn2;
always@(posedgeclk or posedgeclr)
begin
if(clr)
begin
{msh,msl}<=8'h00;
cn1<=0;
end
else
if(!pause)
begin
if(msl==9)
begin
msl<=0;
if(msh==9)
begin
msh<=0;
cn1<=1;
end
else
msh<=msh+1;
end
else
begin
msl<=msl+1;
cn1<=0;
end
end
end
always@(posedge cn1 or posedgeclr) begin
if(clr)
begin
{sh,sl}<=8'h00;
cn2<=0;
end
else
if(sl==9)
begin
sl<=0;
if(sh==5)
begin
sh<=0;
cn2<=1;
end
else
sh<=sh+1;
end
else
begin
sl<=sl+1;
cn2<=0;
end
end
always@(posedge cn2 or posedgeclr) begin
if(clr)
begin
{mh,ml}<=8'h00;
end
else
if(ml==9)
begin
ml<=0;
if(mh==5)
mh<=0;
else
mh<=mh+1;
end
else
ml<=ml+1;
end
endmodule
(3)显示模块:
module XS7D(DIN,DOUT);
input [3:0]DIN;
output [6:0]DOUT;
reg [6:0]DOUT;
always @(DIN)
begin
case(DIN)
0:DOUT='b1000000;
1:DOUT='b1111001;
2:DOUT='b0100100;
3:DOUT='b0110000;
4:DOUT='b0011001;
5:DOUT='b0010010;
6:DOUT='b0000010;
7:DOUT='b1111000;
8:DOUT='b0000000;
9:DOUT='b0010000;
10:DOUT='b0001000;
11:DOUT='b0000011;
12:DOUT='b1000110;
13:DOUT='b0100001;
14:DOUT='b0000110;
15:DOUT='b0001110; endcase
end
endmodule
2.3总体框图设计
2.4管脚锁定图
三、课程设计体会
FPGA即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。

它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。

通过学习制作数字跑表,我对于可编程逻辑器件有了更加深刻地体会。

这次实验设计,我的分频模块和显示模块都令我特别头疼,但是在认真的学习过后,我认识到了一些错误和漏洞,我正确的改正了由于分频过快导致的秒表不准。

改正之后,我的数码管却无法显示数字,通过我认真的研究,我发现数码管共阴极和数码管共阳极的概念混淆,改正之后,我的数字跑表正常的工作了。

总体来说这次实验对于我的提升很大,我在课程设计动手实践方面有进步了不少。

相关文档
最新文档