《篮球计分器FPGA附程序.doc》由会员分享,可在线阅读,更多相关《篮球计分器FPGA附程序.doc(16页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精品文档,仅供学习与交流,如有侵权请联系网站删除单片机接口实验篮球计分器的设计姓名: 苗茂宇 班级: 14级12班 学号: 1408202007 导师: 党选举 专业: 控制科学与工程 成绩评定目 录摘 要1Abstract11. FPGA及系统设计概述21.1. EDA简介21.1.1. EDA定义21.1.2. EDA发展概述21.1.3. HDL概述21.1.4. 总结31.2. FPGA简介31.2.1. FPGA概述31.2.2. FPGA原理41.3. LCD160241.4. 产品现状及发展51.5. 总体设计要求51.5.1. 设计流程51.5.2. 设计要求51.6. 本章小
2、结62. 实验方案设计62.1. 分频模块62.2. 计时模块72.3. 24秒计时模块92.4. 计分模块102.5. lcd驱动模块112.6. 本章小结173. 实验结论174. 结束语18参考文献19附录 120【精品文档】第 14 页摘 要FPGA(现场可编程逻辑器件)以其体积小、功耗低、稳定性高等优点被广泛应用于各类电子产品的设计中。FPGA是基于硬件可编程的器件,设计者需要掌握硬件描述语言,Verilog HDL就是一种硬件描述语言。Verilog HDL语言是在C语言的基础上发展而来的,语法结构上与C语言有很多相似之处,继承了C语言的语法结构,但是其与C语言有着本质上的区别。本
3、设计是基于FPGA的篮球计时计分系统的设计,结合篮球比赛的实际过程,对系统进行了模块化设计,最终组合调试。硬件实验表明本系统计时计分准确,实时性好,能够很好的反应比赛进度,此次设计达到了设计预期。关键词:FPGA;Verilog HDL;计时计分;模块化AbstractFPGA (field programmable logic device) with its small size, low power consumption, high stability has been widely used in various types of electronic products design
4、. FPGA is a programmable device based on hardware, designers need to master the hardware description language, Verilog HDL is a hardware description language. Verilog HDL language is developed on the basis of C language, grammar structure and C language have many similarities, inherited the grammar
5、structure of C language and C language, but theres a difference between. This design is the design of FPGA basketball timing and scoring system based on the actual process, combined with the game of basketball, the system of modular design, the final assembly debugging. Hardware experiments show tha
6、t the system timing accuracy, good real-time performance, can very good response competition schedule, the design achieves the expected design.Keywords: FPGA;Verilog HDL ; timing and scoring; modular1. FPGA及系统设计概述1.1. EDA简介1.1.1. EDA定义EDA是电子设计自动化(Electronic Design Automation)的缩写。由于它是一门刚刚发展起来的新技术,涉及面
7、广,内容丰富,理解各异,所以目前尚无一个确切的定义。但从EDA技术的几个主要方面的内容来看,可以理解为:EDA技术是以大规模可编程逻辑器件为设计载体,以硬件描述语言为系统逻辑描述的主要表达方式,以计算机、大规模可编程逻辑器件的开发软件及实验开发系统为设计工具,通过有关的开发软件,自动完成用软件的方式设计电子系统到硬件系统的一门新技术。可以实现逻辑编译、逻辑化简、逻辑分割、逻辑综合及优化,逻辑布局布线、逻辑仿真。完成对于特定目标芯片的适配编译、逻辑映射、编程下载等工作,最终形成集成电子系统或专用集成芯片。1.1.2. EDA发展概述EDA技术是伴随着计算机、集成电路、电子系统的设计发展起来的,至
8、今已有30多年的历程。大致可以分为三个发展阶段。20世纪70年代的CAD(计算机辅助设计)阶段:这一阶段的主要特征是利用计算机辅助进行电路原理图编辑,使得设计师从传统高度重复繁杂的绘图劳动中解脱出来。20世纪80年代的计算机辅助工程设计阶段:这一阶段的主要特征是以逻辑摸拟、定时分析、故障仿真为核心,重点解决电路设计的功能检测等问题,使设计而能在产品制作之前预知产品的功能与性能。20世纪90年代是EDA(电子设计自动化)阶段:这一阶段的主要特征是以高级描述语言,系统级仿真和综合技术为特点,采用“自顶向下”的设计理念,将设计前期的许多高层次设计由EDA工具来完成。EDA是电子技术设计自动化,也就是
9、能够帮助人们设计电子电路或系统的软件工具。该工具可以在电子产品的各个设计阶段发挥作用,使设计更复杂的电路和系统成为可能。在原理图设计阶段,可以使用EDA中的仿真工具论证设计的正确性;在芯片设计阶段,可以使用EDA中的芯片设计工具设计制作芯片的版图:在电路板设计阶段,可以使用EDA中电路板设计工具设计多层电路板。特别是支持硬件描述语言的EDA工具的出现,使复杂数字系统设计自动化成为可能,只要用硬件描述语言将数字系统的行为描述正确,就可以进行该数字系统的芯片设计与制造。有专家认为,21世纪将是四A技术的高速发展期,EDA技术将是对21世纪产生重大影响的十大技术之一。1.1.3. HDL概述硬件描述
10、语言(HDL)是一种用于进行电子系统硬件设计的计算机高级语言,它采用软件的设计方法来描述电子系统的逻辑功能、电路结构和连接形式。硬件描述语言可以在三个层次上进行电路描述,其层次由高到低分为行为级和R,几级和门电路级。常用硬件描述语言有HDL、Verilog和AHDL语言。HDL语言是一种高级描述语言,适用于行为级和R,几级的描述;Verilog语言和AHDL语言属于一种较低级的描述语言,适用于R,几级和门电路级的描述。现在HDL和Verilog作为工业标准硬件描述语言,已得到众多EDA公司的支持,在电子工程领域,它们已成为事实上的通用硬件描述语言,承担几乎全部的数字系统的设计任务。应用HDL进
11、行电子系统设计有以下优点:(1)与其他硬件描述语言相比, HDL具有更强的行为描述能力,强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。(2) HDL具有丰富的仿真语句和库函数,使得在任何大系统的设计早期就能检查设计系统的功能可行性,并可以随时对系统进行仿真。(3)用VHDL完成的设计,可以利用EDA工具进行逻辑综合和优化,并可根据不同的目标芯片自动把VHDL描述设计转变成门级网表,这种设计方式极大地减少了电路设计的时间及可能发生的错误,从而降低了开发成本。(4)VHDL对设计的描述具有相对独立性,可以在设计者不懂硬件结构的情况下,也不必管最终设计的目标
12、器件是什么,而进行独立的设计。(5)由于VHDL具有类属描述语句和子程序调用等功能,所以对于已完成的设计,可以在不改变源程序的情况厂,只需改变类属参量或函数,就能很容易地改变及计的规模和结构。1.1.4. 总结电子EDA技术发展迅猛,逐渐在教学、科研、产品设计与制造等各方面都发挥着巨大的作用。在教学方面:几乎所有理工科(特别是电子信息)类的高校都开设了EDA课程。主要是让学生了解EDA的基本原理和基本概念、VHDL描述系统逻辑的方法、使用EDA工具进行电子电路课程的模拟仿真实验并在作毕业设计时从事简单电子系统的设计,为今后工作打下基础。具有代表性的是全国每两年举办一次大学生电子设计竞赛活动。在
13、科研方面:主要利用电路仿真工具(EWB或PSPICE、VLOL等)进行电路设计与仿真;利用虚拟仪器进行产品调试;将CPLD/FPGA器件的开发应用到仪器设备中。例如在CDMA无线通信系统中,所有移动手机和无线基站都工作在相同的频谱,为区别不同的呼叫,每个手机有一个唯一的码序列,CDMA基站必须能判别这些不同观点的码序列才能分辨出不同的传呼进程;这一判别是通过匹配滤波器的输出显示在输人数据流中探测到特定的码序列;FPGA能提供良好的滤波器设计,而且能完成DSP高级数据处理功能,因而FPGA在现代通信领域方面获得广泛应用。在产品设计与制造方面:从高性能的微处理器、数字信号处理器一直到彩电、音响和电
14、子玩具电路等,EDA技术不单是应用于前期的计算机模拟仿真、产品调试,而且也在电子设备的研制与生产、电路板的焊接过程中有重要作用。可以说电子EDA技术已经成为电子工业领域不可缺少的技术支持。1.2. FPGA简介1.2.1. FPGA概述FPGA是英文Field Programmable Gate Array的缩写,即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。FPGA(现场可编程门阵列)是专用集成电路(ASIC)中集成度最高
15、的一种,用户可对FPGA内部的逻辑模块和I/O模块重新配置,以实现用户的逻辑,因而也被用于对CPU的模拟。用户对FPGA的编程数据放在Flash芯片中,通过上电加载到FPGA中,对其进行初始化。也可在线对其编程,实现系统在线重构,这一特性可以构建一个根据计算任务不同而实时定制的CPU,这是当今研究的热门领域。1.2.2. FPGA原理FPGA采用了逻辑单元阵列LCA(Logic Cell Array)这样一个新概念,内部包括可配置逻辑模块CLB(Configurable Logic Block)、输出输入模块IOB(Input Output Block)和内部连线(Interconnect)三
16、个部分。FPGA的基本特点主要有: 1、采用FPGA设计ASIC电路,用户不需要投片生产,就能得到合用的芯片。 2、FPGA可做其它全定制或半定制ASIC电路的中试样片。 3、FPGA内部有丰富的触发器和IO引脚。 4、FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。 5、FPGA采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容。 FPGA是由存放在片内RAM中的程序来设置其工作状态的,因此,工作时需要对片内的RAM进行编程。用户可以根据不同的配置模式,采用不同的编程方式。 加电时,FPGA芯片将EPROM中数据读入片内编程RAM中,配置完成后,FPGA进
17、入工作状态。掉电后,FPGA恢复成白片,内部逻辑关系消失,因此,FPGA能够反复使用。FPGA的编程无须专用的FPGA编程器,只须用通用的EPROM、PROM编程器即可。当需要修改FPGA功能时,只需换一片EPROM即可。这样,同一片FPGA,不同的编程数据,可以产生不同的电路功能。因此,FPGA的使用非常灵活。 FPGA有多种配置模式:并行主模式为一片FPGA加一片EPROM的方式;主从模式可以支持一片PROM编程多片FPGA;串行模式可以采用串行PROM编程FPGA;外设模式可以将FPGA作为微处理器的外设,由微处理器对其编程。1.3. LCD1602LCD1602液晶也叫1602字符型液
18、晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个57或者511等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用。LCD1602共有16个引脚,其引脚图如下图示。图1 LCD1602引脚图第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:R/W为读写信号线,高电平时进行
19、读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:D0D7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。1.4. 产品现状及发展作为每场篮球赛的必备品,比赛的记分器的质量显得尤为重要。目前使用的记分器大部分是基于单片机技术,以单片机为主要器件,其编码器与解码器的生成为软件方式。在实际应用中,由于程序不稳定,系统的可靠性能比较差。基于现场可编程逻辑门阵列FPGA器件的记分器,用FP
20、GA器件构造系统,所有算法完全由硬件电路来实现,使得系统的工作可靠性大为提高。由于FPGA具有现场可编程功能,当设计需要更改时,只需更改FPGA中的控制和接口电路,利用EDA工具将更新后的设计下载到FPGA中即可,无需更改外部电路的设计,大大提高了设计的效率以及使用成本。1.5. 总体设计要求1.5.1. 设计流程(1)编写VHDL程序(使用VHDL File);(2)编译VHDL程序(使用Compiler);(3)仿真验证VHDL程序(使用Waveform Editor, Simulator);(4)进行芯片的时序分析(使用Timing Analyzer);(5)安排芯片管脚位置(使用Flo
21、orplan Editor);(6)下载程序至芯片(使用Programmer)。1.5.2. 设计要求 采用计数的方法设计了计时器模块、计分器模块,结合1602液晶控制方法设计了显示模块。(1) 计时器完成篮球比赛4节12分钟的倒计时;(2) 一次进攻时间24秒的计时;(3) 计分器实现甲乙两队加分,分数调整的功能;(4) 显示部分完成时间、比分的显示等。(5) 实现比赛暂停功能,且暂停时24秒保持;(6) 单独24秒重新计时功能。1.6. 本章小结通过对EDA、HDL、FPGA、LCD1602的了解使我们对篮球计分器的设计有了更进一步的了解,是我们更加深入的了解篮球计分器设计所需用到的知识,
22、通过对设计流程和设计要求的描述,使我们对篮球计分器的设计有了一个总体框架,为后续的具体设计做了必要的前提。2. 实验方案设计本系统的设计采用自顶向下,模块化的设计方法。首先根据设计要求确定系统的必要组成部分,然后分别设计,最后组合起来进行测试。在此次设计中将系统分为5个模块,即:分频模块、计时模块、24s计时模块、计分模块和lcd驱动模块。先分别进行设计、调试,最后将5个模块联接进行调试,最终完成设计。系统框图如下图所示。图2 系统框图2.1. 分频模块 分频模块如下图所示。图3 分频模块分频模块将系统频率从20Mhz分为1hz,以符合计时模块的周期要求,在这个模块中,计数器每计满1千万次进行
23、一次翻转,达到了周期为1s的分频要求。源程序:module fenp(clk_in,rst,clk_out);/分频模块 input clk_in; input rst; output clk_out; reg clk_out; reg 31:0cnt; always(posedge clk_in) begin if(!rst) begin cnt=0; clk_out=0; end else if(cnt=10000000) /设计分频为1Hz,即周期1s begin cnt=0; clk_out=!clk_out; end else begin cnt=cnt+1; clk_out=clk
24、_out; end endendmodule2.2. 计时模块 计时模块如下图所示。图4 计时模块/比赛时间倒计时模块,每节12min,共4节module jishi(clk_1hz,clr,pause,min_out,miao_out,jie); input clk_1hz; input clr,pause; output7:0min_out,miao_out; output 3:0jie; reg 7:0min_out,miao_out; reg 3:0jie; reg cn; always(posedge clk_1hz or negedge clr) begin if(!clr) be
25、gin min_out=8d0; miao_out=8d0; end else if(!pause) begin if(miao_out=8d0) begin miao_out=8d59; if(min_out=8d00) begin min_out=8d11; cn=1; end else min_out=min_out-8d1; end else begin miao_out=miao_out-8d1; cn=0; end end end always(posedge cn or negedge clr) begin if(!clr) begin jie=4d0; end else jie
26、=jie+1d1; endendmodule 计时模块采用倒计时法,其仿真波形如下图所示。1、计时开始,节数为1,分钟位为11,秒位为59,倒计时开始。图5 计时开始 2、暂停时,给出pause信号,计时暂停。图6 计时暂停3、按下清零时,计时全部清零。图7 计时清零2.3. 24秒计时模块 24秒计时模块如下图所示。图8 24秒计时模块/24s倒计时模块module c24(clk_1Hz,clr,pause,change,c24_out); input clk_1Hz,clr,pause,change; output 7:0c24_out; reg 7:0c24_out; always(p
27、osedge clk_1Hz or negedge clr) begin if(!clr) begin c24_out=8d0;end else if(!change) begin c24_out=8d0;end else if(pause) begin c24_out=8d0;end else if(c24_out=8d00) begin c24_out=8d23;end else c24_out=c24_out-1d1; end endmodule 24秒倒计时模块仿真如下图所示。由图可以看出,当clr,pause,change信号来临时,计时清零。图9 24秒计时仿真2.4. 计分模块
28、计分模块如下所示。图10 计分模块计分模块采用选择开关来为两支队伍分别加分,当key_sel信号为高时,为第一支队伍加分,当key_sel信号为低时,为第二支队伍加分。分值由case语句进行选择。源程序:module key(clk,key_en,clr,key_sel,score1,score2);/计分模块 input key_en,clk,clr; input 2:0 key_sel; output 7:0score1; output 7:0score2; reg 2:0key_out; reg 7:0score1; reg 7:0score2; always(key_sel ) beg
29、in case(key_sel) 3b110:key_out=3d1; 3b101:key_out=3d2; 3b011:key_out=3d3; default:key_out=3d0; endcase end always(posedge clk or negedge clr) begin if(!clr) begin score1=8d0;score2=8d0; end else if(key_en) begin score1=score1+key_out; score2=score2; end else if(!key_en) begin score2=score2+key_out;
30、score1=score1; end end endmodule2.5. lcd驱动模块 Lcd驱动模块如下所示。图11 lcd驱动模块本系统通过lcd1602来显示时间和比分信息,其相关指令表如下:图12 LCD指令表指令1:清显示,指令码01H,光标复位到地址00H位置。指令2:光标复位,光标返回到地址00H。指令3:光标和显示模式设置I/D:光标移动方向,高电平右移,低电平左移S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。指令4:显示开关控制。D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示C:控制光标的开与关,高电平表示有光标,低电平表示无光标B:控制光
31、标是否闪烁,高电平闪烁,低电平不闪烁。指令5:光标或显示移位S/C:高电平时移动显示的文字,低电平时移动光标。指令6:功能设置命令DL:高电平时为4位总线,低电平时为8位总线N:低电平时为单行显示,高电平时双行显示F:低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。指令7:字符发生器RAM地址设置。指令8:DDRAM地址设置。指令9:读忙信号和光标地址BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。指令10:写数据。指令11:读数据。根据以上指令表设置lcd1602的显示模式。源程序:module chan (clk,rw,rs,en,data
32、,jie,min_in,miao_in,c24_in,score1,score2);/lcd显示驱动 input clk; input 7:0miao_in; input 7:0min_in; input 7:0c24_in; input 3:0jie; input 7:0score1; input 7:0score2; output rs,en,rw; output 7:0 data;reg rs,en_sel;reg 7:0 data;reg 31:0count; /lcd_clk 分频计数器reg lcd_clk;reg 7:0 one_1,one_2,one_3,one_4,one_5
33、,one_6,one_7,one_8,one_9,one_10,one_11,one_12,one_13,one_14,one_15,one_16; reg 7:0 two_1,two_2,two_3,two_4,two_5,two_6,two_7,two_8,two_9,two_10,two_11,two_12,two_13,two_14,two_15,two_16; reg 7:0 next; parameter state0 =8h00, /设置8位格式,2行 8h38; state1 =8h01, /整体显示,关光标,不闪烁 8h0C 闪烁 8h0e state2 =8h02, /设定
34、输入方式,增量不移位 8h06 state3 =8h03, /清除显示 8h01 state4 =8h04, /显示第一行的指令 80H state5 =8h05, /显示第二行的指令 80H+40H scan =8h06, nul =8h07; parameter data0 =8h10, /2行,共32个数据 data1 =8h11, data2 =8h12, data3 =8h13, data4 =8h14, data5 =8h15, data6 =8h16, data7 =8h17, data8 =8h18, data9 =8h19, data10 =8h20, data11 =8h2
35、1, data12 =8h22, data13 =8h23, data14 =8h24, data15 =8h25, data16 =8h26, data17 =8h27, data18 =8h28, data19 =8h29, data20 =8h30, data21 =8h31, data22 =8h32, data23 =8h33, data24 =8h34, data25 =8h35, data26 =8h36, data27 =8h37, data28 =8h38, data29 =8h39, data30 =8h40, data31 =8h41; initial begin /第一
36、行显示 TIME:00:00 00 one_1=T; one_2=I; one_3=M; one_4=E; one_5=:; one_6= ; one_7= ; one_8= ; one_9=:;one_10= ;one_11= ;one_12= ;one_13= ;one_14= ;one_15= ;one_16= ; /第二行显示 0 A000:000B two_1= ; two_2= ; two_3=A; two_4= ; two_5= ; two_6= ; two_7= ; two_8=:; two_9= ;two_10= ;two_11= ;two_12= ;two_13=B;two
37、_14= ;two_15= ;two_16= ; end always (posedge clk ) /lcd驱动时钟 begin count=count+1; if(count=250000) begin count=0; lcd_clk=lcd_clk; end end always(miao_in or min_in or c24_in or jie or score1 or score2) begin en_sel=1; one_7=(min_in/10)+8b00110000; /获得分钟十位 one_8=(min_in%10)+8b00110000; /获得分钟个位 one_10=
38、(miao_in/10)+8b00110000; one_11=(miao_in%10)+8b00110000; one_15=(c24_in/10)+8b00110000; one_16=(c24_in%10)+8b00110000; two_1=(jie%10)+8b00110000; two_5=(score1/100)+8b00110000; /获得比分百位 two_6=(score1-(score1/100)*100)/10)+8b00110000; /获得比分十位 two_7=(score1-(score1/100)*100)%10)+8b00110000; /获得比分个位 two
39、_9=(score2/100)+8b00110000; two_10=(score2-(score2/100)*100)/10)+8b00110000; two_11=(score2-(score2/100)*100)%10)+8b00110000; endalways (posedge lcd_clk ) begin case(next) state0 : begin rs=0; data=8h38; next=state1; end /配置液晶 state1 : begin rs=0; data=8h0e; next=state2; end state2 : begin rs=0; data=8h06; next=state3; end state3 : begin rs=0; data=8h01; next=state4; end state4 : begin rs=0; data=8h80; next=data0; end /显示第一行,地址80H data0 : begin rs=1; data=one_1; next=data1 ; end data1 :
限制150内