EDA课程设计任意波形发生器.docx
《EDA课程设计任意波形发生器.docx》由会员分享,可在线阅读,更多相关《EDA课程设计任意波形发生器.docx(11页珍藏版)》请在冰点文库上搜索。
![EDA课程设计任意波形发生器.docx](https://file1.bingdoc.com/fileroot1/2023-6/10/568ddc84-2feb-401f-b6af-575833176a28/568ddc84-2feb-401f-b6af-575833176a281.gif)
EDA课程设计任意波形发生器
EDA课程设计--任意波形发生器
E
D
A
大
作
业
学院:
电子信息学院
专业:
通信专业102班
姓名:
许文博
学号:
41003030210
EDA技术概述
EDA是电子设计自动化(ElectronicDesignAutomation)缩写,是90年代初从CAD(计算机辅助设计)、CAM(计算机辅助制造)、CAT(计算机辅助测试)和CAE(计算机辅助工程)的概念发展而来的。
EDA技术是以计算机为工具,根据硬件描述语言HDL(HardwareDescriptionlanguage)完成的设计文件,自动地完成逻辑编译、化简、分割、综合及优化、布局布线、仿真以及对于特定目标芯片的适配编译和编程下载等工作。
典型的EDA工具中必须包含两个特殊的软件包,即综合器和适配器。
综合器的功能就是将设计者在EDA平台上完成的针对某个系统项目的HDL、原理图或状态图形描述,针对给定的硬件系统组件,进行编译、优化、转换和综合,最终获得我们欲实现功能的描述文件。
综合器在工作前,必须给定所要实现的硬件结构参数,它的功能就是将软件描述与给定的硬件结构用一定的方式联系起来。
也就是说,综合器是软件描述与硬件实现的一座桥梁。
综合过程就是将电路的高级语言描述转换低级的、可与目标器件FPGA/CPLD相映射的网表文件。
任意波形信号发生器的概述
随着信息科技的发展,波形发生器在科技社会等多个领域发挥着越来越重要作用。
采用EDA技术利用MAX+PLUS
软件平台,设计的多功能波形发生器系统,大大简化其结构,降低成本,提高了系统的可靠性和灵活性。
设计中运用计数器,数据选择器,对所需的频率进行选择和同步。
使用宏功能模块存储波形。
然后多波形进行幅度的选择。
产生满足需要的不用频率和幅度的波形。
任意波形产生器构成:
•上图为任意波形发生器的构成图,sel为控制波形输出。
•Kk为分频模块,与k步长调整波形输出的频率。
输出8位数字信号经过D/A转换输出负波形,再经过1:
1比例反向放大器输出正向波形,施密特触发电路输出方波然后经测频模块由数码管显示出频率。
仿真产生的波形如下:
正弦波
三角波
方波
示波器显示如下图:
方波
三角波
正弦波
电路模块组成部分:
分频模块
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCT74161IS
PORT(clk:
INSTD_LOGIC;
clk_div2:
OUTSTD_LOGIC;
clk_div4:
OUTSTD_LOGIC;
clk_div8:
OUTSTD_LOGIC;
clk_div16:
OUTSTD_LOGIC);
ENDCT74161;
ARCHITECTURErtlOFCT74161IS
SIGNALcount:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(clk)
BEGIN
IF(clk'EVENTANDclk='1')THEN
IF(count="1111")THEN
Count<=(OTHERS=>'0');
ELSE
Count<=count+1;
ENDIF;
ENDIF;
ENDPROCESS;
clk_div2<=count(0);
clk_div4<=count
(1);
clk_div8<=count
(2);
clk_div16<=count(3);
ENDrtl;
频率选择模块
libraryieee;
useieee.std_logic_1164.all;
entitytiaopinis
port(s1,s0:
instd_logic;
a,b,c,d:
instd_logic;
y:
outstd_logic);
endtiaopin;
architectureoneoftiaopinis
signals:
std_logic_vector(1downto0);
signaly_temp:
std_logic;
begin
s<=s1&s0;
process(s1,s0,a,b,c,d)
begin
casesis
when"00"=>y_temp<=a;
when"01"=>y_temp<=b;
when"10"=>y_temp<=c;
when"11"=>y_temp<=d;
whenothers=>y<='X';
endcase;
endprocess;
y<=y_temp;
endone;
波形选择模块
libraryieee;
useieee.std_logic_1164.all;
entityDECODERis
port(a0,a1,a2,s0,s1,s2:
instd_logic;
y0,y1,y2,y3,y4,y5,y6,y7:
outstd_logic);
endDECODER;
architectureymqofDECODERis
signala:
std_logic_vector(2downto0);
begin
a<=a2&a1&a0;
process(a,s0,s1,s2)
variabley:
std_logic_vector(7downto0);
begin
if(s2='0'ands1='0'ands0='1')then
caseais
when"000"=>y:
="11111110";
when"001"=>y:
="11111101";
when"010"=>y:
="11111011";
when"011"=>y:
="11110111";
when"100"=>y:
="11101111";
when"101"=>y:
="11011111";
when"110"=>y:
="10111111";
when"111"=>y:
="01111111";
whenothers=>y:
="XXXXXXXX";
endcase;
else
y:
="11111111";
endif;
y0<=y(0);
y1<=y
(1);
y2<=y
(2);
y3<=y(3);
y4<=y(4);
y5<=y(5);
y6<=y(6);
y7<=y(7);
endprocess;
endymq;
输出波形选择模块
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitylpmis
port(s1,s2,s3:
instd_logic;
a,b,c,d,e,f,g,h:
instd_logic_vector(7downto0);
z:
outstd_logic_vector(7downto0));
endlpm;
architectureoneoflpmis
signals:
std_logic_vector(2downto0);
begin
s<=s3&s2&s1;
process(s1,s2,s3,a,b,c,d,e,f,g,h)
begin
casesis
when"000"=>z<=a;
when"001"=>z<=b;
when"010"=>z<=c;
when"011"=>z<=d;
when"100"=>z<=e;
when"101"=>z<=f;
when"110"=>z<=g;
when"111"=>z<=h;
whenothers=>null;
endcase;
endprocess;
endone;
幅度控制模块
libraryieee;
useieee.std_logic_1164.all;
entitytiaofuis
port(a,b,c:
instd_logic;
sel:
outstd_logic_vector(2downto0));
endtiaofu;
architecturethreeoftiaofuis
begin
sel<=a&b&c;
endthree;