eda课设说明书
- 格式:doc
- 大小:229.50 KB
- 文档页数:23
1 引言
1.1 课程介绍
EDA是电子设计自动化(Electronic Design Automation)缩写。在20世纪60年代中期从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。EDA技术是以计算机为工具,根据硬件描述语言VHDL(VHSIC Hardware Description language)完成的设计文件,自动地完成逻辑编译、化简、分割、综合及优化、布局布线、仿真以及对于特定目标芯片的适配编译和编程下载等工作。
几乎所有适于大学生做的数字逻辑电路实验都可以在计算机上利用EDA (Electronic
Design Automatic—电子设计自动化)软件进行设计、仿真,只有极少量外部配件不能在计算机上进行仿真。因此,在实验前期阶段,即实验预习阶段的主要应用工具是EDA软件,利用EDA软件可以设计、仿真实验课题,进行虚拟实验。通过虚拟实验使实验者在进入真实实验前就能对预做的实验有相当的了解,甚至可以预测到实验的结果。这样在实际做实验时,可以把许多设计型实验的难度降低,同时能有更多的时间让实验者动手做实验,研究问题,提高实验效率。当前数字电路设计已由计算机辅助设计进入到以计算机为主的设计时代
1.2 VHDL介绍
VHDL是一种硬件描述语言,它可以对电子电路和系统的行为进行描述,基于这种描述,结合相关的软件工具,可以得到所期望的实际电路与系统。
使用VHDL语言描述的电路,可以进行综合和仿真。然而,值得注意的是,尽管所有VHDL代码都是可仿真的,但并不是所有代码都能综合。
VHDL被广泛使用的基本原因在于它是一种标准语言,是与工具和工艺无关的,从而可以方便地进行移植和重用。VHDL两个最直接的应用领域是可编程逻辑器件(PLD)和专用集成电路(ASIC),其中可编程逻辑器件包括复杂可编程逻辑器件(CPLD)和现场可编程门阵列(FPGA)。
在VHDL中,只有在进程(PROCESS)、函数(FUNCTION)和过程(PROCEDURE)内部的语句才是顺序执行的。
目前有多种EDA工具支持采用VHDL进行电路综合、仿真以及实现。比较常见的是Altera公司的QuartusⅡ开发平台和Xilinx公司的ISE开发平台。这些平台中使用的综合工具和仿真工具通常由专业的EDA厂商提供。本次设计中所使用的平台正是QuartusⅡ7.2,它是Altera公司提供的一套集成了编译、布局布线和仿真工具在内的综合开发环境。它能完成从代码输入到编译到仿真再到物理实现的全部设计流程。
1.3 设计工具简介
Quartus II 是Altera公司的综合性PLD开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。
Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三放EDA工具。
此外,Quartus II 通过和DSP Builder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。
Maxplus II 作为Altera的上一代PLD设计软件,由于其出色的易用性而得到了广泛的应用。目前Altera已经停止了对Maxplus II 的更新支持,Quartus II 与之相比不仅仅是支持器件类型的丰富和图形界面的改变。Altera在Quartus II 中包含了许多诸如SignalTap II、Chip Editor和RTL Viewer的设计辅助工具,集成了SOPC和HardCopy设计流程,并且继承了Maxplus II 友好的图形界面及简便的使用方法。
Altera Quartus II 作为一种可编程逻辑的设计环境, 由于其强大的设计能力和直观易用的接口,越来越受到数字系统设计者的欢迎。
Altera的Quartus II可编程逻辑软件属于第四代PLD开发平台。该平台支持一个工作组环境下的设计要求,其中包括支持基于Internet的协作设计。Quartus平台与Cadence、ExemplarLogic、 MentorGraphics、Synopsys和Synplicity等EDA供应商的开发工具相兼容。改进了软件的LogicLock模块设计功能,增添 了FastFit编译选项,推进了网络编辑性能,而且提升了调试能力。
1.4测量频率的方法
常用的测量频率的方法有两种,一种是测周期法,一种是测频率法。
测周期法需要有基准系统时钟频率Fs,在待测信号的一个周期Ts内,记录基准时钟频率的周期数Ns,则被测频率可表示为 Fx=Fs/Ns
直接测频率的方法就是在一定的时间间隔内Tw内,得到这个周期信号重复变化的次数Nx,则被测频率可表示位Fx=Ns/Tw
本设计采用的是直接测频率的方法。
2 数字频率计原理
2.1系统原理
数字频率计要实现对输入信号频率进行测试,系统必须要提供一个基准频率,这里通过时钟程序产生频率为6兆赫兹的方波,系统同时输入基准频率和待测频率,在基准频率的高电平处开始记录输入频率的周期个数,待基准频率到达低电平时,停止计数,,则输入频率的周期个数就是它的频率。
该程序共分成四部分,分别为分频(fp)程序、位选(wx)程序、时钟(sz)程序和计数(js)程序。通过四个模块相互配合实现简易数字频率计的功能。
其实现过程为:欲测试的方波信号首先通过分频器模块,产生10倍,100倍,1000倍及本来方波信号共四路方波信号,四路信号送入位选功能模块,通过输入按键控制经过分频处理后的四路方波的选择,此两个模块即实现四个测试档位的功能。位选模块所选择的方波信号进入计数模块,从而得到输入方波信号的频率。时钟模块为一分频程序,是为产生一个6兆赫兹的时钟脉冲送入计数模块,用以对方波频率测试。
2.2 系统原理图
图2-1 系统原理图
本次简易数字频率计设计系统共分为四个功能模块,如上图1-2所示,分别为分频模块,位选模块,时钟模块和计数模块。四部分功能模块中,分频模块完成对于预测试的方波进行分频,输出四路分别为原方波频率的1倍,1/10倍,1/100倍,1/1000倍频率的方波,分频后的四路方波信号送入第二功能模块,即位选模块,此模块完成四个档位的设计功能,选择一路输出,送入到计数模块当中,技术模块的计数时钟频率必须为6MHz,系统的时钟频率需要经过时钟模块计数模块 位选模块 分频模块
时钟模块 进行分频得到,计数结果即为相应档位下的数值,到此,整个系统功能设计完成。
2.2 系统封装图
图2-2 系统封装图
系统封装图如图1-3所示,其中fb为待测试的方波输入端,clk为系统时钟频率输入端,rst为复位端,sel是档位选择端,当sel为00是乘1档,01是乘10档,10是乘100档,11是乘1000档。d1,d2,d3,d4分别输出四位BCD码,并通过数码管显示,分别表示千位,百位,十位,个位。当系统工作时,四个数码管所显示数据乘以档位即使所测量的方波的频率。
3 程序设计
系统通过图形输入实现,包括四个分程序,分别为分频程序,位选程序,时钟程序和计数程序。
3.1 分频程序
3.1.1 分频程序原理
该部分程序中使用process,其中敏感信号列表中为fb1,即预测试的方波信号。通过定义一个变量,以方波为时钟进行计数,该系统需要乘1档,乘10档,乘100档,乘1000档,即进行10倍,100倍,1000倍的分频,则需要程序中计数器计分别计数到5,50,500时对四路输出信号进行逻辑非运算。该程序封装图如下图3-1所示:
图3-1 分频程序封装图
其中fb1为预测方波输入信号,ao,bo,co,do分别为分频后的四路信号。该部分用以实现对预测试的方波进行10倍,100倍,1000倍的分频,以及本来方波信号共计四路方波信号的输出。
3.1.2 分频程序仿真
该部分程序仿真波形如下图3-2所示:
图3-2 分频程序仿真图
分频程序仿真参数设定fb1为输入的预测方波信号,ao,bo,co,do为四个输出信号,分别为对输入fb1进行分频后以及本来方波信号,由图中可以看出ao频率与fb1频率相同,bo频率为fb1频率的1/10,co频率为fb1频率的1/100,do频率为fb1频率的1/1000。
3.1.3分频程序源代码
library ieee;
use ieee.std_logic_1164.all;
entity fp is
port(fb1:in std_logic; --待测信号
ao,bo,co,do:buffer std_logic);
end fp;
architecture bhv of fp is
begin
ao<=fb1;
process(fb1)
variable nu,nu1,nu2:integer range 0 to 1000:=0; --计数常量
begin
if(fb1'event and fb1='1')then
nu:=nu+1;nu1:=nu1+1;nu2:=nu2+1;
if(nu=5)then --10分频
bo<=not bo;
nu:=0;
end if;
if(nu1=50)then --100分频
co<=not co;
nu1:=0;
end if;
if(nu2=500)then --1000分频
do<=not do;
nu2:=0;
end if;
end if;
end process;
end bhv;