CPLD课程设计.docx
《CPLD课程设计.docx》由会员分享,可在线阅读,更多相关《CPLD课程设计.docx(19页珍藏版)》请在冰豆网上搜索。
![CPLD课程设计.docx](https://file1.bdocx.com/fileroot1/2022-11/29/cb84bd16-4626-48e5-ae23-59e06f7fe898/cb84bd16-4626-48e5-ae23-59e06f7fe8981.gif)
CPLD课程设计
太原理工大学
CPLD/FPGA应用设计课程设计
设计名称八路抢答器
专业班级电子信息工程
学号
姓名
指导教师张博
……………………………………装………………………………………订…………………………………………线………………………………………
专业班级电子信息工程0903学号3姓名成绩
专业班级
信息09-3
学生姓名
课程名称
CPLD/FPGA应用设计
设计名称
八路抢答器
设计周数
1.5周
指导教师
张博
设计
任务
主要
设计
参数
1、设计具有一个可容纳8组参赛者的数字智力抢答器,每组设置一个抢答按钮供抢答者使用。
2、电路具有第一信号的鉴别和锁存功能。
3、设置记分电路。
4、设置犯规电路。
设计内容
设计要求
1、系统的输入信号有:
A,B,C,D,E,F,G,H,系统清零信号CLR,系统时钟信号CLK,复位信号RST,加分按钮信号ADD,计时预置控制信号LDN,计时使能信号EN,计时预置数据调整按钮TA,TB;
2、系统的输出信号有:
指示灯控制信号出口LEDA、LEDB、LEDC、LEDD、LEDE、LEDF、LEDG、LEDH。
主要参考
资料
[1]《电子技术课程设计指导》彭介华高等教育出版社.2000年出版
[2]EDA技术及应用教程梁勇、李会萍等机械工业出版社
[3]《CPLD数字电路设MAX+plusⅡ》廖裕评等清华大学出版社,2001
学生提交
归档文件
课程设计说明书1份
指导教师签名:
日期:
…………………………………装……………………………………订………………………………………线……………………………………………
一、设计目的
1、加深对VHDL语言设计的理解;
2、通过对抢答器的设计加深对CPLD/FPGA课程的理解;
3、通过对抢答器的设计了解简易集成电路的设计思路;
二、设计要求
1、设计具有一个可容纳8组参赛者的数字智力抢答器,每组设置一个抢答按钮供抢答者使用。
2、电路具有第一信号的鉴别和锁存功能。
3、设置记分电路。
4、设置犯规电路。
三、设计方案
根据系统设计要求可知,系统的输入信号有:
各组的抢答按钮A、B、C、D、E、F、G、H,系统清零信号CLR,系统时钟信号CLK,计分复位信号RET,加分按钮信号ADD,计时预置控制信号LDN,计时使能信号EN,计时预置调整信号按钮AN、BN,系统的输出信号有:
4个组抢答成功与否的指示灯控制信号输出口LEDA、LEDB、LEDC、LEDD、LEDE、LEDF、LEDG、LEDH,4个组抢答时的计时数码管显示控制信号若干,抢答成功组别显示的控制信号若干,各组计分动态显示的控制信号若干。
本次课程设计的主要目的旨在通过独立完成一个“抢答器”的设计,达到对EDA技术的熟练掌握,提升对《CPLD/FPGA技术及应用》课程所学内容的掌握和应用。
以计算机为工具,设计者在EDA软件平台上,用硬件描述语言VHDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。
基于VHDL程序设计中拥有输入设计流程,其包括设计输入,综合,适配,仿真测试和编程下载等方法。
与其他应用软件相比,他提供了更强大、更直观便捷和操作灵活的原理图输入设计功能,同时还配备了更丰富的适用于各种需要的元件库,其中包括基本的逻辑元件,宏功能元件,以及类似于IP核的参数可设置的宏功能块LPM库。
设计者不必具备许多诸如编程技术,硬件描述语言等知识就能迅速入门,完成较大规模的电路设计系统。
能进行任意层次的数字系统设计,传统的数字电路实验只能完成单一层次的设计。
能对系统中的任意层次,或任一元件的功能进行精确的时序仿真。
通过时序仿真能迅速定位电路系统中的错误所在,并及时纠正。
抢答器的组成框图
四、VHDL参考程序
(一)抢答鉴别模块
1.VHDL源程序
----------------------------------------------------------------------------------
--Company:
--Engineer:
--CreateDate:
16:
56:
0306/24/2012
--DesignName:
--ModuleName:
qdjb-Behavioral
--ProjectName:
--TargetDevices:
--Toolversions:
--Description:
--Dependencies:
--Revision:
--Revision0.01-FileCreated
--AdditionalComments:
----------------------------------------------------------------------------------
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
----Uncommentthefollowinglibrarydeclarationifinstantiating
----anyXilinxprimitivesinthiscode.
--libraryUNISIM;
--useUNISIM.VComponents.all;
entityqdjbis
port(clr,a,b,c,d,e,f,g,h:
instd_logic;
a1,b1,c1,d1,e1,f1,g1,h1:
outstd_logic;
states:
outstd_logic_vector(3downto0)
);
endqdjb;
architectureBehavioralofqdjbis
constantw1:
std_logic_vector(3downto0):
="0001";
constantw2:
std_logic_vector(3downto0):
="0010";
constantw3:
std_logic_vector(3downto0):
="0011";
constantw4:
std_logic_vector(3downto0):
="0100";
constantw5:
std_logic_vector(3downto0):
="0101";
constantw6:
std_logic_vector(3downto0):
="0110";
constantw7:
std_logic_vector(3downto0):
="0111";
constantw8:
std_logic_vector(3downto0):
="1000";
begin
process(clr,a,b,c,d,e,f,g,h)
begin
ifclr='0'then
states<="0000";
a1<='0';b1<='0';c1<='0';d1<='0';e1<='0';f1<='0';g1<='0';h1<='0';
elsif(a='1'andb='0'andc='0'andd='0'ande='0'andf='0'andg='0'andh='0')then
a1<='1';b1<='0';c1<='0';d1<='0';e1<='0';f1<='0';g1<='0';h1<='0';states<=w1;
elsif(a='0'andb='1'andc='0'andd='0'ande='0'andf='0'andg='0'andh='0')then
a1<='0';b1<='1';c1<='0';d1<='0';e1<='0';f1<='0';g1<='0';h1<='0';states<=w2;
elsif(a='0'andb='0'andc='1'andd='0'ande='0'andf='0'andg='0'andh='0')then
a1<='0';b1<='0';c1<='1';d1<='0';e1<='0';f1<='0';g1<='0';h1<='0';states<=w3;
elsif(a='0'andb='0'andc='0'andd='1'ande='0'andf='0'andg='0'andh='0')then
a1<='0';b1<='0';c1<='0';d1<='1';e1<='0';f1<='0';g1<='0';h1<='0';states<=w4;
elsif(a='0'andb='0'andc='0'andd='0'ande='1'andf='0'andg='0'andh='0')then
a1<='0';b1<='0';c1<='0';d1<='0';e1<='1';f1<='0';g1<='0';h1<='0';states<=w5;
elsif(a='0'andb='0'andc='0'andd='0'ande='0'andf='1'andg='0'andh='0')then
a1<='0';b1<='0';c1<='0';d1<='0';e1<='0';f1<='1';g1<='0';h1<='0';states<=w6;
elsif(a='0'andb='0'andc='0'andd='0'ande='0'andf='0'andg='1'andh='0')then
a1<='0';b1<='0';c1<='0';d1<='0';e1<='0';f1<='0';g1<='1';h1<='0';states<=w7;
elsif(a='0'andb='0'andc='0'andd='0'ande='0'andf='0'andg='0'andh='1')then
a1<='0';b1<='0';c1<='0';d1<='0';e1<='0';f1<='0';g1<='0';h1<='1';states<=w8;
endif;
endprocess;
endBehavioral;
2.功能图
(二)计分器模块JFQ
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYJFQIS
PORT(RST:
INSTD_LOGIC;
ADD:
INSTD_LOGIC;
CHOS:
INSTD_LOGIC_VECTOR(3DOWNTO0);
AA2,AA1,AA0,BB2,BB1,BB0:
OUTSTD_LOGIC_VECTOR(3DOWNTO0)
CC2,CC1,CC0,DD2,DD1,DD0:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDENTITYJFQ;
ARCHITECTUREARTOFJFQIS
BEGIN
PROCESS(RST,ADD,CHOS)IS
VARIBLEPOINTS_A2,POINTS_A1:
STD_LOGIC_VECTOR(3DOWNTO0);
VARIBLEPOINTS_B2,POINTS_B1:
STD_LOGIC_VECTOR(3DOWNTO0);
VARIBLEPOINTS_C2,POINTS_C1:
STD_LOGIC_VECTOR(3DOWNTO0);
VARIBLEPOINTS_D2,POINTS_D1:
STD_LOGIC_VECTOR(3DOWNTO0);
Begin
IF(ADD’EVENTANDADD=’1’)THEN
IFRST='1'THEN
POINTS_A2:
="0001";POINTS_A1="0000";
POINTS_B2:
="0001";POINTS_B1="0000";
POINTS_C2:
="0001";POINTS_C1="0000";
POINTS_D2:
="0001";POINTS_D1="0000";
ELSIFCHOS="0001"THEN
IFPOINTS_A1="1001"THEN
POINTS_A1="0000"THEN
IFPOINTS_A2="1001"THEN
POINTS_A2="0000"THEN
ELSE
POINTS_A2:
=POINTS_A2+'1';
ENDIF;
ELSE
POINTS_A1:
=POINTS_A1+'1';
ENDIF
ELSIFCHOS="0010"THEN
IFPOINTS_B1="1001"THEN
POINTS_B1="0000"THEN
IFPOINTS_B2="1001"THEN
POINTS_B2="0000"THEN
ELSE
POINTS_AB2:
=POINTS_B2+'1';
ENDIF;
ELSE
POINTS_B1:
=POINTS_B1+'1';
ENDIF
ELSIFCHOS="0001"THEN
IFPOINTS_C1="1001"THEN
POINTS_C1="0000"THEN
IFPOINTS_C2="1001"THEN
POINTS_C2="0000"THEN
ELSE
POINTS_C2:
=POINTS_C2+'1';
ENDIF;
ELSE
POINTS_C1:
=POINTS_C1+'1';
ENDIF;
ELSIFCHOS="0001"THEN
IFPOINTS_D1="1001"THEN
POINTS_D1="0000"THEN
IFPOINTS_D2="1001"THEN
POINTS_D2="0000"THEN
ELSE
POINTS_D2:
=POINTS_D2+'1';
ENDIF;
ELSE
POINTS_D1:
=POINTS_D1+'1';
ENDIF;
ENDIF;
ENDIF;
AA2<=POINTS_A2;AA1<=POINTS_A1;AA0<="0000";
BB2<=POINTS_B2;BB1<=POINTS_B1;BB0<="0000";
CC2<=POINTS_C2;CC1<=POINTS_C1;CC0<="0000";
DD2<=POINTS_D2;DD1<=POINTS_D1;DD0<="0000";
ENDARCHITECTUREART;
(三)计时器模块JSQ
1.VHDL源程序
----------------------------------------------------------------------------------
--Company:
--Engineer:
--CreateDate:
17:
00:
4606/24/2012
--DesignName:
--ModuleName:
jsq-Behavioral
--ProjectName:
--TargetDevices:
--Toolversions:
--Description:
--Dependencies:
--Revision:
--Revision0.01-FileCreated
--AdditionalComments:
----------------------------------------------------------------------------------
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
----Uncommentthefollowinglibrarydeclarationifinstantiating
----anyXilinxprimitivesinthiscode.
--libraryUNISIM;
--useUNISIM.VComponents.all;
entityjsqis
port(clr,ldn,en,clk:
instd_logic;
ta,tb:
instd_logic;
qa,qb:
outstd_logic_vector(3downto0)
);
endjsq;
architectureBehavioralofjsqis
signalda,db:
std_logic_vector(3downto0);
begin
process(ta,tb,clr)
begin
ifclr='1'then
da<="0000";
db<="0000";
else
ifta='1'then
da<=da+1;
endif;
iftb='1'then
db<=db+1;
endif;
endif;
endprocess;
process(clk)
variabletmpa,tmpb:
std_logic_vector(3downto0);
begin
ifclr='1'then
tmpa:
="0000";
tmpb:
="0000";
elsifclk'eventandclk='1'then
ifldn='1'then
tmpa:
=da;
tmpb:
=db;
elsifen='1'then
iftmpa="0000"then
tmpa:
="1001";
iftmpb="0000"then
tmpb:
="0110";
else
tmpb:
=tmpb-1;
endif;
else
tmpa:
=tmpa-1;
endif;
endif;
endif;
qa<=tmpa;
qb<=tmpb;
endprocess;
endBehavioral;
2.计时器功能图
(四)译码器模块
1.VHDL源程序
----------------------------------------------------------------------------------
--Company:
--Engineer:
--CreateDate:
17:
13:
3306/24/2012
--DesignName:
--ModuleName:
ymq-Behavioral
--ProjectName:
--TargetDevices:
--Toolversions:
--Description:
--Dependencies:
--Revision:
--Revision0.01-FileCreated
--AdditionalComments:
----------------------------------------------------------------------------------
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
----Uncommentthefollowinglibrarydeclarationifinstantiating
----anyXilinxprimitivesinthiscode.
--libraryUNISIM;
--useUNISIM.VComponents.all;
entityymqis
port(ain4:
instd_logic_vector(3downto0);
dout7:
outstd_logic_vector(6downto0)
);
endymq;
architectureBehavioralofymqis
begin
process(ain4)
begin
caseain4is
when"0000"=>dout7<="0111111";--0
when"0001"=>dout7<="0000110";--1
when"0010"=>dout7<="1011011";--2
when"0011"=>dout7<="1001111";--3
when"0100"=>dout7<="1100110";--4
when"0101"=>dout7<="1101101";--5
when"0110"=>dout7<="1111101";--6
when"0111"=>dout7<="0000111";--7
when"1000"=>dout7<="1111111";--8
when"1001"=>dout7<="1101111";--9
whenothers=>dout7<="0000000";--
endcase;
endprocess;
endBehavioral;
2.功能图
(六)顶层文件
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
----Uncommentthefollowinglibrarydeclarationifinstantiating
----anyXilinx