可控脉冲发生器的设计EDA课设报告资料由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“可控脉冲发生器的设计”。
可控脉冲发生器的设计
一、设计目的 1.了解可控脉冲发生器的实现机理。2.学会用示波器观察FPGA产生的信号。3.学习用VHDL编写复杂功能的代码。
二、设计原理
1.EDA是电子设计自动化(Electronic Design Automation)的缩写。EDA技术就是依赖功能强大的计算机,在EDA工具软件平台上,对以硬件描述语言HDL(Hardware Description Language)为系统逻辑描述手段完成的设计文件,自动地完成逻辑编译、化简、分割、综合、布局布线以及逻辑优化和仿真测试,直至实现既定的电子线路系统功能。EDA技术使设计者的工作仅局限于利用软件的方式来完成对系统硬件功能的实现,可以说EDA技术的产生与发展是电子设计技术的一个巨大进步。EDA技术融合了众多电子设计技术和计算机辅助技术,使得它在现代电子学方面的应用越来越广泛,也成为电子、电气类大学生必须熟练掌握的一种设计工具。
2.VHDL是英文全名是VHSIC(Very High Speed Integrated Circuit)Hardware Description Language,是硬件描述语言的业界标准之一。VHDL语言功能强大、设计灵活。VHDL语言可以用简洁明确的源代码来描述复杂的逻辑控制,它具有多层次的设计描述功能,层层细化,最后可直接生成电路级描述。
VHDL支持同步电路、异步电路和随机电路的设计,这是其他硬件描述语言虽不能比拟的。VHDL还支持多种设计方法,既支持自底向上的设计,又支持自顶向下的设计;既支持模块化设计,又支持层次化设计。
由于VHDL已经成为IEEE标准所规定的硬件描述性语言,目前大多数EDA工具几乎都支持VHDL。因为VHDL易读和结构化且易于修改设计所以在硬件电路设计过程中,VHDL语言得到广泛应用。
VHDL语言易于共享和复用。VHDL采用基于库(Library)的设计方法,可以建立各种可再次利用的模块。这些模块可以预先设计或使用以前设计中的存档模块,将这些模块存放到库中,就可以在以后的设计中进行复用,可以使设计成果在设计人员之间进行交流和共享,减少硬件电路设计。
VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。VHDL语句的行为描述能力和程序结构决定了它具有支持大规模设计的分解和已有设计的再利用功能。这个特点很好的符合了市场需求。对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述的设计转变成门级网表。总之,由于VHDL语言有的这些优良的特点,它被广泛的应用在电子线路和电子系统的设计中。
3.Quartus II是Altera公司的综合性PLD/FPGA开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。
Quartus II可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。具有运行速度快,界面统一,功能集中,易学易用等特点。Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA工具。
此外,Quartus II通过和DSP Builder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。
4.脉冲发生器就是要产生一个脉冲波形,而可控脉冲发生器则是要产生一个周期和占空比可变的脉冲波形。可控脉冲发生器的实现原理比较简单,可以简单的理解为一个计数器对输入的时钟信号进行分频的过程。通过改变计数器的上限值来达到改变周期的目的,通过改变电平翻转的阈值来达到改变占空比的目的。下面举个简单的例子来说明其工作原理。
假如有一个计数器T对时钟分频,其计数的范围是从0~N,另取一个M(0≤M≤N),若输出为Q,那么Q只要满足条件
时,通过改变N值,即可改变输出的脉冲波的周期;改变M值,即可改变脉冲波的占空比。这样输出的脉冲波的周期和占空比分别为:
1Q00TMMTN周期(N1)TCLOCKM占空比100%N
1三、设计内容
编写实现可控脉冲发生器程序,通过脉冲周期和占空比改变实现不同脉冲的输出。用QuartusII软件对设计进行编译、综合、仿真,给出相应的时序仿真波形和硬件电路图。
四、设计流程 1.程序
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CC IS
PORT(CLK: IN STD_LOGIC;
--时钟输入
RST : IN STD_LOGIC;
--复位输入
NU,ND : IN STD_LOGIC;
--输入:控制频率的改变
MU,MD : IN STD_LOGIC;
--输入:控制占空比的改变
FOUT : OUT STD_LOGIC
--波形输出);
END CC;ARCHITECTURE BEHAVE OF CC IS SIGNAL N_BUFFER,M_BUFFER:STD_LOGIC_VECTOR(10 DOWNTO 0);SIGNAL N_COUNT :STD_LOGIC_VECTOR(10 DOWNTO 0);SIGNAL CLKIN : STD_LOGIC;SIGNAL CLK_COUNT : STD_LOGIC_VECTOR(12 DOWNTO 0);--产生一个低速时钟,用于按键判断
BEGIN
PROCESS(CLK)
--计数器累加
BEGIN
IF(CLK'EVENT AND CLK='1')THEN
IF(N_COUNT=N_BUFFER)THEN
N_COUNT
ELSE
N_COUNT
END IF;
END IF;
END PROCESS;
PROCESS(CLK)
--波形判断
BEGIN
IF(CLK'EVENT AND CLK='1')THEN
IF(N_COUNT
FOUTM_BUFFER AND N_COUNT
THEN 6
FOUT
END IF;
END IF;
END PROCESS;
PROCESS(CLK)
BEGIN IF(CLK'EVENT AND CLKIN='1')THEN
CLK_COUNT
END IF;
CLKIN
END PROCESS;
PROCESS(CLKIN)
--频率及占空比的改变1
BEGIN
IF(CLK'EVENT AND CLKIN='0')THEN
IF(RST='0')THEN
M_BUFFER
N_BUFFER
ELSIF(NU='0')THEN 7
N_BUFFER
ELSIF(ND='0')THEN
N_BUFFER
ELSIF(MU='0')THEN
M_BUFFER
ELSIF(MD='0')THEN
M_BUFFER
END IF;
END IF;
END PROCESS;END BEHAVE;
2.管脚分配:
3.时序仿真图:
4.硬件电路图:
5.现象:
五、心得体会
通过这次EDA课程设计,我对课堂上所学到的理论知识的理解加深了许多,自己动脑、动手设计的能力也得到了较大提高。
在这次课程设计的过程中,我对VHDL语言有了更深的认识。通过查阅相关资料和动手设计我发现我以前对VHDL语言的认识太过肤浅,认为VHDL语言只能用于设计小型的电路系统。但有了更深刻的认识之后我发现学好VHDL语言可以设计出大规模的、功能复杂的电路系统。以前之所以会有错误的认识是因为自己对VHDL语言的了解和掌握还不够。现在仔细想想,这次课程设计使得我对VHDL语言的理解与应用能力得到了较大的提升,也让我认识到只要升入学习,提升的空间永远的存在的。
另一方面我也发现了动手实践的重要性。动手实践是理论知识得以灵活运用的必要前提,也是今后今后走上工作岗位之后能够很好的完成设计工作的技术保证。只有遇到实际问题并根据自己对课堂上获得的专业知识的理解来解决它才能真正的提高自己的能力。这也提醒我在平时的学习生活中不能一味埋头于课本知识,当今社会竞争越来越激烈,社会对人才的要求越来越全面,只有理论知识是远远不够的,必须靠动手能力做支撑。因此在学习之余我们应该积极参加各种与专业知识有关的实践活动和知识竞赛,巩固所学的理论知识,多注重培养实际动手能力和专业技术能力,这样才能在以后的工作岗位上有所作为。
数字秒表设计
一、设计目的
本设计的任务就是设计一个数字钟,要求显示格式为小时-分钟-秒钟。系统时钟选择时钟模块的50MHz,要得到1Hz时钟信号,必须对系统时钟进行50000000次分频。用S1按键作为系统时钟复位,复位后全部显示00-00-00。
二、设计原理
数码管的八个段a,b,c,d,e,f,g,h(h是小数点)都分别连接到SEG0~SEG7,8个数码管分别由八个选通信号DIG0~DIG7来选择,被选通的数码管显示数据,其余关闭。如果希望8个数码管显示希望的数据,就必须使得8个选通信号DIG0~DIG7分别被单独选通,并在此同时,在段信号输入口SEG0~SEG7加上该对应数码管上显示的数据,于是随着选通信号的扫描就能实现动态扫描显示的目的。虽然每次只有1个数码管显示,但只要扫描显示速率足够快,利用人眼的视觉余辉效应,我们仍会感觉所有的数码管都在同时显示。
三、设计主要内容
本设计要求掌握使用QuartusII设计数字系统的设计思路和设计方法。学习VHDL基本逻辑电路的综合设计应用。掌握VHDL语言的语法规范,掌握时序电路描述方法。掌握多个数码管动态扫描显示的原理及设计方法。
设计一个由共阴八位数码管作为显示、按键作为控制系统的数字钟电路,要求利用实验室设备完成系统设计并运行调试。
四、设计流程 1.程序:
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity stopwatch is
port(Clk
: in
std_logic;
--时钟输入
reset
: in
std_logic;
--复位输入
start,over
: in
std_logic;
--秒表控制输入
ledag
: out std_logic_vector(6 downto 0);--七段码管显示输出
SEL
: buffer std_logic_vector(2 downto 0)--七段码管扫描驱动);
end stopwatch;architecture behave of stopwatch is
signal Disp_Temp
: integer range 0 to 15;
signal Disp_Decode
: std_logic_vector(6 downto 0);
signal mSEC1,mSEC10 : integer range 0 to 9;
signal SEC1,SEC10
: integer range 0 to 9;
signal MIN1,MIN10
: integer range 0 to 9;
signal HOUR1,HOUR10 : integer range 0 to 9;
signal Clk1kHz
: std_logic;
signal Clk100Hz
: std_logic;
signal Start_Flag
: std_logic;
signal Music_Count
: std_logic_vector(2 downto 0);
begin
PROCESS(clk)--generate 100hz clock signal
variable cnt : INTEGER RANGE 0 TO 499999;--产生100Hz时钟的分频计数器
BEGIN
IF clk='1' AND clk'event THEN
IF cnt=499999 THEN cnt:=0;
ELSE
IF cnt
ELSE clk100hz
END IF;
cnt:=cnt+1;
END IF;
END IF;
END PROCESS;
PROCESS(clk)--generate 1khz clock signal
variable cnt1 : INTEGER RANGE 0 TO 49999;--产生1kHz时钟的分频计数器
BEGIN
IF clk='1' AND clk'event THEN
IF cnt1=49999 THEN cnt1:=0;
ELSE
IF cnt1
ELSE clk1khz
END IF;
cnt1:=cnt1+1;
END IF;
END IF;
END PROCESS;
proce(Clk100Hz)
begin
if(reset='0')then
--系统复位
mSEC1
mSEC10
SEC1
SEC10
MIN1
MIN10
HOUR1
HOUR10
Start_Flag
elsif(start='0' and Start_Flag='0')then
Start_Flag
elsif(over='0' and Start_Flag='1')then
Start_Flag
elsif(Clk100Hz'event and Clk100Hz='1')then
--正常运行
if(Start_Flag='1')then
if(mSEC1=9)then
mSEC1
if(mSEC10=9)then
mSEC10
if(SEC1=9)then
SEC1
if(SEC10=5)then
SEC10
if(MIN1=9)then
MIN1
if(MIN10=5)then
MIN10
if(HOUR1=9)then
HOUR1
if(HOUR10=9)then
HOUR10
else
HOUR10
end if;
else
HOUR1
end if;
else
MIN10
end if;
else
MIN1
end if;
else
SEC10
end if;
else
SEC1
end if;
else
mSEC10
end if;
else
mSEC1
end if;
end if;
end if;
end proce;
proce(SEL)
begin
if(HOUR1=0)then
case(SEL+1)is
when “111”=>Disp_Temp
when “110”=>Disp_Temp
when “101”=>Disp_Temp
when “100”=>Disp_Temp
when “011”=>Disp_Temp
when “010”=>Disp_Temp
when “001”=>Disp_Temp
when “000”=>Disp_Temp
end case;
else
case(SEL+1)is
when “111”=>Disp_Temp
when “110”=>Disp_Temp
when “101”=>Disp_Temp
when “100”=>Disp_Temp
when “011”=>Disp_Temp
when “010”=>Disp_Temp
when “001”=>Disp_Temp
when “000”=>Disp_Temp
end case;
end if;
end proce;proce(Clk1khz)
begin
if(Clk1khz'event and Clk1khz='1')then
--扫描累加
SEL
ledag
end if;
end proce;
proce(Disp_Temp)
--显示转换
begin
case Disp_Temp is
when 0=>Disp_Decode
--0
when 1=>Disp_Decode
--1
when 2=>Disp_Decode
--2
when 3=>Disp_Decode
--3
when 4=>Disp_Decode
--4
when 5=>Disp_Decode
--5
when 6=>Disp_Decode
--6
when 7=>Disp_Decode
--7
when 8=>Disp_Decode
--8
when 9=>Disp_Decode
--9
when 10=>Disp_Decode
---
when others=>Disp_Decode
--全灭
end case;
end proce;
end behave;
2.管脚分配:
2.时序仿真图:
4.硬件电路图:
5.现象:
五、设计总结
通过本次的课程设计,我初步了解了VHDL语言的编程思想,以及利用EDA软件进行电子电路设计的方法,通过对一个课题的分析,将实验的内容进行分块解读,具体到每一个模块的具体作用,然后将各个功能的模块通过连线进行总体的电路实现,也可以通过VHDL语言对各个模块进行组合,然后需要在程序编译成功的基础上,安装硬件,将程序下载到具体的芯片上进行硬件的实现。通过整个实验的完成,我从老师和同学那里学到了更多关于VHDL编程,仿真以及硬件实现的知识,自己以前模糊不清的地方也通过此次的课程设计了解清楚了,并且通过这次课程设计,我也锻炼了独立思考,独立操作的能力,虽然对于VHDL语言的应用我还很生疏,但是此次的课程设计却让我学到了很多,也对这门语言有了更深的理解,对EDA软件的使用有了更多的体会。
EDA课程设计报告课题名称:智力竞赛抢答器班级:11电科2班姓名:代维宽学号:201114580207同组人:闻仔逊指导老师:贾默伊任务书一、用VHDL运用层次化设计方法设计一个小型数字系统题目......
武汉理工大学《电子线路EDA》课程设计 课程设计任务书学生姓名: - 专业班级:电子科学与技术0903班 指导教师: 李成军 工作单位: 信息工程学院 题 目: 简易电子琴设计 初始条件:QU......
EDA课程设计~简易数字频率计《EDA技术》课程设计报告题目:简易数字频率计专业:本组成员:简述EDA课程设计~简易数字频率计随着数字电子技术的发展,频率测量成为一项越来越普遍的......
基于VHDL自动售货机的设计摘要基于FPGA的自动售货机的设计,主要完成的任务是使用VHDl语言,在MAX+PLUSSII上完成电路的设计,程序的编译,基本功能的完善、模拟整个自动售货机的工作......
班级:09电信 姓名:熊雷 学号:13 指导教师:赵欣湖北轻工职业技术学院 2011年3月4日 湖北轻工职业技术学院 电子设计与制作综合实训目录第一章 概述 ................................