课题名称 设计内容及要求 设计工作量 篮球比赛电子记分牌设计 设计一个篮球比赛记分牌,使用4位数码管显示倒计时的分钟、秒钟值;2位数码管显示A方得分;2位数码管显示B方得分;使用LED灯作为上、下半场的标志;单次加分值包括1分、2分和3分。 系统提供50MHZ频率的时钟源。完成该系统的硬件和软件的设计,并制作出实物装置,调试好后并能实际运用(指导教师提供制作所需的器件),最后就课程设计本身提交一篇课程设计说明书。 1、VHDL语言程序设计; 2、波形仿真; 3、在实验装置上进行硬件测试,并进行演示; 4、提交一份完整的课程设计说明书,包括设计原理、程序设计、程序分析、仿真分析、硬件测试、调试过程,参考文献、设计总结等。 起止日期(或时间量) 第1天 第2天 设计内容(或预期目标) 课题介绍,答疑,收集材料 设计方案论证 进一步讨论方案, 对设计方案进行必要的修正,方案确定后开始进行VHDL语言程序设计 设计VHDL语言程序 在实验装置上进行硬件测试,编写设计说明书 编写设计说明书 年 月 日 年 月 日 备注 进度安排 第3天 第4天 第5天 教研室 意见 系(部)主管领导意见
- 1 -
目 录
一、概述 ................................................................ - 3 -
1、EDA的介绍 ........................................................ - 3 - 2、篮球比赛电子记分牌的介绍 .......................................... - 3 - 二、设计目的 ............................................................ - 4 - 三、设计内容及要求 ...................................................... - 4 - 四、设计思路 ............................................................ - 4 - 五、单元模块设计 ........................................................ - 5 -
1、分频模块 .......................................................... - 5 - 2、计时模块 .......................................................... - 6 - 3、计分模块 .......................................................... - 7 - 4、显示模块 .......................................................... - 9 - 5、 消抖模块 ........................................................ - 10 - 六、仿真结果及分析 ..................................................... - 14 -
1、引脚分配图 ....................................................... - 14 - 2、设计仿真图 ....................................................... - 15 - 3、 硬件测试 ........................................................ - 15 - 4、仿真结果分析 ..................................................... - 15 - 七、设计总结与心得 ..................................................... - 16 - 八、参考文献 ........................................................... - 17 -
- 2 -
一、概述
1、EDA的介绍
EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪60年代中期从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。
EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言VHDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。EDA技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。
2、篮球比赛电子记分牌的介绍
体育比赛计时计分系统是对体育比赛过程中所产生的时间、比分等数据进行快速采集记录,加工处理,传递数据的信息系统。根据不同运动项目的不同比赛规则要求,体育比赛的计时计分系统包括测量类、评分类、命中类、制胜类得分类等多种类型。
篮球比赛是根据参赛队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统是一个负责篮球比赛的数据采集和分配的专用系统,它负责对比赛结果、成绩信息的采集处理、传输分配。篮球比赛的计时计分系统由计时器、计分器等多种电子设备组成,由于比赛的不可重复性,决定了篮球计时计分系统是一个实时性很强、可靠性要求极高的电子服务系统,所以计时计分设备是篮球比赛中不可缺少的电子设备,计时计分系统设计是否合理,关系到比赛系统运行的稳定和可靠,并直接影响到比赛的顺利进行。同时,根据目前高水平篮球比赛要求,完善的篮球比赛计时计分系统设备应能够与现场成绩处理、现场大屏幕、电视转播车等多种设备相联,以便实现高比赛现场感、表演娱乐观众等功能目标。随着比赛规则的进一步完善,相应的计时计分系统也必须随之改进。
- 3 -
二、设计目的
(1)熟悉FPGA开发的环境和FPGA的结构,了解FPGA开发的流程,熟悉VHDL语言
设计电路的方法。
(2)能更熟练的使用VHDL设计FPGA。
(3)提高动手能力与实践能力,将软硬件结合起来。
三、设计内容及要求
设计一个篮球比赛记分牌,使用4位数码管显示倒计时的分钟、秒钟值;2位数码管显示A方得分;2位数码管显示B方得分;使用LED灯作为上、下半场的标志;单次加分值包括1分、2分和3分。
系统提供50MHZ频率的时钟源。完成该系统的硬件和软件的设计,并制作出实物装置,调试好后并能实际运用(指导教师提供制作所需的器件),最后就课程设计本身提交一篇课程设计说明书。
四、设计思路
此次设计是采用QUARTUS II软件,以VHDL为主要编程语言来设计在篮球比赛时所用到的计时系统,记分系统。篮球比赛计时记分系统程序多而且复杂,所以用图形设计方法来设计。先把每一模块的程序写好,然后生成图形文件,最后新建一个顶层图形文件,把各模块联结起来。包括的模块有分频模块、计时模块、记分模块、脉冲产生模块、滤波模块、选择模块、声光显示模块,显示模块及消抖模块等。
设计框图如下:
- 4 -
.
分频模块
模式控制模块(脉冲产生、滤波、选择、显示) 计时模块 消抖模块 计分模块 五、单元模块设计
1、分频模块
分频模块功能是将50MHz晶振电路高频率时钟信号变成需要的低频率时钟信号。 分频模块代码如下:
BEGIN
PROCESS(CLK) --1hz VARIABLE NUM:INTEGER RANGE 100000000 DOWNTO 0; BEGIN IF CLK'EVENT AND CLK = '1' THEN IF NUM < 25000000 THEN NUM := NUM + 1; ELSE NUM := 0; CLK1 <= NOT CLK1; END IF; END IF; END PROCESS;
PROCESS(CLK) -- 100HZ VARIABLE NUM:INTEGER RANGE 100000000 DOWNTO 0; BEGIN IF CLK'EVENT AND CLK = '1' THEN IF NUM < 50000 THEN NUM := NUM + 1; ELSE
- 5 -
NUM := 0; CLK2 <= NOT CLK2; END IF; END IF; END PROCESS;
2、计时模块
12进制减法计数器
这个计数器用来表示每一节比赛的分钟位,它的时钟脉冲应由前一个60进制计数器的CO提供。具备复位功能。可以将12进制改为任意进制的减法计数器。当计数结束后,计数器不再计数。 当CO有效时进行减法计数,当计数器减到0之,SO输出一个高电平。EN等于1时计数器复位,当C05等于1时实现比赛加时操作。
60进制减法计数器
这个计数器用来表示每一节比赛的秒钟位。要求在完成12个60进制的计数后,计数器不再计数。具备清零、暂停以及复位的功能。 当CLK有效时进行减法计数,CLR等于1时整个计数器清零,EN等于1时计数器复位,PAUSE等于1时计数器暂停计数,。当计数器减到0之,CO输出一个高电平。
计时模块代码如下:
PROCESS(CLK1) --SHIJIAN BEGIN IF CLK1'EVENT AND CLK1 = '1' THEN MIAO2 <= MIAO2 - '1'; IF MIAO2 = \"1111\" THEN MIAO2 <= \"1001\"; MIAO1 <= MIAO1 - '1'; IF MIAO1 = \"1111\" THEN MIAO1 <= \"1001\"; FEN2 <= FEN2 - '1'; IF FEN2 = \"1111\" THEN FEN2 <= \"1001\"; FEN1 <= FEN1 - '1'; IF FEN1 = \"1111\" THEN FEN1 <= \"1001\"; END IF; END IF; END IF; END IF; END IF;
- 6 -
END PROCESS;
3、计分模块
计分模块的基本功能:用2位数码管显示A方得分;2位数码管显示B方得分;使用LED灯作为上、下半场的标志;单次加分值分别为1分、2分和3分,用拨码开关和按键共同实现加分功能,其中,当拨码开关为00时,按下按键加1分;当拨码开关为01时,按下按键加2分;当拨码开关为10时,按下按键加3分。
计分模块代码如下:
PROCESS(KOUT1_1,KEY1) BEGIN IF KOUT1_1'EVENT AND KOUT1_1 = '1' THEN CASE KEY1 IS WHEN \"00\" => COUNT1_1 <= COUNT1_1 + '1'; --+1FEN IF COUNT1_1 = \"1001\" THEN COUNT1_2 <= COUNT1_2 + '1'; COUNT1_1 <= COUNT1_1 - \"1010\"; IF COUNT1_2 = \"1001\" THEN COUNT1_2 <= \"0000\"; END IF; END IF; WHEN \"01\" => COUNT1_1 <= COUNT1_1 + \"0010\"; --+2FEN IF COUNT1_1(3) = '1' THEN IF COUNT1_1(0) = '1' OR COUNT1_1(1) = '1' OR COUNT1_1(2) = '1' THEN COUNT1_2 <= COUNT1_2 + '1'; COUNT1_1 <= COUNT1_1 - \"1010\"; IF COUNT1_2 = \"1001\" THEN COUNT1_2 <= \"0000\"; END IF; END IF; END IF; WHEN \"10\" => COUNT1_1 <= COUNT1_1 + \"0011\"; -- +3FEN IF COUNT1_1(3) = '1' THEN IF COUNT1_1(0) = '1' OR COUNT1_1(1) = '1' OR COUNT1_1(2) = '1' THEN
COUNT1_2 <= COUNT1_2 + '1'; COUNT1_1 <= COUNT1_1 - \"1010\"; IF COUNT1_2 = \"1001\" THEN COUNT1_2 <= \"0000\"; END IF; END IF; END IF;
- 7 -
WHEN OTHERS => NULL; END CASE; END IF; END PROCESS;
PROCESS(KOUT1_2,KEY2) BEGIN IF KOUT1_2'EVENT AND KOUT1_2 = '1' THEN CASE KEY2 IS WHEN \"00\" => COUNT2_1 <= COUNT2_1 + '1'; --+1FEN IF COUNT2_1 = \"1001\" THEN COUNT2_2 <= COUNT2_2 + '1'; COUNT2_1 <= COUNT2_1 - \"1010\"; IF COUNT2_2 = \"1001\" THEN COUNT2_2 <= \"0000\"; END IF; END IF; WHEN \"01\" => COUNT2_1 <= COUNT2_1 + \"0010\"; --+2FEN IF COUNT2_1(3) = '1' THEN IF COUNT2_1(0) = '1' OR COUNT2_1(1) = '1' OR COUNT2_1(2) = '1' THEN COUNT2_2 <= COUNT2_2 + '1'; COUNT2_1 <= COUNT2_1 - \"1010\"; IF COUNT2_2 = \"1001\" THEN COUNT2_2 <= \"0000\"; END IF; END IF; END IF; WHEN \"10\" => COUNT2_1 <= COUNT2_1 + \"0011\"; -- +3FEN IF COUNT2_1(3) = '1' THEN IF COUNT2_1(0) = '1' OR COUNT2_1(1) = '1' OR COUNT2_1(2) = '1' THEN
COUNT2_2 <= COUNT2_2 + '1'; COUNT2_1 <= COUNT2_1 - \"1010\"; IF COUNT2_2 = \"1001\" THEN COUNT2_2 <= \"0000\"; END IF; END IF; END IF; WHEN OTHERS => NULL; END CASE; END IF; END PROCESS;}
- 8 -
4、显示模块
译码显示模块将上一个模块输出四个一位数译码成相对应的七位数码管段码,完成倒计时的译码和显示。由于试验箱采用动态显示,所以需要将BCD码转换成段码和位码。 D0到D7分别表示8个LED管。
显示模块代码如下:
BEGIN
IF CLK2'EVENT AND CLK2 = '1' THEN WEI_SEL <= WEI_SEL + '1'; END IF;
END PROCESS;
PROCESS(WEI_SEL) --wei xuan BEGIN CASE WEI_SEL IS WHEN \"000\" => WEI <= \"00000001\"; DISP<= MIAO2; WHEN \"001\" => WEI <= \"00000010\"; DISP<= MIAO1; WHEN \"010\" => WEI <= \"00000100\"; DISP<= FEN2; WHEN \"011\" => WEI <= \"00001000\"; DISP<= FEN1; WHEN \"100\" => WEI <= \"00010000\"; DISP<= COUNT1_1; WHEN \"101\" => WEI <= \"00100000\"; DISP<= COUNT1_2; WHEN \"110\" => WEI <= \"01000000\"; DISP<= COUNT2_1; WHEN \"111\" => WEI <= \"10000000\"; DISP<= COUNT2_2; WHEN OTHERS => NULL; END CASE; END PROCESS;
PROCESS(DISP) BEGIN CASE DISP IS WHEN \"0000\" => LED7S <=\"1000000\";--0 WHEN \"0001\" => LED7S <=\"1111001\";--1 WHEN \"0010\" => LED7S <=\"0100100\";--2 WHEN \"0011\" => LED7S <=\"0110000\";--3 WHEN \"0100\" => LED7S <=\"0011001\";--4
- 9 -
WHEN \"0101\" => LED7S <=\"0010010\";--5 WHEN \"0110\" => LED7S <=\"0000010\";--6 WHEN \"0111\" => LED7S <=\"1111000\";--7 WHEN \"1000\" => LED7S <=\"0000000\";--8 WHEN \"1001\" => LED7S <=\"0010000\";--9 WHEN OTHERS => NULL; END CASE; END PROCESS;
5、消抖模块
消抖模块的原理就是把一个按键周期内所输入的所有有效信号,包括那些毛刺,处理成一个脉冲输入。能达到这点,就可以实现消抖功能了。这个设计中存在很多的毛刺,会影响设计的效果及结果,所以需要采用几个消抖的模块来使设计更加的准确。其中,该设计中主要是对按键的消抖。
消抖模块代码如下:
PROCESS(BUTTON1_1,CLK) --BUTTON1_1 XIAO DOU VARIABLE NUM :INTEGER RANGE 0 TO 1000000; VARIABLE NUM2 :INTEGER RANGE 0 TO 1000000; BEGIN IF CLK'EVENT AND CLK = '1' THEN IF BUTTON1_1 = '1' THEN NUM := NUM + 1; ELSE NUM := 0; END IF; IF BUTTON1_1 = '0' THEN NUM2 := NUM2 + 1; ELSE NUM2 := 0; END IF; IF NUM > 50000 THEN KOUT1_1 <= '1'; ELSIF NUM2 > 50000 THEN KOUT1_1 <= '0'; END IF; END IF; END PROCESS;
PROCESS(BUTTON1_2,CLK) --BUTTON1_2 XIAO DOU VARIABLE NUM :INTEGER RANGE 0 TO 1000000;
- 10 -
VARIABLE NUM2 :INTEGER RANGE 0 TO 1000000; BEGIN IF CLK'EVENT AND CLK = '1' THEN IF BUTTON1_2 = '1' THEN NUM := NUM + 1; ELSE NUM := 0; END IF; IF BUTTON1_2 = '0' THEN NUM2 := NUM2 + 1; ELSE NUM2 := 0; END IF; IF NUM > 50000 THEN KOUT1_2 <= '1'; ELSIF NUM2 > 50000 THEN KOUT1_2 <= '0'; END IF; END IF; END PROCESS;
PROCESS(BUTTON1_3,CLK) VARIABLE NUM :INTEGER RANGE 0 TO 100; VARIABLE NUM2 :INTEGER RANGE 0 TO 100; BEGIN IF CLK'EVENT AND CLK = '1' THEN IF BUTTON1_3 = '1' THEN NUM := NUM + 1; ELSE NUM := 0; END IF; IF BUTTON1_3 = '0' THEN NUM2 := NUM2 + 1; ELSE NUM2 := 0; END IF; IF NUM > 50 THEN KOUT1_3 <= '1'; ELSIF NUM2 > 50 THEN KOUT1_3 <= '0'; END IF; END IF; END PROCESS;
- 11 ---BUTTON1_3 XIAO DOU
PROCESS(BUTTON2_1,CLK) --BUTTON2_1 XIAO DOU VARIABLE NUM :INTEGER RANGE 0 TO 10000000; VARIABLE NUM2 :INTEGER RANGE 0 TO 1000000; BEGIN IF CLK'EVENT AND CLK = '1' THEN IF BUTTON2_1 = '1' THEN NUM := NUM + 1; ELSE NUM := 0; END IF; IF BUTTON2_1 = '0' THEN NUM2 := NUM2 + 1; ELSE NUM2 := 0; END IF; IF NUM > 50000 THEN KOUT2_1 <= '1'; ELSIF NUM2 > 50000 THEN KOUT2_1 <= '0'; END IF; END IF; END PROCESS;
PROCESS(BUTTON2_2,CLK) VARIABLE NUM :INTEGER RANGE 100 TO 0; VARIABLE NUM2 :INTEGER RANGE 100 TO 0; BEGIN IF CLK'EVENT AND CLK = '1' THEN IF BUTTON2_2 = '1' THEN NUM := NUM + 1; ELSE NUM := 0; END IF; IF BUTTON2_1 = '0' THEN NUM2 := NUM2 + 1; ELSE NUM2 := 0; END IF; IF NUM > 50 THEN KOUT2_2 <= '1'; ELSIF NUM2 > 50 THEN KOUT2_2 <= '0';
- 12 ---BUTTON2_2 XIAO DOU
END IF; END IF; END PROCESS;
PROCESS(BUTTON2_3,CLK) --BUTTON2_3 XIAO DOU VARIABLE NUM :INTEGER RANGE 100 TO 0; VARIABLE NUM2 :INTEGER RANGE 100 TO 0; BEGIN IF CLK'EVENT AND CLK = '1' THEN IF BUTTON2_3 = '1' THEN NUM := NUM + 1; ELSE NUM := 0; END IF; IF BUTTON2_3 = '0' THEN NUM2 := NUM2 + 1; ELSE NUM2 := 0; END IF; IF NUM > 50 THEN KOUT2_3 <= '1'; ELSIF NUM2 > 50 THEN KOUT2_3 <= '0'; END IF; END IF; END PROCESS;
- 13 -
六、仿真结果及分析
1、引脚分配图
- 14 -
2、设计仿真图
3、硬件测试
经过仿真测试确认无误后,下载到试验台上进行硬件测试,分频模块由试验台自带的50MHZ的脉冲频率提供,经过分频都得到不同频率的信号脉冲输入到各个模块。使用4位数码管显示倒计时的分钟、秒钟值;2位数码管显示A方得分;2位数码管显示B方得分;使用LED灯作为上、下半场的标志;单次加分值包括1分、2分和3分。其中,开始时是用按键控制倒计时,然后使用拨码开关00、01、10三种情况下分别实现加分功能,经试验无误后,该设计成功运行。
4、仿真结果分析
用VHDL语言程序设计篮球比赛电子记分牌,从程序设计到波形仿真,根据时序仿真结果,各模块可以实现预期的功能,最后再到实验装置上进行硬件调试,并进行演示,实现其各种功能,设计成功。
- 15 -
七、设计总结与心得
通过这次课程设计,让我更加深刻了解课本知识,和以往对知识的疏忽得以补充,在设计过程中遇到一些模糊的公式和专业用语,在使用手册时,有的数据很难查出,但是这些问题经过这次设计,都一一得以解决,我相信这本书中还有很多我为搞清楚的问题,但是这次的课程设计给我相当的基础知识,为我以后工作打下了严实的基础。
在为期一周的EDA课程设计,在第4天成功的设计出了我的课题:篮球比赛电子记分牌设计。在这次的设计过程中,我首先参照的是网上的设计思路,其次我采用层次化结构化设计,将此项设计任务分成若干模块,规定每一模块的功能和各模块之间的接口,然后再将各模块联合起来调试,加深了我们对层次化设计的概念的认识。最后跟同学之间互相讨论最后加以完善自己的设计,最后成功的设计出来。心得体会
通过这次课程设计,让我更加深刻了解课本知识,和以往对知识的疏忽得以补充,在设计过程中遇到一些模糊的公式和专业用语,比如说经济刮板运输机及皮带运输的选择,在选择选择刮板皮带运输选型时,在使用手册时,有的数据很难查出,但是这些问题经过这次设计,都一一得以解决,我相信这本书中还有很多我为搞清楚的问题,但是这次的课程设计给我相当的基础知识,为我以后工作打下了严实的基础。
虽然这次课程是那么短暂的2周时间,我感觉到这些天我的所学胜过我这一学期所学,这次任务原则上是设计,其实就是一次大的作业,是让我对课本知识的巩固和对基本公式的熟悉和应用,计算力学和运动学及预选电动机过程中的那些繁琐的数据,使我做事的耐心和仔细程度得以提高。课程设计是培训学生运用本专业所学的理论知识和专业知识来分析解决实际问题的重要教学环节,是对三年所学知识的复习和巩固。同样,也促使了同学们的相互探讨,相互学习。因此,我们必须认真、谨慎、踏实、一步一步的完成设计。如果时间可以重来,我可能会认真的去学习和研究,也可能会自己独立的完成一个项目,我相信无论是谁看到自己做出的成果时心里一定会很兴奋。此次设计让我明白了一个很深刻的道理:团队精神固然很重要,担人往往还是要靠自己的努力,自己亲身去经历,这样自己的心里才会踏实,学到的东西才会更多。
课程设计是一个重要的教学环节,通过课程设计使我们了解到一些实际与理论之间的差异。通过课程设计不仅可以巩固专业知识,为以后的工作打下了坚实的基础,而其还可
- 16 -
以培养和熟练使用资料,运用工具书的能力,把我们所学的课本知识与实践结合起来,起到温故而知新的作用。
经过对设计要求的认真思考,再结合课本相关知识,经过几天的努力终于圆满的完成任务。设计过程中也遇到了不少的问题,尤其是开始阶段,面对这个相对复杂的篮球计时记分规则,不知道怎样分析,比如如何实现设计要求的功能,如何设计各个模块及其VHDL语言编写等等。经过查阅大量资料和反复讨论思考之后,终于了找到一个可行的方案。同时,学会了用QUARTUS II软件进行设计,并对VHDL语言有了更深入的了解。同时,身边的同学也给予了我们很多的帮助,尤其是我们的谢明华老师认真地指导我们解决课程设计中所遇到的问题,任劳任怨。老师和同学的帮助使这次课程计任务设顺利完成,在此深表谢意。
八、参考文献
[1].《 EDA技术实用教程》潘松,黄继业.. 北京:科学出版社,2006
[2].《 VHDL设计实例与仿真》姜雪松,吴钰淳,王鹰等.. 北京:机械工业出版社,2007 [3]. 《基于Quartus Ⅱ的FPGA/CPLD设计》李洪伟,袁斯华..北京:电子工业出版社,2006
- 17 -
因篇幅问题不能全部显示,请点此查看更多更全内容