可控脉冲发生器的设计EDA课设报告.docx

上传人:b****1 文档编号:14045628 上传时间:2023-06-20 格式:DOCX 页数:18 大小:173.63KB
下载 相关 举报
可控脉冲发生器的设计EDA课设报告.docx_第1页
第1页 / 共18页
可控脉冲发生器的设计EDA课设报告.docx_第2页
第2页 / 共18页
可控脉冲发生器的设计EDA课设报告.docx_第3页
第3页 / 共18页
可控脉冲发生器的设计EDA课设报告.docx_第4页
第4页 / 共18页
可控脉冲发生器的设计EDA课设报告.docx_第5页
第5页 / 共18页
可控脉冲发生器的设计EDA课设报告.docx_第6页
第6页 / 共18页
可控脉冲发生器的设计EDA课设报告.docx_第7页
第7页 / 共18页
可控脉冲发生器的设计EDA课设报告.docx_第8页
第8页 / 共18页
可控脉冲发生器的设计EDA课设报告.docx_第9页
第9页 / 共18页
可控脉冲发生器的设计EDA课设报告.docx_第10页
第10页 / 共18页
可控脉冲发生器的设计EDA课设报告.docx_第11页
第11页 / 共18页
可控脉冲发生器的设计EDA课设报告.docx_第12页
第12页 / 共18页
可控脉冲发生器的设计EDA课设报告.docx_第13页
第13页 / 共18页
可控脉冲发生器的设计EDA课设报告.docx_第14页
第14页 / 共18页
可控脉冲发生器的设计EDA课设报告.docx_第15页
第15页 / 共18页
可控脉冲发生器的设计EDA课设报告.docx_第16页
第16页 / 共18页
可控脉冲发生器的设计EDA课设报告.docx_第17页
第17页 / 共18页
可控脉冲发生器的设计EDA课设报告.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

可控脉冲发生器的设计EDA课设报告.docx

《可控脉冲发生器的设计EDA课设报告.docx》由会员分享,可在线阅读,更多相关《可控脉冲发生器的设计EDA课设报告.docx(18页珍藏版)》请在冰点文库上搜索。

可控脉冲发生器的设计EDA课设报告.docx

可控脉冲发生器的设计EDA课设报告

可控脉冲发生器的设计

一、设计目的

1.了解可控脉冲发生器的实现机理。

2.学会用示波器观察FPGA产生的信号。

3.学习用VHDL编写复杂功能的代码。

二、设计原理

1.EDA是电子设计自动化(ElectronicDesignAutomation)的缩写。

EDA技术就是依赖功能强大的计算机,在EDA工具软件平台上,对以硬件描述语言HDL(HardwareDescriptionLanguage)为系统逻辑描述手段完成的设计文件,自动地完成逻辑编译、化简、分割、综合、布局布线以及逻辑优化和仿真测试,直至实现既定的电子线路系统功能。

EDA技术使设计者的工作仅局限于利用软件的方式来完成对系统硬件功能的实现,可以说EDA技术的产生与发展是电子设计技术的一个巨大进步。

EDA技术融合了众多电子设计技术和计算机辅助技术,使得它在现代电子学方面的应用越来越广泛,也成为电子、电气类大学生必须熟练掌握的一种设计工具。

2.VHDL是英文全名是VHSIC(VeryHighSpeedIntegratedCircuit)HardwareDescriptionLanguage,是硬件描述语言的业界标准之一。

VHDL语言功能强大、设计灵活。

VHDL语言可以用简洁明确的源代码来描述复杂的逻辑控制,它具有多层次的设计描述功能,层层细化,最后可直接生成电路级描述。

VHDL支持同步电路、异步电路和随机电路的设计,这是其他硬件描述语言虽不能比拟的。

VHDL还支持多种设计方法,既支持自底向上的设计,又支持自顶向下的设计;既支持模块化设计,又支持层次化设计。

由于VHDL已经成为IEEE标准所规定的硬件描述性语言,目前大多数EDA工具几乎都支持VHDL。

因为VHDL易读和结构化且易于修改设计所以在硬件电路设计过程中,VHDL语言得到广泛应用。

VHDL语言易于共享和复用。

VHDL采用基于库(Library)的设计方法,可以建立各种可再次利用的模块。

这些模块可以预先设计或使用以前设计中的存档模块,将这些模块存放到库中,就可以在以后的设计中进行复用,可以使设计成果在设计人员之间进行交流和共享,减少硬件电路设计。

VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。

VHDL语句的行为描述能力和程序结构决定了它具有支持大规模设计的分解和已有设计的再利用功能。

这个特点很好的符合了市场需求。

对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述的设计转变成门级网表。

总之,由于VHDL语言有的这些优良的特点,它被广泛的应用在电子线路和电子系统的设计中。

3.QuartusII是Altera公司的综合性PLD/FPGA开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(AlteraHardwareDescriptionLanguage)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。

QuartusII可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。

具有运行速度快,界面统一,功能集中,易学易用等特点。

QuartusII支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。

对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA工具。

此外,QuartusII通过和DSPBuilder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。

4.脉冲发生器就是要产生一个脉冲波形,而可控脉冲发生器则是要产生一个周期和占空比可变的脉冲波形。

可控脉冲发生器的实现原理比较简单,可以简单的理解为一个计数器对输入的时钟信号进行分频的过程。

通过改变计数器的上限值来达到改变周期的目的,通过改变电平翻转的阈值来达到改变占空比的目的。

下面举个简单的例子来说明其工作原理。

假如有一个计数器T对时钟分频,其计数的范围是从0~N,

另取一个M(0≤M≤N),若输出为Q,那么Q只要满足条件

 

时,通过改变N值,即可改变输出的脉冲波的周期;改变M值,即可改变脉冲波的占空比。

这样输出的脉冲波的周期和占空比分别为:

 

三、设计内容

编写实现可控脉冲发生器程序,通过脉冲周期和占空比改变实现不同脉冲的输出。

用QuartusII软件对设计进行编译、综合、仿真,给出相应的时序仿真波形和硬件电路图。

 

四、设计流程

1.程序

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYCCIS

PORT(CLK:

INSTD_LOGIC;--时钟输入

RST:

INSTD_LOGIC;--复位输入

NU,ND:

INSTD_LOGIC;--输入:

控制频率的改变

MU,MD:

INSTD_LOGIC;--输入:

控制占空比的改变

FOUT:

OUTSTD_LOGIC--波形输出

);

ENDCC;

ARCHITECTUREBEHAVEOFCCIS

SIGNALN_BUFFER,M_BUFFER:

STD_LOGIC_VECTOR(10DOWNTO0);

SIGNALN_COUNT:

STD_LOGIC_VECTOR(10DOWNTO0);

SIGNALCLKIN:

STD_LOGIC;

SIGNALCLK_COUNT:

STD_LOGIC_VECTOR(12DOWNTO0);--产生一个低速时钟,用于按键判断

BEGIN

PROCESS(CLK)--计数器累加

BEGIN

IF(CLK'EVENTANDCLK='1')THEN

IF(N_COUNT=N_BUFFER)THENN_COUNT<="00000000000";

ELSE

N_COUNT<=N_COUNT+1;

ENDIF;

ENDIF;

ENDPROCESS;

PROCESS(CLK)--波形判断

BEGIN

IF(CLK'EVENTANDCLK='1')THEN

IF(N_COUNT

FOUT<='1';

ELSIF(N_COUNT>M_BUFFERANDN_COUNT

FOUT<='0';

ENDIF;

ENDIF;

ENDPROCESS;

PROCESS(CLK)

BEGIN

IF(CLK'EVENTANDCLKIN='1')THEN

CLK_COUNT<=CLK_COUNT+1;

ENDIF;

CLKIN<=CLK_COUNT(12);

ENDPROCESS;

PROCESS(CLKIN)--频率及占空比的改变1

BEGIN

IF(CLK'EVENTANDCLKIN='0')THEN

IF(RST='0')THEN

M_BUFFER<="01000000000";

N_BUFFER<="10000000000";

ELSIF(NU='0')THEN

N_BUFFER<=N_BUFFER+1;

ELSIF(ND='0')THEN

N_BUFFER<=N_BUFFER-1;

ELSIF(MU='0')THEN

M_BUFFER<=M_BUFFER+1;

ELSIF(MD='0')THEN

M_BUFFER<=M_BUFFER-1;

ENDIF;

ENDIF;

ENDPROCESS;

ENDBEHAVE;

 

2.管脚分配:

 

3.时序仿真图:

 

4.硬件电路图:

5.现象:

五、心得体会

通过这次EDA课程设计,我对课堂上所学到的理论知识的理解加深了许多,自己动脑、动手设计的能力也得到了较大提高。

在这次课程设计的过程中,我对VHDL语言有了更深的认识。

通过查阅相关资料和动手设计我发现我以前对VHDL语言的认识太过肤浅,认为VHDL语言只能用于设计小型的电路系统。

但有了更深刻的认识之后我发现学好VHDL语言可以设计出大规模的、功能复杂的电路系统。

以前之所以会有错误的认识是因为自己对VHDL语言的了解和掌握还不够。

现在仔细想想,这次课程设计使得我对VHDL语言的理解与应用能力得到了较大的提升,也让我认识到只要升入学习,提升的空间永远的存在的。

另一方面我也发现了动手实践的重要性。

动手实践是理论知识得以灵活运用的必要前提,也是今后今后走上工作岗位之后能够很好的完成设计工作的技术保证。

只有遇到实际问题并根据自己对课堂上获得的专业知识的理解来解决它才能真正的提高自己的能力。

这也提醒我在平时的学习生活中不能一味埋头于课本知识,当今社会竞争越来越激烈,社会对人才的要求越来越全面,只有理论知识是远远不够的,必须靠动手能力做支撑。

因此在学习之余我们应该积极参加各种与专业知识有关的实践活动和知识竞赛,巩固所学的理论知识,多注重培养实际动手能力和专业技术能力,这样才能在以后的工作岗位上有所作为。

 

数字秒表设计

一、设计目的

本设计的任务就是设计一个数字钟,要求显示格式为小时-分钟-秒钟。

系统时钟选择时钟模块的50MHz,要得到1Hz时钟信号,必须对系统时钟进行50000000次分频。

用S1按键作为系统时钟复位,复位后全部显示00-00-00。

2、设计原理

数码管的八个段a,b,c,d,e,f,g,h(h是小数点)都分别连接到SEG0~SEG7,8个数码管分别由八个选通信号DIG0~DIG7来选择,被选通的数码管显示数据,其余关闭。

如果希望8个数码管显示希望的数据,就必须使得8个选通信号DIG0~DIG7分别被单独选通,并在此同时,在段信号输入口SEG0~SEG7加上该对应数码管上显示的数据,于是随着选通信号的扫描就能实现动态扫描显示的目的。

虽然每次只有1个数码管显示,但只要扫描显示速率足够快,利用人眼的视觉余辉效应,我们仍会感觉所有的数码管都在同时显示。

三、设计主要内容

本设计要求掌握使用QuartusII设计数字系统的设计思路和设计方法。

学习VHDL基本逻辑电路的综合设计应用。

掌握VHDL语言的语法规范,掌握时序电路描述方法。

掌握多个数码管动态扫描显示的原理及设计方法。

设计一个由共阴八位数码管作为显示、按键作为控制系统的数字钟电路,要求利用实验室设备完成系统设计并运行调试。

4、设计流程

1.程序:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_arith.all;

useieee.std_logic_unsigned.all;

entitystopwatchis

port(Clk:

instd_logic;--时钟输入

reset:

instd_logic;--复位输入

start,over:

instd_logic;--秒表控制输入

ledag:

outstd_logic_vector(6downto0);--七段码管显示输出

SEL:

bufferstd_logic_vector(2downto0)--七段码管扫描驱动

);

endstopwatch;

architecturebehaveofstopwatchis

signalDisp_Temp:

integerrange0to15;

signalDisp_Decode:

std_logic_vector(6downto0);

signalmSEC1,mSEC10:

integerrange0to9;

signalSEC1,SEC10:

integerrange0to9;

signalMIN1,MIN10:

integerrange0to9;

signalHOUR1,HOUR10:

integerrange0to9;

signalClk1kHz:

std_logic;

signalClk100Hz:

std_logic;

signalStart_Flag:

std_logic;

signalMusic_Count:

std_logic_vector(2downto0);

begin

PROCESS(clk)--generate100hzclocksignal

variablecnt:

INTEGERRANGE0TO499999;--产生100Hz时钟的分频计数器

BEGIN

IFclk='1'ANDclk'eventTHEN

IFcnt=499999THENcnt:

=0;

ELSE

IFcnt<250000THENclk100hz<='1';

ELSEclk100hz<='0';

ENDIF;

cnt:

=cnt+1;

ENDIF;

ENDIF;

ENDPROCESS;

PROCESS(clk)--generate1khzclocksignal

variablecnt1:

INTEGERRANGE0TO49999;--产生1kHz时钟的分频计数器

BEGIN

IFclk='1'ANDclk'eventTHEN

IFcnt1=49999THENcnt1:

=0;

ELSE

IFcnt1<25000THENclk1khz<='1';

ELSEclk1khz<='0';

ENDIF;

cnt1:

=cnt1+1;

ENDIF;

ENDIF;

ENDPROCESS;

process(Clk100Hz)

begin

if(reset='0')then--系统复位

mSEC1<=0;

mSEC10<=0;

SEC1<=0;

SEC10<=0;

MIN1<=0;

MIN10<=0;

HOUR1<=0;

HOUR10<=0;

Start_Flag<='0';

elsif(start='0'andStart_Flag='0')then

Start_Flag<='1';

elsif(over='0'andStart_Flag='1')then

Start_Flag<='0';

elsif(Clk100Hz'eventandClk100Hz='1')then--正常运行

if(Start_Flag='1')then

if(mSEC1=9)then

mSEC1<=0;

if(mSEC10=9)then

mSEC10<=0;

if(SEC1=9)then

SEC1<=0;

if(SEC10=5)then

SEC10<=0;

if(MIN1=9)then

MIN1<=0;

if(MIN10=5)then

MIN10<=0;

if(HOUR1=9)then

HOUR1<=0;

if(HOUR10=9)then

HOUR10<=0;

else

HOUR10<=HOUR10+1;

endif;

else

HOUR1<=HOUR1+1;

endif;

else

MIN10<=MIN10+1;

endif;

else

MIN1<=MIN1+1;

endif;

else

SEC10<=SEC10+1;

endif;

else

SEC1<=SEC1+1;

endif;

else

mSEC10<=mSEC10+1;

endif;

else

mSEC1<=mSEC1+1;

endif;

endif;

endif;

endprocess;

process(SEL)

begin

if(HOUR1=0)then

case(SEL+1)is

when"111"=>Disp_Temp<=mSEC1;

when"110"=>Disp_Temp<=mSEC10;

when"101"=>Disp_Temp<=10;

when"100"=>Disp_Temp<=SEC1;

when"011"=>Disp_Temp<=SEC10;

when"010"=>Disp_Temp<=10;

when"001"=>Disp_Temp<=MIN1;

when"000"=>Disp_Temp<=MIN10;

endcase;

else

case(SEL+1)is

when"111"=>Disp_Temp<=SEC1;

when"110"=>Disp_Temp<=SEC10;

when"101"=>Disp_Temp<=10;

when"100"=>Disp_Temp<=MIN1;

when"011"=>Disp_Temp<=MIN10;

when"010"=>Disp_Temp<=10;

when"001"=>Disp_Temp<=HOUR1;

when"000"=>Disp_Temp<=HOUR10;

endcase;

endif;

endprocess;

process(Clk1khz)

begin

if(Clk1khz'eventandClk1khz='1')then--扫描累加

SEL<=SEL+1;

ledag<=Disp_Decode;

endif;

endprocess;

process(Disp_Temp)--显示转换

begin

caseDisp_Tempis

when0=>Disp_Decode<="0111111";--0

when1=>Disp_Decode<="0000110";--1

when2=>Disp_Decode<="1011011";--2

when3=>Disp_Decode<="1001111";--3

when4=>Disp_Decode<="1100110";--4

when5=>Disp_Decode<="1101101";--5

when6=>Disp_Decode<="1111101";--6

when7=>Disp_Decode<="0000111";--7

when8=>Disp_Decode<="1111111";--8

when9=>Disp_Decode<="1101111";--9

when10=>Disp_Decode<="1000000";---

whenothers=>Disp_Decode<="0000000";--全灭

endcase;

endprocess;

endbehave;

2.管脚分配:

2.时序仿真图:

 

4.硬件电路图:

5.现象:

5、设计总结

通过本次的课程设计,我初步了解了VHDL语言的编程思想,以及利用EDA软件进行电子电路设计的方法,通过对一个课题的分析,将实验的内容进行分块解读,具体到每一个模块的具体作用,然后将各个功能的模块通过连线进行总体的电路实现,也可以通过VHDL语言对各个模块进行组合,然后需要在程序编译成功的基础上,安装硬件,将程序下载到具体的芯片上进行硬件的实现。

通过整个实验的完成,我从老师和同学那里学到了更多关于VHDL编程,仿真以及硬件实现的知识,自己以前模糊不清的地方也通过此次的课程设计了解清楚了,并且通过这次课程设计,我也锻炼了独立思考,独立操作的能力,虽然对于VHDL语言的应用我还很生疏,但是此次的课程设计却让我学到了很多,也对这门语言有了更深的理解,对EDA软件的使用有了更多的体会。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2