EDA课程设计.docx
《EDA课程设计.docx》由会员分享,可在线阅读,更多相关《EDA课程设计.docx(15页珍藏版)》请在冰豆网上搜索。
EDA课程设计
长沙学院
课程设计说明书
题目EDA课程设计
系(部)电子与通信工程系
专业(班级)
姓名
学号
指导教师
起止日期
EDA技术课程设计任务书
系(部):
电子与通信工程系专业:
电气工程及其自动化指导教师:
课题名称
彩灯控制器的设计
设计内容及要求
(1)课题内容:
1、设计一个彩灯控制器,使彩灯(LED管)能连续发出三种以上不同的花型(自拟);
2、随着彩灯显示图案的变化,发出不同的音响声。
3、要求使用7段数码管显示当前显示的花型,如第一种花型显示AA,第二种花型显示BB,第三种花型显示CC
(2)主要任务:
完成该系统的硬件和软件的设计,并制作出实物装置,调试好后并能实际运用(指导教师提供制作所需的器件),最后就课程设计本身提交一篇课程设计说明书。
设计工作量
1、VHDL语言程序设计;
2、波形仿真;
3、在实验装置上进行硬件测试,并进行演示;
4、提交一份完整的课程设计说明书,包括设计原理、程序设计、程序分析、仿真分析、硬件测试、调试过程,参考文献、设计总结等。
进度安排
起止日期(或时间量)
设计内容(或预期目标)
备注
第一天
课题介绍,答疑,收集材料
第二天
设计方案论证
第三天
设计VHDL语言程序
第四天
在实验装置上进行硬件测试,并进行演示
第五天
编写设计说明书
教研室
意见
年月日
系(部)主管领导意见
年月日
长沙学院课程设计鉴定表
姓名
学号
专业
班级
设计题目
彩灯控制器的设计
指导教师
指导教师意见:
评定等级:
教师签名:
日期:
答辩小组意见:
评定等级:
答辩小组长签名:
日期:
教研室意见:
教研室主任签名:
日期:
系(部)意见:
系主任签名:
日期:
说明
课程设计成绩分“优秀”、“良好”、“及格”、“不及格”四类;
目录
第1章EDA简介1
第2章彩灯控制器的设计原理2
第3章程序设计和分析3
第4章波形仿真分析8
第5章硬件测试11
第6章心得体会12
第1章EDA简介
EDA技术(即ElectronicDesignAutomation技术)就是依赖强大的计算机,在EDA工具软件平台上,对以硬件描述语言HDL(HardwareDdscriptionLangurage)为系统逻辑描述手段完成的设计文件,自动地完成逻辑编译、化简、分割、综合、布局布线以及逻辑优化和仿真测试,直至实现既定的电子线路系统功能。
它在硬件实现方面融合了大规模集成电路制造技术、IC版图设计、ASIC测试和封装、FPGA(GieldPeogrammableGateArray)/CPLD(ComplexProgrammableLogicDevice)编程下载和自动测试等技术;在计算机辅助工程方面融合了计算机辅助设计(CAD),计算机辅助制造(CAM),计算机辅助测试(CAT),计算机辅助工程(CAE)技术以及多种计算机语言的设计概念;而在现代电子学方面则容纳了更多的内容,如电子线路设计理论、数字信号处理技术、数字系统建模和优化技术及长线技术理论等。
硬件描述语言HDL是EDA技术的重要组成部分,常见的HDL主要有VHDL、VerilogHDL、ABEL、AHDL、SystemVerilog和SystemC。
其中VHDL、Verilog和现在的EDA设计中使用最多,并且我们学习的是VHDL的编程方法和实用技术。
VHDL的英文全名是VHSIC(VeryHighSpeedIntegratedCircuit)HardwareDescription
Language,由IEEE(TheInstituteofElectricalandElectronicsEngineets)进一步发展,并在1987年作为“IEEE标准1076”公布。
从此VHDL成为硬件描述语言的业界标准之一。
VHDL技术与传统的数字电子系统或IC设计相比之下有很大的优势,主要表现在:
第一,VHDL语言具有很强的电路描述和建模能力,能从多个层次对数字系统进行建
模和描述,从而大大简化了硬件设计任务,提高了设计效率和可靠性。
第二,VHDL具有也具体硬件电路武官和与设计平台无关的特性,并且具有良好的电
路行为描述和系统描述的能力,并在语言易读性和层次化,结构化设计方面,表现了强大的生命力和应用潜力。
EDA书中所给出的所有的实力和实验都是基于QuartusⅡ6.0的,其应用方法和设计流程对于其他流行EDA工具的使用具有一定的典型性和普遍性。
它提供了完整的多平台设计环境,能满足各种特定设计的需要,也是单芯片可编程系统(SOPC)开发的基本设计工具,并为AlteraDSP开发包进行系统模型设计提供了集成综合环境。
QuartusⅡ6.0包括模块化的编译器。
编译器包括的功能模块有分析/综合器(Analysis&Synthesis)、适配器(Fitter)、装配器(Assembler)、时序分析器(TimingAnalyzer)、设计辅助模块(DesignAssistant)、EDA网表文件生成器(EDANetlistWriter)、编辑数据接口(CompilerDatabaseInterface)等。
可以通过选择StartCompilation来运行所有的编译器模块,也可以通过选择Start单独运行各个模块。
还可以通过选择CompilerTool,在CompilerTool窗口中运行该模块来启动编译器模块。
第2章彩灯控制器的设计原理
本次彩灯控制器的设计包含几个主要模块,一是彩灯显示和扬声器的时序控制部分,二是发光二极管的动态显示和数码管的动态显示,本次设计中,二者的显示同步变化;三是扬声器的控制部分。
流程图如下所示:
图1彩灯控制器的设计流程图
彩灯控制器的设计核心主要是分频器的使用,显示部分的设计较简易。
分频的方法有很多种,本次设计之采用了其中较简易的一种,通过计数器的分频,将控制器外接的频率分为几个我们预先设定的值。
当计数器达到预先设定的值,即产生一个上升沿,从而实现分频。
扬声器通过不同的频率控制发出不同的声音。
同样发光二极管和数码管的显示速度也由其中分出来的一种频率控制(控制显示频率在1~4之间为宜)。
通过使能端的控制可以控制不同的数码管显示预先设定的图案,数码管依次显示的图案为AA、BB、CC,并随着发光二极管同步动态显示。
AA为自左向右显示,BB为自右向左显示,CC从二边向中间再由中间向二边发散显示。
与此同时,显示不同的花型时扬声器发出不同的声音,代表不同的花型。
本次设计还带有复位功能,通过复位可以使彩灯控制器恢复到最初的状态。
第3章程序设计和分析
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
建立设计库和标准程序包
实体部分:
entitypanis
port(clk:
instd_logic;
clr:
instd_logic;
speak:
outstd_logic;
led7s1:
outstd_logic_vector(6downto0);
led7s2:
outstd_logic_vector(7downto0);
led_selout:
outstd_logic_vector(7downto0);
endentity;
实体名为pan,定义端口,输入端口为clk和clr,其中clk接脉冲信号,clr接复位端;输出端口speak接扬声器,led7s1接数码管的七段显示部分,led7s接八个发光二极管,led_selout接八个数码管的使能端,控制数码管的循环显示。
结构体部分:
architectureoneofpanis
signals:
std_logic_vector(4downto0);
signalclk1:
std_logic;
signalclk2:
std_logic;
signalclk3:
std_logic;
定义4个信号,cq,cllk1,clk2,clk3.
process(clk)
variablea:
std_logic_vector(5downto0);
begin
ifclr='1'then
clk1<='0';-----复位信号控制部分
else
ifclk'eventandclk='1'then
ifa="110010"then
a:
="000000";
clk1<='1';
else
a:
=a+1;
clk1<='0';
endif;
endif;
endif;
endprocess;
以上程序为第一次分频,为50分频,当clk发生变化,使a从000000变化到110010时
产生一个上升沿clk1。
如果a没有变化到110010则a继续自加,直到110010为止产生下一个上升沿。
process(clk)
variableb:
std_logic_vector(4downto0);
begin
ifclr='1'then
clk2<='0';-----复位信号
else
ifclk'eventandclk='1'then
ifb="11001"then
b:
="00000";
clk2<='1';
else
b:
=b+1;
clk2<='0';
endif;
endif;
endif;
endprocess;
以上程序为对clk进行25分频,原理同上,产生信号clk2。
process(clk)
variablec:
std_logic_vector(2downto0);
begin
ifclr='1'then
clk3<='0';----复位信号
else
ifclk'eventandclk='1'then
ifc="111"then
c:
="000";
clk3<='1';
else
c:
=c+1;
clk3<='0';
endif;
endif;
endif;
endprocess;
以上程序为对clk进行8分频,产生一个新的时钟脉冲信号clk3。
数码管及二极管循环显示时序控制程序:
process(clk2)
variablez:
integerrange0to20;
begin
ifclr='1'then
s<="00000";-------复位信号
else
ifclk'eventandclk='1'then
z:
=z+1;
ifz=20thens<=s+1;s:
=0;
ifs="10111"thens<="00000";
elses<=s+1;
endif;
endif;
endif;
endif;
endprocess;
该段程序的目的是对clk2再进行一次分频,当clk2发生变化,并且变化为上升沿时,z就加1,直到加到为20时,s就发生变化,加1,每当s发生变化,加到30时,s就加1。
当s从00000变化到10111时,就对s清零,从而实现数码显示管和发光二极管的循环显示,以达到显示速度的要求。
发光二极管及数码管显示程序:
process(s)
begin
casesis
when"00000"=>led7s1<="0001000";led7s2<="01111111";speak<=clk1;led_selout<="11000000";
when"00001"=>led7s1<="0001000";led7s2<="10111111";speak<=clk1;led_selout<="01100000";
when"00010"=>led7s1<="0001000";led7s2<="11011111";speak<=clk1;led_selout<="00110000";
when"00011"=>led7s1<="0001000";led7s2<="11101111";speak<=clk1;led_selout<="00011000";
when"00100"=>led7s1<="0001000";led7s2<="11110111";speak<=clk1;led_selout<="00001100";
when"00101"=>led7s1<="0001000";led7s2<="11111011";speak<=clk1;led_selout<="00000110";
when"00110"=>led7s1<="0001000";led7s2<="11111101";speak<=clk1;led_selout<="00000011";
when"00111"=>led7s1<="0001000";led7s2<="11111110";speak<=clk1;led_selout<="10000001";
此段程序就是当敏感信号s发生变化,对数码管进行置位和置型,0001000也就是对相应的数码管使之显示花型为A,通过对数码管使能端的置位,控制显示的数码管显示为AA,并且发光二极管最右边显示为亮。
当S每变化一次,数码管向左移动一格,发光二极管也同步向左移动,每次只亮一个灯。
当s变化到00111之后执行下一段程序,同时扬声器发出声音。
when"01000"=>led7s1<="0000011";led7s2<="11111110";speak<=clk2;led_selout<="00000011";
when"01001"=>led7s1<="0000011";led7s2<="11111101";speak<=clk2;led_selout<="00000110";
when"01010"=>led7s1<="0000011";led7s2<="11111011";speak<=clk2;led_selout<="00001100";
when"01011"=>led7s1<="0000011";led7s2<="11110111";speak<=clk2;led_selout<="00011000";
when"01100"=>led7s1<="0000011";led7s2<="11101111";speak<=clk2;led_selout<="00110000";
when"01101"=>led7s1<="0000011";led7s2<="11011111";speak<=clk2;led_selout<="01100000";
when"01110"=>led7s1<="0000011";led7s2<="10111111";speak<=clk2;led_selout<="11000000";
when"01111"=>led7s1<="0000011";led7s2<="01111111";speak<=clk2;led_selout<="10000001";
此段程序就是当敏感信号s发生变化至01000时,对数码管进行置位和置型,0000011也就是对相应的数码管使之显示花型为B,通过对数码管使能端的置位,控制显示的数码管显示为BB,并且发光二极管最左边显示为亮。
当S每变化一次,数码管向右移动一格,发光二极管也同步向右移动,每次只亮一个灯。
当s变化到01111之后执行下一段程序,同时扬声器发出声音。
when"10000"=>led7s1<="1000110";led7s2<="01111110";speak<=clk3;led_selout<="10000001";
when"10001"=>led7s1<="1000110";led7s2<="10111101";speak<=clk3;led_selout<="01000010";
when"10010"=>led7s1<="1000110";led7s2<="11011011";speak<=clk3;led_selout<="00100100";
when"10011"=>led7s1<="1000110";led7s2<="11100111";speak<=clk3;led_selout<="00011000";
when"10100"=>led7s1<="1000110";led7s2<="11100111";speak<=clk3;led_selout<="00011000";when"10101"=>led7s1<="1000110";led7s2<="11011011";speak<=clk3;led_selout<="00100100";
when"10110"=>led7s1<="1000110";led7s2<="10111101";speak<=clk3;led_selout<="01000010";
when"10111"=>led7s1<="1000110";led7s2<="01111110";speak<=clk3;led_selout<="10000001";
whenothers=>null;
endcase;
endprocess;
end;
此段程序就是当敏感信号s发生变化至10000时,对数码管进行置位和置型,1000110也就是对相应的数码管使之显示花型为C,通过对数码管使能端的置位,控制显示的数码管显示为CC,并且发光二极管最左边第一个和最右边第一个显示为亮。
当S每变化一次,数码管向中间移动一格,发光二极管也同步中间移动,可以看到由二边向中间移动再发散到二边的变化过程。
当s变化到10111之后执行再循环显示A花型,同时扬声器发出声音。
第4章波形仿真分析
程序经过编译之后即可进行波形的仿真,为了方便观察显示结果,这里调节仿真时间为3us,脉冲频率clk的周期为5ns,复位信号暂且不进行仿真.。
执行Quartus软件中的processing-->startsimulation选项,即可观察到波形仿真图像。
如下图所示为显示花型AA的仿真结果。
图2花型A波形仿真图
由图2可知,当clk发生变化,来上升沿时,led7s1为0001000即数码管首先显示为花型A二极管按规定的显示,首先led7s2位01111111即最右边的二极管亮灯,led_selout为11000000即最右边的2个数码管显示2个A的花型。
当clk变化到规定次数时二极管的显示开始按左移动,数码显示管也向左移动。
Led7s2依次变化01111111~11111110,实现二极管的向左移动;led_selout也依次变化11000000~00000011实现数码显示管的向左移动。
同时当clk信号变化50次时产生一个上升沿clk1,控制扬声器发出声音。
图3花型BB的波形仿真图
由图3可知,当clk发生变化,来上升沿时,led7s1为0000011即数码管首先显示为花型B二极管按规定的显示,首先led7s2位11111110即最右边的二极管亮灯,led_selout为00000011即最右边的2个数码管显示2个B的花型。
当clk变化到规定次数时二极管的显示开始向右移动,数码显示管也向右移动。
Led7s2依次变化11111110~01111111,实现二极管的向右移动;led_selout也依次变化00000011~11000000实现数码显示管的向右移动。
同时当clk信号变化25次时产生一个上升沿clk2,控制扬声器发出声音。
图4花型C的波形仿真图
由图4可知当clk发生变化,来上升沿时,led7s1为1000110即数码管首先显示为花型C二极管按规定的显示,首先led7s2位01111110即最右边和最右边的二极管亮灯,led_selout为10000001即最右边和最左边的2个数码管显示2个C的花型。
当clk变化到规定次数时二极管的显示开始向中间移动,数码显示管中的花型也向中间移动,然后再由中间向俩边移动。
Led7s2依次变化01111110~11100111~01111110,实现二极管的向中间移动再向俩边移动;led_selout也依次变化10000001~00011000~10000001实现数码显示管的向中间再向俩边移动。
同时当clk信号变化8次时产生一个上升沿clk3,控制扬声器发出声音。
第5章硬件测试
波形仿真完成之后即可进行引脚的分配,并进行编程下载至硬件进行测试。
在Quartus中选择Assignments->AssignmentsEditor,在AssignmentsEditor窗口中选择pin标签页,即可分配引脚,引脚的分配情况如图5所示。
图5引脚分配图
如上图所示,在实验过程中clk的引脚选择J16即可外接频率源,实验过程中选择的频率为1KHZ。
其余数码管和二极管以及8个数码管的使能端引脚分配见上图,复位键引脚T10对应的按键。
选择process->startcompilation,重新编译,完成后形成可配置到FPGA的pan.sof文件和配置到外部的pan.pof文件。
编程下载,在quartus软件中,选择tools/programmer,在Mode中选择JTAG,点击”addfile”按钮添加需要配置的pan.sof文件,选中program/configure,点击start按钮对芯片进行配置,等待一段时间后即可观察到实验结果。
在实验箱上,我们观察到实验结果按我们所设计的那样显示,即可显示我们预先设定的三种花型AA、BB、CC并且能够按要求循环移动,发光二极管也可按设计要求循环闪烁,并与数码显示管的花型变化同步。
同时当显示不同的花型时扬声器发出了不同的声音。
当按下复位键时我们可以看到数码显示管重新开始再最右边显示花型AA,并且扬声器停止发声。
这些实验结果验证所设计程序的正确性,实现了设计内容和要求,并且有了一定的扩展功能。
第6章心得体会
本次设计的课题是彩灯控制器的设计,当拿到这个课题的时候经过分析就知道关键是计数器和分频器的使用,分频的方法有很多种,对于同一种功能的实现,用VHDL可以采用多种方式进行描述,每种方式之间各有优劣,本次设计只采用了其中较简单的一种,应尽量用最简洁的语言写出所需功能的程序。
通过这次课程设计对EDA技术有了更进一步的熟悉,VHDL语言和C语言等其他语言还是有很大的区别。
VHDL是EDA技术的重要组成部分,其具有与具体硬件电路无关和与设计平台无关的特性,并且具有良好的电路行为描述和系统描述的能力,并在语言易读性和层次化、结构化设计方面,表现了强大的生命力和应用潜力。
其主要的也是最大的优点就在于设计者可以专心致力于其功能的实现,而不需要对不影响功能的与工艺有关的因素花费