1.1 产品现状与发展
作为每场篮球赛的必备品,比赛的记分器的质量显得尤为重要。目前使用的记分器大部分是基于单片机技术,以单片机为主要器件,其编码器与解码器的生成为软件方式。在实际应用中,由于程序不稳定,系统的可靠性能比较差。基于现场可编程逻辑门阵列FPGA器件的记分器,用FPGA器件构造系统,所有算法完全由硬件电路来实现,使得系统的工作可靠性大为提高。由于FPGA具有现场可编程功能,当设计需要更改时,只需更改FPGA中的控制和接口电路,利用EDA工具将更新后的设计下载到FPGA中即可,无需更改外部电路的设计,大大提高了设计的效率以及使用成本。
1.2 FPGA简介
FPGA设计流程包括系统设计和设计实现,系统方案完成之后即进入设计实现阶段的工作,他以系统方案为输入,进行RTL级描述、功能仿真(RTL级仿真)、逻辑综合、布线前门级仿真、适配(布局布线)、时序仿真(布线后门级仿真)、时序分析、器件编程、系统验证一系列流程的处理才能完成FPGA芯片的设计,其设计流程。需要说明的是,如果仿真验证不对或者某一步有错,就要返回修改。有必要检查和修改的地方有RTL级描述、系统方案、约束和测试激励等。一般情况下,对RTL级的描述即原理图或者HDL设计代码的修改最多也最有效。修改后要重新走一遍流程。有时要反复修改,经过多次这样的修改才能完成最后的设计。
FPGA的设计流程和相关概念说明如下:
库:指FPGA器件厂家提供的工艺库和EDA工具提供的标准通用库(如IEEE库等)。工艺库中有各种宏功能模块和基本功能单元,含有他们的行为级模型、门级模型、布线模型等信息。
需要说明的是,系统行为仿真和RTL级功能仿真有时要用到某种功能模块,例如RAM模型。对于RAM模型的控制信号,不同的厂家其规定不一定相同,如写使能信号,有的厂家规定高电平有效,有的厂家规定低电平有效。其实,在厂家提供的工艺库中, RAM模型有行为级模型、门级模型、版图级模型等。而行为级模型只是规定其功能,无延时信息,跟工艺无关,但门级模型和版图级模型跟工艺密切相关。解决的方法是系统行为仿真时可以使用高级语言自己建立一个模型或者调用厂家库中提供的行为级模型,功能仿真时调用行为级模型,时序仿真时调用门级模型。
测试激励:指测试文件,他调用FPGA设计的顶层模块,同时产生顶层模块需要的输入信号,称之为激励信号,使用行为描述即可,不要求可综合。仿真时他作为最顶层的文件,从而可以观察FPGA的输出是否正确。所有的仿真都可使用同一个测试激励。
约束:指对逻辑综合和布局布线时的约束。包括器件型号、速度、面积、功耗、引脚分配、时钟网络资源的分配、模块在器件中的定位等约束。一部分在软件中设置,一部分以约束文件的形式存在。
1.3 自上而下(TOP DOWN)的设计方法
1
自上而下的设计方法是现代电子系统的新型设计策略,它从设计的总体要求出发,自上而下地逐步从系统数学模型的设计与仿真,到数据流级的设计与仿真,选择系统设计方案,最后完成系统硬件的整体设计。VHDL的自上而下的设计方法不仅体现在它的基本结构由描述外视特性的实体与描述内视行为和结构的结构体构成,同一实体可以有一个以上的结构体,以便设计方案的选择,还体现在系统硬件设计过程的三个层次:行为级描述与仿真、RTL级描述与仿真、逻辑综合与门级仿真。逻辑综合与所使用的逻辑综合工具有关,由逻辑综合优化工具生成具体的门级逻辑电路的EDIF(Electronic Design Interchange Format)网表。EDIF网表是一种标准接口,它是一个以ASCII字符为基础的中间互换格式,被大多数供应商提供的CAE/CAD系统所支持。半导体制造厂基于这种网表生成ASIC芯片的制造工艺,FPGA则基于这种网表生成用以配置FPGA芯片的位流文件。这三种仿真贯穿系统硬件设计的全过程,从而可以在系统设计早期发现设计中存在的问题,与传统的自下而上的后期仿真相比大大缩短系统的设计周期,并且利于方案的综合评价与选取。这是用VHDL语言设计系统硬件的最突出的优点。
1.4 设计语言、仿真平台与开发系统
(1)硬件描述语言
篮球记分器的设计采用了功能强大的通用硬件描述语言VHDL,它具有很强的行为描述能力,设计方法灵活,可以支持自顶向下(Top Down)和基于库(Library-Based)的设计方法,硬件描述与具体的工艺技术和硬件结构无关,能轻易地改变设计的规模和结构,标准、规范易于共享与复用,易于向ASIC移植。
(2)MAX+plusII软件开发工具
本设计采用的软件开发工具是美国Altera公司的MAX+plusII,它支持多种设计输入方法,包括原理图输入、文本输入(如AHDL,VHDL,Verilog HDL文本文件)和第三方EDA工具输入文件(如EDIF,HDL,VQM文件),利用该工具所配备的编辑、编译、仿真综合、芯片编程等功能,可将设计电路图或电路描述程序变成基本的逻辑单元写入到可编程的芯片中(如FPGA芯片),做成ASIC芯片。
(3)EDA实验开发系统
设计中采用的EDA实验开发系统,主要用于提供可编程逻辑器件的下载电路及EDA实验开发的外围资源,供硬件验证用。一般包括:①实验或开发所需的各类基本信号发生模块;②FPGA/CPLD输出信息显示模块;③监控程序模块;④目标芯片适配座以及上面的FPGA/CPLD目标芯片和下载电路。[2]
1.5 用MAX+plusII进行系统开发的设计流程
(1)编写VHDL程序(使用VHDL File); (2)编译VHDL程序(使用Compiler);
(3)仿真验证VHDL程序(使用Waveform Editor, Simulator); (4)进行芯片的时序分析(使用Timing Analyzer); (5)安排芯片管脚位置(使用Floorplan Editor); (6)下载程序至芯片(使用Programmer)。
2
第2章 系统总体设计
2.1 系统设计要求
(1)通过开关按钮,实现每次按键可以加1分、2分、3分以及减1分、2分、3分得功能;
(2)通过六位BCD-7数码管分别显示两队每场比赛总得分记录显示功能; (3)由六位BCD-7数码管在切换计时方式的情况下,实现每节12分钟倒计时的功能;
(4)通过蜂鸣器用以实现每节结束后的鸣笛声,以示本节比赛结束; (5)实现每次进攻的24秒的倒计时功能;
(6)实现每次进球后24秒立刻重新倒计时的功能;
(7)鉴于数码管数量有限,将通过显示切换选择电路,实现不同电路的显示功能。
2.2 系统设计方案的提出
方案一:采用数字电路控制。虽然采用数字篮球记分器电路的好处是设计简单,但是由于其是纯电路实际,在系统运行时,延时会比较严重。
方案二:通过单片机实现,可以采用80C51单片机来实现比赛记分。虽然有灵活的设计和丰富的IO端口,但是单片机设计的缺点是程序运行时容易出现跑飞现象。
通过以上比较显然单片机方案有较大的活动空间,不但能实现所要求的功能而且能在很大的程度上扩展功能,而且还可以方便的对系统进行升级,但是由于所学知识不能将其有效的应用,现有环境不能满足,而且单片机的记分器有一定的不足之处,在运行时程序有时会产生PC指针错误,还有基于现在所学知识的应用,所以基于以上比较提出了第三种方案。
方案三:利用FPGA设计篮球记分器,其成本低,设计方便(有相应的开发板),现有资源充足,实现比较容易,更利于系统的维护改进和升级,可靠性更高,更安全。
通过以上比较描述,本设计采用基于FPGA的篮球记分器设计方案。
3
第3章 系统详细设计
3.1 分频器电路的设计[1]
分频器作为电路时间的正常显示驱动部分。分频器在本电路中起到为12分钟倒计时(60秒倒计时)、24秒倒计时等电路提供脉冲信号,更为重要的是1KHZ为数码管的动态显示提供合适的频率。本设计采用的分频比为1:1000。引脚功能图如图3.1所示:
图3.1 分频器的引脚功能图
引脚功能:CLK3为脉冲输入端,输入1000HZ脉冲。Q为输出端,输出为1HZ。
VHDL程序如下: LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY FEN1000 IS
PORT(CLK3:IN STD_LOGIC; Q:OUT STD_LOGIC); END FEN1000;
ARCHITECTURE ONE OF FEN1000 IS SIGNAL A:STD_LOGIC; BEGIN
PROCESS(CLK3)
VARIABLE CNT:INTEGER RANGE 0 TO 499; BEGIN
IF CLK3'EVENT AND CLK3='1' THEN IF CNT=499 THEN CNT:=0; A<=NOT A; ELSE
CNT:=CNT+1; END IF; END IF; Q<=A; END PROCESS; END ONE;
3.2 计数译码显示电路的设计[1]
一般情况计数器是由计数脉冲信号(CLK)和控制信号作为输入信号,计数值和进位信号作为输出信号。控制信号除了复位信号(RES)之外,还有使能信
4
号,一般控制器的信号还有一个或者几个,他们是随着优先级进行控制,由高到低进行循环控制。
本电路采用六位二进制加法计数器,为数码管的显示提供动态扫描电路,并为选择计数提供共同的可能。引脚功能图如图3.2所示:
图3.2 计数器的引脚功能图
引脚功能:CLK1是脉冲输入端,为电路提供脉冲信号。Q是输出端,为后面的数码管显示提供一个动态扫描。
VHDL程序如下: LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CNT6 IS;
PORT( CLK1:IN STD_LOGIC;
Q:OUT STD_LOFIC_VECTOR(2 DOWNTO 0)); END CNT6;
ARCHITECTURE ABB OF CNT6 IS
SIGNAL Q_TEMP:STD_LOGIC_VECTOR(2 DOWNTO 0)); BEGIN
PROCESS(CLK1) BEGIN
IF(CLK1’EVENT AND CLK1=’1’) THEN
IF Q_TEMP=”101” THEN Q_TEMP<=”000”; ELSE Q_TEMP<=Q_TEMP+1; END IF; ENF IF; Q<=Q_TEMP; END PROCESS; END ABB;
3.3 BCD-7段数码管显示译码电路的设计[1]
BCD-7段译码器的输入是4位BCD码,输出是数码管各段的驱动信号,也称4-7译码器。例如,当输入8421BCD码DCBA=0100时,就会显示4,同理,根据组成0-9这10个字形的要求可以列出8421BCD-7段译码器的显示。本电路驱动数码管显示比分和时间,更是动态扫描的组成部分。引脚功能图如图3.3所示:
5
图3.3 BCD-7段译码引脚功能图
该模块是数码管显示模块,Y是输入端,主要显示倒计时或者比分。LED是输出端,实现数码管显示功能。
VHDL程序如下: LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY BCD7 IS
PORT (Y:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
LED:OUT STD_LOGIC_VECTOR(0 DOWNTO 6)); END BCD7;
ARCHITECTURE ONE OF BCD7 IS BEGIN
PROCESS(Y) BEGIN IF
Y=\"0000\" THEN LED<=\"1111110\"; ELSIF Y=\"0001\" THEN LED<=\"0110000\"; ELSIF Y=\"0010\" THEN LED<=\"1101101\"; ELSIF Y=\"0011\" THEN LED<=\"1111001\"; ELSIF Y=\"0100\" THEN LED<=\"0110011\"; ELSIF Y=\"0101\" THEN LED<=\"1011011\"; ELSIF Y=\"0110\" THEN LED<=\"1011111\"; ELSIF Y=\"0111\" THEN LED<=\"1110000\"; ELSIF Y=\"1000\" THEN LED<=\"1111111\"; ELSIF Y=\"1001\" THEN LED<=\"1111011\"; ELSE LED<=\"0000000\"; END IF;
END PROCESS; END ONE ;
3.4 数据计分显示电路的设计
数据计分显示电路是本电路的关键部分,计分电路是篮球计分器的核心部分,只有真正记录两队的得分,才能真正达到计分显示的功能。根据现实的情况考虑,篮球最多可以得分达到三位数,因此要考虑十分位、百分位的加减进位,并且每个球队的计分显示要实现按不同的按钮实现加、减一分、加、减两分、加、减三分的功能。引脚功能图如图3.4所示:
图3.4 数据计分显示的引脚功能图
6
引脚功能:EN是使能输入端;CLK是脉冲输入端,提供脉冲信号;K1、K2、K3是输入端,分别是加1,2,3分。BA1、SA1、GA1是输出端,其中BA1为百位,SA1为十位,GA1为个位。该模块的功能主要用于显示两队的记分。 VHDL程序如下: LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY DISPLAY1 IS
PORT(EN,CLK,K1,K2,K3:IN STD_LOGIC;
BA1,SA1,GA1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END DISPLAY1;
ARCHITECTURE ONE OF DISPLAY1 IS BEGIN
PROCESS(CLK)
VARIABLE BA: STD_LOGIC_VECTOR(3 DOWNTO 0); VARIABLE SA: STD_LOGIC_VECTOR(3 DOWNTO 0); VARIABLE GA: STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN
IF(CLK'EVENT AND CLK='1') THEN IF EN='1' THEN
IF (K1='1' AND K2='0' AND K3='0')THEN IF(BA=9 AND SA=9 AND GA=9) THEN BA:=\"0000\";SA:=\"0000\";GA:=\"0000\"; ELSIF(SA=9 AND GA=9) THEN
SA:=\"0000\";GA:=\"0000\";BA:=BA+1; ELSIF (GA=9) THEN
GA:=\"0000\";SA:=SA+1;BA:=BA; ELSE BA:=BA;SA:=SA;GA:=GA+1; END IF;
ELSIF(K1='0' AND K2='1'AND K3='0') THEN
IF(BA=9 AND SA=9 AND GA=9) THEN BA:=\"0000\";SA:=\"0000\";GA:=\"0000\"; ELSIF(SA=9 AND GA=9) THEN
SA:=\"0000\";GA:=\"0001\";BA:=BA+1; ELSIF(SA=9 AND GA=8) THEN
SA:=\"0000\";GA:=\"0000\";BA:=BA+1; ELSIF (GA=9) THEN
GA:=\"0001\";SA:=SA+1;BA:=BA; ELSIF (GA=8) THEN
GA:=\"0000\";SA:=SA+1;BA:=BA; ELSE BA:=BA;SA:=SA;GA:=GA+2; END IF;
ELSIF(K1='0' AND K2='0' AND K3='1') THEN IF(BA=9 AND SA=9 AND GA=9) THEN BA:=\"0000\";SA:=\"0000\";GA:=\"0000\"; ELSIF(SA=9 AND GA=9) THEN
SA:=\"0000\";GA:=\"0010\";BA:=BA+1; ELSIF(SA=9 AND GA=8) THEN
7
SA:=\"0000\";GA:=\"0001\";BA:=BA+1; ELSIF(SA=9 AND GA=7) THEN
SA:=\"0000\";GA:=\"0000\";BA:=BA+1; ELSIF (GA=9) THEN
GA:=\"0010\";SA:=SA+1;BA:=BA; ELSIF (GA=8) THEN
GA:=\"0001\";SA:=SA+1;BA:=BA; ELSIF (GA=7) THEN
GA:=\"0000\";SA:=SA+1;BA:=BA; ELSE BA:=BA;SA:=SA;GA:=GA+3; END IF;
ELSIF(K1='0' AND K2='1' AND K3='1')THEN IF(SA=0 AND GA=0)THEN
BA:=BA-1;SA:=\"1001\";GA:=\"1001\"; ELSIF(GA=0)THEN
BA:=BA;SA:=SA-1;GA:=\"1001\";
ELSE BA:=BA;SA:=SA;GA:=GA-1; END IF;
ELSIF(K1='1' AND K2='0' AND K3='1')THEN IF(GA=0 AND SA=0)THEN
BA:=BA-1;SA:=\"1001\";GA:=\"1000\"; ELSIF(SA=0 AND GA=1)THEN BA:=BA-1;SA:=\"1001\";GA:=\"1001\"; ELSIF(GA=0)THEN
BA:=BA;SA:=SA-1;GA:=\"1000\"; ELSIF(GA=1)THEN
BA:=BA;SA:=SA-1;GA:=\"1001\";
ELSE BA:=BA;SA:=SA;GA:=GA-2;
END IF;
ELSIF(K1='1' AND K2='1' AND K3='0')THEN IF(GA=0 AND SA=0)THEN
BA:=BA-1;SA:=\"1001\";GA:=\"0111\"; ELSIF(SA=0 AND GA=1)THEN
BA:=BA-1;SA:=\"1001\";GA:=\"1000\"; ELSIF(SA=0 AND GA=2)THEN
BA:=BA-1;SA:=\"1001\";GA:=\"1001\"; ELSIF(GA=0)THEN
BA:=BA;SA:=SA-1;GA:=\"0111\"; ELSIF(GA=1)THEN
BA:=BA;SA:=SA-1;GA:=\"1000\"; ELSIF(GA=2)THEN
BA:=BA;SA:=SA-1;GA:=\"1001\";
ELSE BA:=BA;SA:=SA;GA:=GA-3; END IF; END IF; END IF; END IF;
BA1<=BA;SA1<=SA;GA1<=GA;
8
END PROCESS; END ONE;
3.5 倒计时电路的设计
计时电路是篮球计分器的另外一个核心技术,每个比赛都有自己独特的规则,
每节12分钟的比赛时间(60秒倒计时)和24秒进攻违例时间。倒计时电路采用IF-ELSIF-IF语句。在设计12分钟倒计时的时候需要单独实现12分钟和60秒的倒计时,在每个60秒的倒计时完成后,形成一个脉冲,用来驱动12分钟的倒计时的完成,经过循环往复,实现倒计时。引脚功能图如图3.5,3.6,3.7,所示:
图3.5 60秒倒计时的引脚功能图
引脚功能:CLK是脉冲输入端,提供脉冲信号;RST是复位端,用于置0;QD1,QC1为输出端,QD1是十位,QC1是个位;CO是实现进位功能。 VHDL程序如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY MIAO IS
PORT(RST,CLK:IN STD_LOGIC;
QD1,QC1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); CO:OUT STD_LOGIC); END MIAO;
ARCHITECTURE ONE OF MIAO IS BEGIN
PROCESS(CLK)
VARIABLE QC:STD_LOGIC_VECTOR(3 DOWNTO 0):=\"0000\"; VARIABLE QD:STD_LOGIC_VECTOR(3 DOWNTO 0):=\"0110\"; BEGIN
IF RST='1'THEN QC:=\"1001\";QD:=\"0101\";
ELSIF CLK'EVENT AND CLK='1'THEN IF(QC=0 AND QD/=0)THEN QC:=\"1001\";QD:=QD-1; ELSIF QC>0 THEN QC:=QC-1; QD:=QD;
ELSIF(QD=0 AND QC=0) THEN QC:=\"1001\";QD:=\"0101\"; END IF; END IF;
9
--END IF;
IF(QC=0 AND QD=0)THEN --QC:=\"1001\";QD:=\"0101\"; CO<='1'; ELSE CO<='0'; END IF;
QD1<=QD;QC1<=QC; END PROCESS; END ONE;
图3.6 12分钟倒计时的引脚功能图
引脚功能:CLK是脉冲输入端,提供脉冲信号;EN为使能端;RST是复位端,用于置0;QF1,QE1为输出端,其中QF1是十位,QE1是个位;XL是实现进位功能
VHDL程序如下: LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY F12 IS
PORT(RST,EN,CLK:IN STD_LOGIC;
QF1,QE1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); XL:OUT STD_LOGIC); END F12;
ARCHITECTURE ONE OF F12 IS BEGIN
PROCESS(CLK)
VARIABLE QE:STD_LOGIC_VECTOR(3 DOWNTO 0):=\"0010\"; VARIABLE QF:STD_LOGIC_VECTOR(3 DOWNTO 0):=\"0001\"; BEGIN
IF RST='1'THEN QE:=\"0001\";QF:=\"0001\"; ELSIF CLK'EVENT AND CLK='1'THEN IF EN='1'THEN
IF(QE=0 AND QF/=0)THEN QE:=\"1001\";QF:=QF-1; ELSIF QE>0 THEN QE:=QE-1; QF:=QF;
ELSIF(QF=0 AND QE=0) THEN QE:=\"0010\";QF:=\"0001\"; END IF;
ELSE QE:=QE;QF:=QF; END IF;
10
END IF;
IF(QE=0 AND QF=0)THEN XL<='1'; ELSE
XL<='0'; END IF;
QF1<=QF;QE1<=QE; END PROCESS; END ONE;
图3.7 24秒倒计时的引脚功能图
引脚功能:CLK是脉冲输入端,提供脉冲信号;EN1为使能端,RST是复位端,用于置0;QA1,QB1为输出端,其中QB1是十位,QA1是个位;该模块主要实现24秒倒计时功能。
VHDL程序如下: LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CNT24 IS
PORT(RST,EN1,CLK:IN STD_LOGIC;
QA1,QB1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END cnt24;
ARCHITECTURE BEHAV OF CNT24 IS BEGIN
PROCESS(CLK)
VARIABLE QA:STD_LOGIC_VECTOR(3 DOWNTO 0):=\"0100\"; VARIABLE QB:STD_LOGIC_VECTOR(3 DOWNTO 0):=\"0010\"; BEGIN
IF RST='1'THEN
QA:=\"0000\";QB:=\"0000\";
ELSIF CLK'EVENT AND CLK='1' THEN IF EN1='1'THEN
IF (QA=0 AND QB/=0) THEN QA:=\"1001\";QB:=QB-1; ELSIF QA>0 THEN
QA:=QA-1; QB:=QB; ELSIF(QB=0 AND QA=0)THEN QA:=\"0100\";QB:=\"0010\"; END IF;
11
END IF; END IF; QB1<=QB; QA1<=QA; END PROCESS; END;
3.6 12选6的数据选择器电路的设计
切换电路的设计应用了数据选择器MUX126,即12选6的数据选择器,根据你需要的显示,通过按键可以选择不同的显示方式,比如:SEL=“0”时,选择计分显示,当你按下SEL键时,SEL=“1”时,即可以显示计时的功能,然后再通过动态扫描的过程由数码管显示出来。
12选6的数据选择器由十二个信号输入端口和一个脉冲输入端口,由SEL端口调制输出接口的选择,选择不同的接口,将显示不同的数据,在比赛时间,一般会显示时间走时,在一队进攻得手后,由SEL端口来调节计分显示,经过计分电路的按钮来达到加分的功能,当选择加分显示时,计时电路不受其影响,会继续走时。计分完成后再经SEL端调到显示时间接口,通过一系列的循环而完成整个篮球计分器的功能。引脚功能图如图3.8所示:
图3.8 切换电路的引脚功能图
该模块是十二选六数据选择器,BA、SA、GA、BB、SB、GB、QA、QB、QC、QD、QE、QF均是输入端,其中BA、BB为百位,SA、SB为十位,GA、GB为个位。QA、QB为24S倒计时显示QC、QD为60秒倒计时显示QE、QF为12分钟倒计时显示。SEL为动态扫描,Y1、Y2、Y3、Y4、Y5、Y6为输出端,SEl为1时显示比分,Y3、Y6为百位,Y2、Y5为十位,Y1、Y4为个位。SEl为0时显示时间,Y1、Y2为24S倒计时显示,Y3、Y4为秒倒计时显示Y5、Y6为12分钟倒计时显示。
VHDL程序如下: LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY SEL1 IS
PORT(BA,SA,GA,BB,SB,GB,QA,QB,QC,QD,QE,QF:IN STD_LOGIC_VECTOR(3 DOWNTO 0) ;
SEL:IN STD_LOGIC;
12
Y1,Y2,Y3,Y4,Y5,Y6:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END SEL1;
ARCHITECTURE ONE OF SEL1 IS BEGIN
PROCESS(sel,BA,SA,GA,BB,GB,SB,QA,QB,QC,QD,QE,QF) BEGIN
IF SEL=‘1’ THEN Y1<=GA;Y2<=SA;Y3<=BA;Y4<=GB;Y5<=SB;Y6<=BB;
ELSE Y1<=QA;Y2<=QB;Y3<=QC;Y4<=QD;Y5<=QE;Y6<=QF; END IF; END PROCESS; END ONE;
3.7 数据选择器电路的设计
数据选择器是从多路输入数据中选择一路,送到数据总线上的电路,它的作用类似于一个单刀多掷开关。
本电路采用六选一数据选择电路,实现了对时间和计分的选择以及实现动态扫描对数码管的选择。引脚功能图如图3.9所示:
图3.9 数据选择器的引脚功能图
该模块是六选一数据选择器,BA、SA、GA、BB、SB、GB均是输入端,主要是60秒,12分钟,24秒的倒计时或者两队的比分。Y为输出端,连接到数码管上,显示前面选择的内容。
VHDL程序如下: LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY MUX61 IS
PORT(BA,SA,GA,BB,SB,GB:IN STD_LOGIC_VECTOR(3 DOWNTO 0); SEL:IN STD_LOGIC_VECTOR(2 DOWNTO 0); Y:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END MUX61;
ARCHITECTURE RTL OF MUX61 IS BEGIN
PROCESS(BA,SA,GA,BB,SB,GB) BEGIN
IF (SEL=\"000\")THEN Y<=BA; ELSIF(SEL=\"001\")THEN Y<=SA; ELSIF(SEL=\"010\")THEN Y<=GA; ELSIF(SEL=\"011\")THEN Y<=BB; ELSIF(SEL=\"100\")THEN Y<=SB; ELSIF(SEL=\"101\")THEN Y<=GB; END IF;
END PROCESS;END RTL;
13
3.8 篮球计分器的原理图(如图3.10)
图3.10 篮球计分器的原理图
14
第4章 模块的仿真测试
4.1 分频器电路的仿真
该模块的功能较简单,用于简单的分频,如图4.1所示分频器把1KHZ的频率降为1HZ。
图4.1 分频器仿真图
4.2 计数译码电路的仿真
该模块为计数显示,采用的是6进制,如图4.2所示当CLK为上升沿时Q实现由0-5循环计数,基本实现了该模块的功能。
图4.2 计数译码电路仿真图
4.3 BCD-7段数码管显示译码电路的仿真
该模块为数码管显示,如图4.3所示当Y的值与LED的显示值相对应 ,符合数码管的显示规律,基本实现了该模块的功能。
15
图4.3 BCD-7段数码管显示译码电路仿真图
4.4 数据计分显示电路的仿真
该模块为数据计分,如图4.4所示,在0-50ms之间K3=1,K2K1为0时GA1递增3分,在50-120ms之间,K2=1,K1K3为0时,GA1递增2分,在120-190ms之间,K1=1,K2K3为0时,GA1递增1分,符合程序中的设计,基本实现了模块的功能。
图4.4 数据计分显示电路仿真图
4.5 60秒倒计时电路的仿真
该模块为60秒倒计时,如图4.5所示,在60ms到120ms之间QD1在5到0之间递减,QC在9到0递减,实现了60秒倒计时的功能,基本实现该模块的功能。
图4.5 60秒倒计时电路仿真图
16
4.6 12分钟倒计时电路的仿真
该模块为12分钟倒计时,如图4.6所示在80ms到280ms之间QF1在1到0之间递减,QA在9到0递减,实现了12分钟倒计时的功能,基本实现该模块的功能。
图4.6 12分钟倒计时电路仿真图
4.7 24秒倒计时电路的仿真
该模块为24秒倒计时,如图4.7所示,在150ms到600ms之间QB1在2到0之间递减,QA在9到0递减,实现了24秒倒计时的功能,基本实现该模块的功能。
图4.7 24秒倒计时电路仿真图
4.8 12选6的数据选择器电路的仿真
该模块为12选6的数据选择器,如图4.8所示,在0到160ms之间,当SEL=1时Y1=GA,Y2=SA,Y3=BA, Y4=GB,Y5=SB,Y6=BB。当SEL=0,Y1=QA,Y2=
17
QB,Y3=QC,Y4=QD,Y5=QE,Y6=QF时符合选择器的程序,基本实现该模块的功能。
图4.8 12选6数据选择器电路仿真图
4.9 数据选择电路的仿真
该模块为6选1数据选择器,如图4.9所示,在0到300ms之间当SEl为000时Y=BA,SEL为001时Y=SA,SEl为010时Y=GA,SEl为011时Y=BB,SEl为011时Y=BB,SEl为100时Y=SB,SEl为101时Y=GB基本符合该模块的功能。
图4.9 数据选择器仿真图
18
第5章 结束语
经过将近两个多月的努力,毕业设计终于做好了。本设计利用数字EDA技术实现的,是在FPGA的基础上,利用VHDL语句进行篮球记分器的设计,并用MAX+plusⅡ软件进行编译、仿真,检查程序是否正确以及能否实现该模块的功能,以便及时修改。设计时遇到问题比较多,通过网上搜索以及相关文献的查阅,逐步解决各个问题。在仿真分析时,由于对仿真的不熟悉,不能得出非常准确的仿真图,后请教老师以及同学们,才得以解决。
本设计主要包括分频器,6选1数据选择器,12选6数据选择器,计数译码器,数据计分显示电路,BCD-7段数码管及倒计时电路等几大模块来实现。分频器是将1000Hz的脉冲分频为1Hz,为电路提供脉冲信号。计数译码器主要是用来为数码管提供动态扫描电路。倒计时电路分为60秒倒计时,12分钟倒计时和24秒倒计时,其中60秒倒计时,12分钟倒计时为一节比赛时间,24秒倒计时为一次的进攻时间。数据计分显示电路主要是记录两队的比分,是本设计中一个核心的部分。BCD-7段数码管主要是显示两队的比分以及12分钟、60秒和24秒的倒计时。12选6数据选择器主要是考虑到实验箱上只有6个数码管的情况,可以在倒计时与比分之间切换显示。最后通过各模块的连接形成原理图,来实现篮球记分器的计时计分功能。
19
参考文献
[1]唐龙.陈必群. EDA技术与项目训练,常州: 常州信息职业技术学院印制, 2010年.130-137, 142-157, 161-175.
[2]www.doc88.com/p-29235767151.html.
20
答谢辞
本论文是在指导老师xx悉心指导下完成的。一个多月以来,无论是论文选题、方案论证还是论文修正等各个环节,各个步骤无不凝聚着xx老师的智慧和心血。xx老师的这种严谨的治学态度,一丝不苟的敬业精神和严格的学业要求深刻的影响了我,使我在以后的学习工作中严格要求自己。通过本次毕业设计使我对课本知识有了系统的了解,并且学会了如何将课本知识应用于实践,扩大了我的知识面,本次设计还培养了我善于钻研的良好的学习态度,提高了我面对困难、面对复杂局面的自信心,这将使我受益终身。值此论文完成之际,谨向敬爱的唐龙老师致以衷心地感谢和崇高地敬意。
在课题研究和论文撰写的过程中,得到了全班各位同学的大力协助,他们的帮助对于课题的顺利进行起了重要的作用。在此谨向他们表示衷心地感谢!还有其它给予我无私帮助的同学,在此一并致谢!
感谢三年以来电气与电子工程学院的各位领导和老师的关心和支持!
21
因篇幅问题不能全部显示,请点此查看更多更全内容