单片机接口实验
篮球计分器的设计
**: *** 班级: 14级12班 学号: ********** **: *** 专业: 控制科学与工程
成绩评定 学生:苗茂宇 学号:**********
目 录
摘 要...................................................................................................................... 1 Abstract .................................................................................................................. 1 1. FPGA及系统设计概述 .................................................................................... 2
1.1. EDA简介 ............................................................................................ 2
1.1.1. EDA定义 ................................................................................ 2 1.1.2. EDA发展概述 ........................................................................ 2 1.1.3. HDL概述 ................................................................................ 2 1.1.4. 总结.......................................................................................... 3 1.2. FPGA简介 .......................................................................................... 3
1.2.1. FPGA概述 .............................................................................. 3 1.2.2. FPGA原理 .............................................................................. 4 1.3. LCD1602.............................................................................................. 4 1.4. 产品现状及发展.................................................................................. 5 1.5. 总体设计要求...................................................................................... 5
1.5.1. 设计流程.................................................................................. 5 1.5.2. 设计要求.................................................................................. 5 1.6. 本章小结.............................................................................................. 6 2. 实验方案设计................................................................................................... 6
2.1. 分频模块.............................................................................................. 6 2.2. 计时模块.............................................................................................. 7 2.3. 24秒计时模块..................................................................................... 9 2.4. 计分模块............................................................................................ 10 2.5. lcd驱动模块 ...................................................................................... 11 2.6. 本章小结............................................................................................ 17 3. 实验结论......................................................................................................... 17 4. 结束语............................................................................................................. 18 参考文献.............................................................................................................. 19 附录 1.................................................................................................................. 20
学生:苗茂宇 学号:1408202007
摘 要
FPGA(现场可编程逻辑器件)以其体积小、功耗低、稳定性高等优点被广泛应用于各类电子产品的设计中。FPGA是基于硬件可编程的器件,设计者需要掌握硬件描述语言,Verilog HDL就是一种硬件描述语言。Verilog HDL语言是在C语言的基础上发展而来的,语法结构上与C语言有很多相似之处,继承了C语言的语法结构,但是其与C语言有着本质上的区别。本设计是基于FPGA的篮球计时计分系统的设计,结合篮球比赛的实际过程,对系统进行了模块化设计,最终组合调试。硬件实验表明本系统计时计分准确,实时性好,能够很好的反应比赛进度,此次设计达到了设计预期。
关键词:FPGA;Verilog HDL;计时计分;模块化
Abstract
FPGA (field programmable logic device) with its small size, low power consumption, high stability has been widely used in various types of electronic
products design. 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 structure of C language and C language, but there's 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 that 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; modular
学生:苗茂宇 学号:1408202007
1
1. FPGA及系统设计概述
1.1. EDA简介
1.1.1. EDA定义
EDA是电子设计自动化(Electronic Design Automation)的缩写。由于它是一门刚刚发展起来的新技术,涉及面广,内容丰富,理解各异,所以目前尚无一个确切的定义。但从EDA技术的几个主要方面的内容来看,可以理解为:EDA技术是以大规模可编程逻辑器件为设计载体,以硬件描述语言为系统逻辑描述的主要表达方式,以计算机、大规模可编程逻辑器件的开发软件及实验开发系统为设计工具,通过有关的开发软件,自动完成用软件的方式设计电子系统到硬件系统的一门新技术。可以实现逻辑编译、逻辑化简、逻辑分割、逻辑综合及优化,逻辑布局布线、逻辑仿真。完成对于特定目标芯片的适配编译、逻辑映射、编程下载等工作,最终形成集成电子系统或专用集成芯片。
1.1.2. EDA发展概述
EDA技术是伴随着计算机、集成电路、电子系统的设计发展起来的,至今已有30多年的历程。大致可以分为三个发展阶段。20世纪70年代的CAD(计算机辅助设计)阶段:这一阶段的主要特征是利用计算机辅助进行电路原理图编辑,使得设计师从传统高度重复繁杂的绘图劳动中解脱出来。20世纪80年代的计算机辅助工程设计阶段:这一阶段的主要特征是以逻辑摸拟、定时分析、故障仿真为核心,重点解决电路设计的功能检测等问题,使设计而能在产品制作之前预知产品的功能与性能。20世纪90年代是EDA(电子设计自动化)阶段:这一阶段的主要特征是以高级描述语言,系统级仿真和综合技术为特点,采用“自顶向下”的设计理念,将设计前期的许多高层次设计由EDA工具来完成。EDA是电子技术设计自动化,也就是能够帮助人们设计电子电路或系统的软件工具。该工具可以在电子产品的各个设计阶段发挥作用,使设计更复杂的电路和系统成为可能。在原理图设计阶段,可以使用EDA中的仿真工具论证设计的正确性;在芯片设计阶段,可以使用EDA中的芯片设计工具设计制作芯片的版图:在电路板设计阶段,可以使用EDA中电路板设计工具设计多层电路板。特别是支持硬件描述语言的EDA工具的出现,使复杂数字系统设计自动化成为可能,只要用硬件描述语言将数字系统的行为描述正确,就可以进行该数字系统的芯片设计与制造。有专家认为,21世纪将是四A技术的高速发展期,EDA技术将是对21世纪产生重大影响的十大技术之一。
1.1.3. HDL概述
硬件描述语言(HDL)是一种用于进行电子系统硬件设计的计算机高级语言,它采用软件的设计方法来描述电子系统的逻辑功能、电路结构和连接形式。硬件描述语言可以在三个层次上进行电路描述,其层次由高到低分为行为级和R,几级和门电路级。常用硬件描述语言有HDL、Verilog和AHDL语言。HDL语言是一种高级描述语言,适用于行为级和R,几级的描述;Verilog语言和AHDL语言属于一种较低级的描述语言,适用于R,几级和门电路级的描述。现在HDL和Verilog作为工业标准硬件描述语言,已得到众多EDA公司的支持,在电子工
学生:苗茂宇
学号:1408202007
2
程领域,它们已成为事实上的通用硬件描述语言,承担几乎全部的数字系统的设计任务。
应用HDL进行电子系统设计有以下优点:
(1)与其他硬件描述语言相比, HDL具有更强的行为描述能力,强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。
(2) HDL具有丰富的仿真语句和库函数,使得在任何大系统的设计早期就能检查设计系统的功能可行性,并可以随时对系统进行仿真。
(3)用VHDL完成的设计,可以利用EDA工具进行逻辑综合和优化,并可根据不同的目标芯片自动把VHDL描述设计转变成门级网表,这种设计方式极大地减少了电路设计的时间及可能发生的错误,从而降低了开发成本。
(4)VHDL对设计的描述具有相对性,可以在设计者不懂硬件结构的情况下,也不必管最终设计的目标器件是什么,而进行的设计。
(5)由于VHDL具有类属描述语句和子程序调用等功能,所以对于已完成的设计,可以在不改变源程序的情况厂,只需改变类属参量或函数,就能很容易地改变及计的规模和结构。
1.1.4. 总结
电子EDA技术发展迅猛,逐渐在教学、科研、产品设计与制造等各方面都发挥着巨大的作用。在教学方面:几乎所有理工科(特别是电子信息)类的高校都开设了EDA课程。主要是让学生了解EDA的基本原理和基本概念、VHDL描述系统逻辑的方法、使用EDA工具进行电子电路课程的模拟仿真实验并在作毕业设计时从事简单电子系统的设计,为今后工作打下基础。具有代表性的是全国每两年举办一次大学生电子设计竞赛活动。在科研方面:主要利用电路仿真工具(EWB或PSPICE、VLOL等)进行电路设计与仿真;利用虚拟仪器进行产品调试;将CPLD/FPGA器件的开发应用到仪器设备中。例如在CDMA无线通信系统中,所有移动手机和无线基站都工作在相同的频谱,为区别不同的呼叫,每个手机有一个唯一的码序列,CDMA基站必须能判别这些不同观点的码序列才能分辨出不同的传呼进程;这一判别是通过匹配滤波器的输出显示在输人数据流中探测到特定的码序列;FPGA能提供良好的滤波器设计,而且能完成DSP高级数据处理功能,因而FPGA在现代通信领域方面获得广泛应用。在产品设计与制造方面:从高性能的微处理器、数字信号处理器一直到彩电、音响和电子玩具电路等,EDA技术不单是应用于前期的计算机模拟仿真、产品调试,而且也在电子设备的研制与生产、电路板的焊接过程中有重要作用。可以说电子EDA技术已经成为电子工业领域不可缺少的技术支持。
1.2. FPGA简介
1.2.1. FPGA概述
FPGA是英文Field Programmable Gate Array的缩写,即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。FPGA(现场可编程门阵列)是专用集成电路(ASIC)中集成度最高的一种,用户可对FPGA内部的
学生:苗茂宇 学号:1408202007
3
逻辑模块和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)三个部分。FPGA的基本特点主要有:
1、采用FPGA设计ASIC电路,用户不需要投片生产,就能得到合用的芯片。 2、FPGA可做其它全定制或半定制ASIC电路的中试样片。 3、FPGA内部有丰富的触发器和I/O引脚。
4、FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。
5、FPGA采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容。 FPGA是由存放在片内RAM中的程序来设置其工作状态的,因此,工作时需要对片内的RAM进行编程。用户可以根据不同的配置模式,采用不同的编程方式。
加电时,FPGA芯片将EPROM中数据读入片内编程RAM中,配置完成后,FPGA进入工作状态。掉电后,FPGA恢复成白片,内部逻辑关系消失,因此,FPGA能够反复使用。FPGA的编程无须专用的FPGA编程器,只须用通用的EPROM、PROM编程器即可。当需要修改FPGA功能时,只需换一片EPROM即可。这样,同一片FPGA,不同的编程数据,可以产生不同的电路功能。因此,FPGA的使用非常灵活。
FPGA有多种配置模式:并行主模式为一片FPGA加一片EPROM的方式;主从模式可以支持一片PROM编程多片FPGA;串行模式可以采用串行PROM编程FPGA;外设模式可以将FPGA作为微处理器的外设,由微处理器对其编程。
1.3. LCD1602
LCD1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5×7或者5×11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用。
LCD1602共有16个引脚,其引脚图如下图示。
图1 LCD1602引脚图
学生:苗茂宇 学号:1408202007
4
第1脚:VSS为地电源。
第2脚:VDD接5V正电源。
第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。
第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。
第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:D0~D7为8位双向数据线。 第15脚:背光源正极。 第16脚:背光源负极。
1.4. 产品现状及发展
作为每场篮球赛的必备品,比赛的记分器的质量显得尤为重要。目前使用的记分器大部分是基于单片机技术,以单片机为主要器件,其编码器与解码器的生成为软件方式。在实际应用中,由于程序不稳定,系统的可靠性能比较差。基于现场可编程逻辑门阵列FPGA器件的记分器,用FPGA器件构造系统,所有算法完全由硬件电路来实现,使得系统的工作可靠性大为提高。由于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)安排芯片管脚位置(使用Floorplan Editor); (6)下载程序至芯片(使用Programmer)。
1.5.2. 设计要求
采用计数的方法设计了计时器模块、计分器模块,结合1602液晶控制方法设计了显示模块。
(1)计时器完成篮球比赛4节12分钟的倒计时; (2)一次进攻时间24秒的计时;
(3)计分器实现甲乙两队加分,分数调整的功能; (4)显示部分完成时间、比分的显示等。
(5)实现比赛暂停功能,且暂停时24秒保持;
学生:苗茂宇 学号:1408202007
5
(6)单独24秒重新计时功能。
1.6. 本章小结
通过对EDA、HDL、FPGA、LCD1602的了解使我们对篮球计分器的设计有了更进一步的了解,是我们更加深入的了解篮球计分器设计所需用到的知识,通过对设计流程和设计要求的描述,使我们对篮球计分器的设计有了一个总体框架,为后续的具体设计做了必要的前提。
2. 实验方案设计
本系统的设计采用自顶向下,模块化的设计方法。首先根据设计要求确定系统的必要组成部分,然后分别设计,最后组合起来进行测试。
在此次设计中将系统分为5个模块,即:分频模块、计时模块、24s计时模块、计分模块和lcd驱动模块。先分别进行设计、调试,最后将5个模块联接进行调试,最终完成设计。
系统框图如下图所示。
晶振计时模块系统时钟24秒计时模块计分模块lcd驱动Lcd 图2 系统框图
2.1. 分频模块
分频模块如下图所示。
图3 分频模块
学生:苗茂宇 学号:1408202007
6
分频模块将系统频率从20Mhz分为1hz,以符合计时模块的周期要求,在这个模块中,计数器每计满1千万次进行一次翻转,达到了周期为1s的分频要求。源程序:
module fenp(clk_in,rst,clk_out);//分频模块 input clk_in; input rst;
output clk_out; reg clk_out; reg [31:0]cnt;
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_out; end end endmodule
2.2. 计时模块
计时模块如下图所示。
图4 计时模块 //比赛时间倒计时模块,每节12min,共4节
module jishi(clk_1hz,clr,pause,min_out,miao_out,jie); input clk_1hz; input clr,pause;
output[7:0]min_out,miao_out; output [3:0]jie;
reg [7:0]min_out,miao_out;
学生:苗茂宇 学号:1408202007
7
reg [3:0]jie; reg cn;
always@(posedge clk_1hz or negedge clr) begin if(!clr)
begin min_out<=8'd0; miao_out<=8'd0; end
else if(!pause) begin
if(miao_out==8'd0)
begin miao_out<=8'd59; if(min_out==8'd00)
begin min_out<=8'd11; cn<=1; end
else min_out<=min_out-8'd1; end
else begin miao_out<=miao_out-8'd1; cn<=0; end end end
always@(posedge cn or negedge clr) begin if(!clr)
begin jie<=4'd0; end
else jie<=jie+1'd1; end endmodule
计时模块采用倒计时法,其仿真波形如下图所示。
1、计时开始,节数为1,分钟位为11,秒位为59,倒计时开始。
图5 计时开始
2、暂停时,给出pause信号,计时暂停。
学生:苗茂宇 学号:1408202007
8
图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:0]c24_out; reg [7:0]c24_out;
学生:苗茂宇 学号:1408202007
9
always@(posedge clk_1Hz or negedge clr) begin if(!clr)
begin c24_out<=8'd0;end else if(!change)
begin c24_out<=8'd0;end else if(pause)
begin c24_out<=8'd0;end else if(c24_out==8'd00)
begin c24_out<=8'd23;end else c24_out<=c24_out-1'd1; end endmodule
24秒倒计时模块仿真如下图所示。
由图可以看出,当clr,pause,change信号来临时,计时清零。
图9 24秒计时仿真
2.4. 计分模块
计分模块如下所示。
图10 计分模块
计分模块采用选择开关来为两支队伍分别加分,当key_sel信号为高时,为第一支队伍加分,当key_sel信号为低时,为第二支队伍加分。分值由case语句进行选择。源程序:
module key(clk,key_en,clr,key_sel,score1,score2);//计分模块 input key_en,clk,clr;
学生:苗茂宇 学号:1408202007
10
input [2:0] key_sel; output [7:0]score1; output [7:0]score2; reg [2:0]key_out; reg [7:0]score1; reg [7:0]score2; always@(key_sel ) begin
case(key_sel)
3'b110:key_out=3'd1; 3'b101:key_out=3'd2; 3'b011:key_out=3'd3; default:key_out=3'd0; endcase end
always@(posedge clk or negedge clr) begin if(!clr)
begin score1<=8'd0;score2<=8'd0; end else if(key_en)
begin score1<=score1+key_out;
score2<=score2; end else if(!key_en)
begin score2<=score2+key_out;
score1<=score1; end end endmodule
2.5. lcd驱动模块
Lcd驱动模块如下所示。
图11 lcd驱动模块
本系统通过lcd1602来显示时间和比分信息,其相关指令表如下:
学生:苗茂宇 学号:1408202007
11
图12 LCD指令表
指令1:清显示,指令码01H,光标复位到地址00H位置。 指令2:光标复位,光标返回到地址00H。
指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。
指令4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。
指令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,jie,min_in,miao_in,c24_in,score1,score2);//lcd显示驱动
学生:苗茂宇 学号:1408202007
12
input clk;
input [7:0]miao_in; input [7:0]min_in; input [7:0]c24_in; input [3:0]jie; input [7:0]score1; input [7:0]score2; output rs,en,rw; output [7:0] data; reg rs,en_sel; reg [7:0] data;
reg [31:0]count; //lcd_clk 分频计数器 reg lcd_clk; reg [7:0] one_1,one_2,one_3,one_4,one_5,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 =8'h00, //设置8位格式,2行 8'h38;
state1 =8'h01, //整体显示,关光标,不闪烁 8'h0C 闪烁 8'h0e
state2 =8'h02, //设定输入方式,增量不移位 8'h06 state3 =8'h03, //清除显示 8'h01 state4 =8'h04, //显示第一行的指令 80H
state5 =8'h05, //显示第二行的指令 80H+40H scan =8'h06, nul =8'h07; parameter
data0 =8'h10, //2行,共32个数据 data1 =8'h11, data2 =8'h12, data3 =8'h13, data4 =8'h14, data5 =8'h15, data6 =8'h16, data7 =8'h17, data8 =8'h18, data9 =8'h19, data10 =8'h20, data11 =8'h21, data12 =8'h22,
学生:苗茂宇 学号:1408202007
13
data13 =8'h23, data14 =8'h24, data15 =8'h25, data16 =8'h26, data17 =8'h27, data18 =8'h28, data19 =8'h29, data20 =8'h30, data21 =8'h31, data22 =8'h32, data23 =8'h33, data24 =8'h34, data25 =8'h35, data26 =8'h36, data27 =8'h37, data28 =8'h38, data29 =8'h39, data30 =8'h40, data31 =8'h41; initial begin
//第一行显示 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_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;
学生:苗茂宇 学号:1408202007
14
one_7<=(min_in/10)+8'b00110000; //获得分钟十位
one_8<=(min_in%10)+8'b00110000; //获得分钟个位
one_10<=(miao_in/10)+8'b00110000; one_11<=(miao_in%10)+8'b00110000; one_15<=(c24_in/10)+8'b00110000; one_16<=(c24_in%10)+8'b00110000; two_1<=(jie%10)+8'b00110000;
two_5<=(score1/100)+8'b00110000; //获得比分百位
two_6<=((score1-(score1/100)*100)/10)+8'b00110000; //获得比分十位
two_7<=((score1-(score1/100)*100)%10)+8'b00110000; //获得比分个位
two_9<=(score2/100)+8'b00110000;
two_10<=((score2-(score2/100)*100)/10)+8'b00110000; two_11<=((score2-(score2/100)*100)%10)+8'b00110000; end
always @(posedge lcd_clk ) begin
case(next) state0 :
begin rs<=0; data<=8'h38; next<=state1; end //配置液晶 state1 :
begin rs<=0; data<=8'h0e; next<=state2; end state2 :
begin rs<=0; data<=8'h06; next<=state3; end state3 :
begin rs<=0; data<=8'h01; next<=state4; end state4 :
begin rs<=0; data<=8'h80; next<=data0; end //显示第一行,地址80H data0 :
begin rs<=1; data<=one_1; next<=data1 ; end data1 :
begin rs<=1; data<=one_2; next<=data2 ; end data2 :
begin rs<=1; data<=one_3; next<=data3 ; end data3 :
begin rs<=1; data<=one_4; next<=data4 ; end data4 :
begin rs<=1; data<=one_5; next<=data5 ; end data5 :
begin rs<=1; data<=one_6; next<=data6 ; end
学生:苗茂宇 学号:1408202007
15
data6 :
begin rs<=1; data<=one_7; next<=data7 ; end data7 :
begin rs<=1; data<=one_8; next<=data8 ; end data8 :
begin rs<=1; data<=one_9; next<=data9 ; end data9 :
begin rs<=1; data<=one_10; next<=data10 ; end data10 :
begin rs<=1; data<=one_11; next<=data11 ; end data11 :
begin rs<=1; data<=one_12; next<=data12 ; end data12 :
begin rs<=1; data<=one_13; next<=data13 ; end data13 :
begin rs<=1; data<=one_14; next<=data14 ; end data14 :
begin rs<=1; data<=one_15; next<=data15 ; end data15 :
begin rs<=1; data<=one_16; next<=state5 ; end state5:
begin rs<=0;data<=8'hC0; next<=data16; end //显示第二行,地址C0H data16 :
begin rs<=1; data<=two_1; next<=data17 ; end data17 :
begin rs<=1; data<=two_2; next<=data18 ; end data18 :
begin rs<=1; data<=two_3; next<=data19 ; end data19 :
begin rs<=1; data<=two_4; next<=data20 ; end data20 :
begin rs<=1; data<=two_5; next<=data21 ; end data21 :
begin rs<=1; data<=two_6; next<=data22 ; end data22 :
begin rs<=1; data<=two_7; next<=data23 ; end data23 :
begin rs<=1; data<=two_8; next<=data24 ; end data24 :
begin rs<=1; data<=two_9; next<=data25 ; end data25 :
begin rs<=1; data<=two_10; next<=data26 ; end data26 :
begin rs<=1; data<=two_11; next<=data27 ; end
学生:苗茂宇 学号:1408202007
16
data27 :
begin rs<=1; data<=two_12; next<=data28 ; end data28 :
begin rs<=1; data<=two_13; next<=data29 ; end data29 :
begin rs<=1; data<=two_14; next<=data30 ; end data30 :
begin rs<=1; data<=two_15; next<=data31 ; end data31 :
begin rs<=1; data<=two_16; next<=scan ; end
scan : //交替更新第一行和第二行数据 begin
next<=state4; end
default: next<=state0; endcase end
assign en=lcd_clk && en_sel; assign rw=0; endmodule
在此模块中,运用了有限状态机,将此模块的状态分为两个部分,一是设置显示部分,二是送数据部分。根据lcd1602的指令资料,将lcd设置成想要的显示格式。lcd1602有两行,每行可以显示16个字符,在设计中将16*2个字符都分别定义了指针,然后根据排版把数据送到相应的位。
2.6. 本章小结
所有模块都已设计调试完毕,并能实现各自功能,通过对各个模块的编程,是我对各个模块的性能及编译方式有了更深刻的体会,最后进行组合测试。系统图见附录1.
3. 实验结论
本次设计叙述了篮球计时计分器的基本原理及使用方法,给出了一种篮球计时计分器的设计方案。此次设计的篮球计时计分器,电路简单,而且易懂,使操作使用者使用非常方便,成本较低,灵敏可靠,计录准确,连接简单,具有非常高的使用价值。
设计的系统经过编译后下载到Altera公司的EP3C5E144开发板上,能准确的计时计分,较好的实现了篮球比赛的计时计分器功能,完成比赛过程中的每节12min,进攻24s,1~4节自动显示,完成1、2、3分得分加分功能。可以使参加比赛的成员、裁判和观众一目了然的看到所有参加者的成绩,以最快的速度评出结果.该篮球计时计分器还能广泛应用于各类知识竞赛。
本设计采用模块化设计,各模块可以单独调整,通用性强,方便调试,直观易懂。在此基础上还可以进行其他功能的扩展。此次设计基本完成了设计要求,但是在按键去抖控制,时间实时性上还有进一步改善的空间。
学生:苗茂宇 学号:1408202007
17
4. 结束语
本设计利用数字EDA技术实现的,是在FPGA的基础上,利用VHDL语句进行篮球记分器的设计,并用MAX+plusⅡ软件进行编译、仿真,检查程序是否正确以及能否实现该模块的功能,以便及时修改。设计时遇到问题比较多,通过网上搜索以及相关文献的查阅,逐步解决各个问题。
通过此次设计我进一步加深了对Verilog HDL的理解,经过写代码、编译、找错、下载实现等一系列训练,让我对Verilog HDL的语言风格和特色有了掌握,这对我进一步深入学习FPGA有很大的帮助。
在实际应用中,还可以对显示排版方便地进行修改,加入比赛双方的名字等信息。对lcd1602的显示状态也可以进行各种调整以达到不同的显示要求。在这一方面还有待提升。
在此次设计中潘明老师给予了我帮助和支持。无论是在理论上还是在实践中,他都让我更加理解了FPGA。谢谢老师。
学生:苗茂宇 学号:1408202007
18
参考文献
[1]潘松,黄继业,潘明.EDA技术实用教程[M].科学出版社.2010.7 [2]刘波.精通Verilog HDL语言编程[M].电子工业出版社.2007.5 [3]王金明.数字系统设计与Verilog HDL[M].电子工业出版社.2005.9 [4]唐庭龙,陆酉.基于FPGA的篮球计时计分器的设计与实现[J].三峡大学学报(自然科学版),2010.12(32),80-83
[5]张洪润,张亚凡等.FPGA/CPLD应用设计200例[M].2009.1
[6]王诚等. Altera FPGA/CPLD设计·基础篇[M].人民邮电出版社,2005.6 [7]赵艳华, 曹丙霞, 业出版社,2009.2
学生:苗茂宇 学号:1408202007
张睿.基于Quartus Ⅱ的FPGA/CPLD设计与应用[M].电子工19
附录 1
学生:苗茂宇 学号:1408202007
20
因篇幅问题不能全部显示,请点此查看更多更全内容