EDA实习报告函数发生器.docx

上传人:b****5 文档编号:14800012 上传时间:2023-06-27 格式:DOCX 页数:26 大小:925.74KB
下载 相关 举报
EDA实习报告函数发生器.docx_第1页
第1页 / 共26页
EDA实习报告函数发生器.docx_第2页
第2页 / 共26页
EDA实习报告函数发生器.docx_第3页
第3页 / 共26页
EDA实习报告函数发生器.docx_第4页
第4页 / 共26页
EDA实习报告函数发生器.docx_第5页
第5页 / 共26页
EDA实习报告函数发生器.docx_第6页
第6页 / 共26页
EDA实习报告函数发生器.docx_第7页
第7页 / 共26页
EDA实习报告函数发生器.docx_第8页
第8页 / 共26页
EDA实习报告函数发生器.docx_第9页
第9页 / 共26页
EDA实习报告函数发生器.docx_第10页
第10页 / 共26页
EDA实习报告函数发生器.docx_第11页
第11页 / 共26页
EDA实习报告函数发生器.docx_第12页
第12页 / 共26页
EDA实习报告函数发生器.docx_第13页
第13页 / 共26页
EDA实习报告函数发生器.docx_第14页
第14页 / 共26页
EDA实习报告函数发生器.docx_第15页
第15页 / 共26页
EDA实习报告函数发生器.docx_第16页
第16页 / 共26页
EDA实习报告函数发生器.docx_第17页
第17页 / 共26页
EDA实习报告函数发生器.docx_第18页
第18页 / 共26页
EDA实习报告函数发生器.docx_第19页
第19页 / 共26页
EDA实习报告函数发生器.docx_第20页
第20页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

EDA实习报告函数发生器.docx

《EDA实习报告函数发生器.docx》由会员分享,可在线阅读,更多相关《EDA实习报告函数发生器.docx(26页珍藏版)》请在冰点文库上搜索。

EDA实习报告函数发生器.docx

EDA实习报告函数发生器

EDA技术

实习报告

学院:

电气信息工程学院

专业:

电子信息工程专业

班级:

信息11

姓名:

学号:

指导教师:

赵玉刚

实验日期:

2013.10.28—11.01

目录

一、引言

二、实习题目

三、实习目的

四、实习技术与要求

4.1实习技术

4.1.1FPGA简介

4.1.2VHDL简介

4.1.3VHDL程序语言基本设计

4.1.4设计工具

4.2设计要求

五、实现过程

5.1软件里程

5.2系统设计

5.3主要函数语句分析

六、功能及代码

6.1多路选择器(mux2)

6.2方波发生器

6.3三角波发生器

6.4锯齿波发生器

6.5正弦波发生器

6.6顶层文件

七、仿真及硬件测试

八、总结及心得体会

九、参考文献

函数信号发射器的VHDL设计

一、引言

函数信号发生器是一种能能够产生多种波形,如三角波、锯齿波、矩形波(含

方波)、正弦波的电路被称为函数信号发生器。

信号发生器又称信号源或振荡器,在生产实践和科技领域中有着广泛的应用。

例如在通信、广播、电视系统中,都需要射频(高频)发射,这里的射频波就是载波,把音频(低频)、视频信号或脉冲信号运载出去,就需要能够产生高频的振荡器。

在工业、农业、生物医学等领域内,如高频感应加热、熔炼、淬火、超声诊断、核磁共振成像等,都需要功率或大或小、频率或高或低的信号发生器。

本设计采用FPGA来设计制作多功能信号发生器。

该信号发生器可以产生三角波、方波。

二、实习题目:

函数信号发射器的VHDL设计

三、实习目的:

通过设计一函数发生器能够产生方波、三角波、锯齿波和三角波。

熟练掌握VHDL硬件语言的编写,并学会QuartusⅡ的基本操作过程。

运用数字逻辑电路的设计方法对学过知识的综合运用,学会撰写实习报告和总结。

四、实习技术与要求:

4.1实习技术:

4.1.1FPGA简介

FPGA(Field-ProgrammableGateArray)即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。

它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。

与传统们阵列和掩模可编程门阵列(MPGA)相比,FPGA具有很多的优点,传统门阵列可以用来设计任何电路,但是只能在工厂中一次性编程,而且还需要针对该电路的特定的掩模。

FPGA是标准通用器件。

使用其代替MPGA,可以将设计时间由几个月缩短至几小时,并且使设计更加简单,从而减少了错误修改和设计指标变更的花费。

FPGA器件在结构上,由逻辑功能块排列为阵列,它的结构可以分为三个部分:

可编程快CLB(ConfigurableLogicBlocks)、可编程I/O模块IOB(InputBlock)和可编程内部连线PI(ProgrammableInterconnect)。

CLB在器件中排列为阵列,周围有环形内部连线,IOB分布在四周的管脚上。

FPGA也存在缺点,FPGA中,每个可编程的点都有电阻和电容。

电阻和电容的使用减慢了信号的传输速度,所以FPGA的速度比传统门阵列要低,而且,FPGA中互联延迟是不可预测的。

FPGA的基本特点主要有:

   一、采用FPGA设计ASIC电路,用户不需要投片生产,就能得到合用的芯片。

   二、FPGA可做其它全定制或半定制ASIC电路的中试样片。

   三、FPGA内部有丰富的触发器和I/O引脚。

   四、FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。

   五、FPGA采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容。

    使用FPGA时,可以根据不同的配置模式,采用不同的编程方式。

加电时,FPGA芯片将EPROM中数据读入片内编程RAM中,配置完成后,FPGA进入工作状态。

掉电后,FPGA恢复成白片,内部逻辑关系消失,因此,FPGA能够反复使用。

FPGA的编程无须专用的FPGA编程器,只须用通用的EPROM、PROM编程器即可。

当需要修改FPGA功能时,只需换一片EPROM即可。

这样,同一片FPGA,不同的编程数据,可以产生不同的电路功能。

因此,FPGA的使用非常灵活。

FPGA有多种配置模式:

并行主模式为一片FPGA加一片EPROM的方式;主从模式可以支持一片PROM编程多片FPGA;串行模式可以采用串行PROM编程FPGA;外设模式可以将FPGA作为微处理器的外设,由微处理器对其编程。

4.1.2VHDL简介

VHDL(VeryHighSpeedIntegratedCircuitHardwareDescriptionLanguage,超高速集成电路硬件描述语言)是一种用来描述数字系统行为和结构的硬件描述语言,被广泛的运用于描述和仿真各种数字系统,小到几个门,大到许多复杂集成电路相连的系统。

VHDL诞生于1982年,是由美国国防部开发的一种快速设计电路的工具,目前已经成为IEEE(TheInstituteofElectricalandElectronicsEngineers)的一种工业标准硬件描述语言。

相比传统的电路系统的设计方法,VHDL具有多层次描述系统硬件功能的能力,支持自顶向下(ToptoDown)和基于库(LibraryBased)的设计的特点,因此设计者可以不必了解硬件结构。

从系统设计入手,在顶层进行系统方框图的划分和结构设计,在方框图一级用VHDL对电路的行为进行描述,并进行仿真和纠错,然后在系统一级进行验证,最后再用逻辑综合优化工具生成具体的门级逻辑电路的网表,下载到具体的FPGA器件中去,从而实现可编程的专用集成电路(ASIC)的设计。

4.1.3VHDL程序语言基本设计

一个VHDL语言的设计程序描述的是一个电路单元,这个电路单元可以是一个门电路,或者是一个计数器,也可以是一个CPU,一般情况下,一个完整的VHDL语言程序至少包括实体、结构体和程序包三个部分。

实体给出电路单元的外部输入输出接口信号和引用信息,结构体给出了电路单元的内部结构和信号的行为特点,程序包定义在设计结构体和实体中将用到的常数、数据类型、子程序和设计好的电路单元等。

第一部分是程序包,程序包是用VHDL语言编写的共享文件,定义在设计结构体和实体中将要用到的常数、数据类型、子程序和设计好的电路单元等,放在文件目录名称为IEEE的程序包库中。

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_arith.all;

useieee.std_logic_unsigned.all;

第二部分是程序的实体,定义电路单元的输入/输出引脚名称。

程序的实体名称可以任意取,但必须与VHDL程序的文件名称相同。

实体的标示符是ENTITY,实体以ENTITY开头,以END结束。

ENTITYfulladderIS

PORT(a,b,Ci:

instd_logic;

Co,s:

outstd_logic_vector(7downto0));

ENDfulladder;

其中,定义了a,b,Ci为输入信号引脚,定义Co,s为输出信号引脚。

第三部分是程序的结构体,具体描述电路的内部结构和逻辑功能。

结构体有三种描述方式,分别是行为(BEHAVIOR)描述方式、数据流(DATAFLOW)描述方式和结构描述方式。

其中数据流描述方式又被称为寄存器(RTL)描述方式。

结构体以表示ARCHITECHTURE开头,以END结尾。

结构体的名称可以任取。

architecturebehavoffulladderis

BEGIN

s<=axorbxorCi;

Co<=(aandb)or(aandCi)or(bandCi);

ENDfulladder

上面程序段中结构体的描述方式属于程序流描述方式。

以上三段程序是一个完整的VHDL程序段,实现的功能是一位全加器。

本设计中设置了两种种波形,分别是三角波、方波。

两种波形通过一个2选1数据选择器来实现选择性输出。

4.1.4设计工具简介

本次设计是基于Altera公司的QuartusII软件。

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

QuartusII支持Altera的IP核,包含了LPM/MegaFuction宏功能模块库,使用它,可以简化设计的复杂性,加快设计速度。

QuartusII平台支持一个工作组环境下的设计要求,其中包括支持基于Internet的协作设计。

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

4.1.2设计要求:

(1)产生方波、三角波、锯齿波和正弦波的VHDL模块程序

(2)输出波形选择模块程序

(3)完成顶层、底层设计,仿真出结果

(4)选择合适的D/A转换器观察波形

五、实现过程:

5.1软件设计流程:

1.弄清设计原理图。

2.分别编写四选一数字选择器、方波发生器、三角波发生器、锯齿波发生器、

正弦波发生器并作为低层文件。

3.建顶层文件,并调用底层文件,定义信号量进行列话语句。

4.生成实验原理电路图。

5.进行嵌入式逻辑分析,并改变其波形种类和频率。

5.2系统设计:

基于VHDL语言设计一个多功能信号发生器,通过选择输入信号,可以输出三角波、方波两种信号。

信号发生器的控制模块可以选用数据选择器实现,4种信号的数据选择可以使用4选1数据选择器实现。

5.3主要函数语句分析

在程序设计中,主要使用的函数语句有两种:

If-else语句和case-when语句。

这两种语句也是VHDL程序设计中常用的语句。

二者都属于流程控制语句。

流程控制语句通过条件控制开关决定是否执行一条或几条语句或重复执行一条或几条语句或跳过一条或几条语句。

IF语句是一种条件语句,它根据语句中所设置的一种或多种条件,有选择地执行指定的顺序语句。

IF语句的语句结构有以下三种:

IF条件句Then--第一种IF语句结构

顺序语句

ENDIF

IF条件句Then--第二种IF语句结构

顺序语句

ELSE

顺序语句

ENDIF

IF条件句Then--第三种IF语句结构

顺序语句

ELSIF条件句Then

顺序语句

...

ELSE

顺序语句

ENDIF

CASE语句根据满足的条件直接选择多项顺序语句中的一项执行,CASE语句的结构如下:

CASE表达式IS

When选择值=>顺序语句

When选择值=>顺序语句

...

ENDCASE

当执行到CASE语句时,首先计算表达式的值,然后根据条件句中与之相同的选择值。

执行对应的顺序语句,最后结束CASE语句。

表达式可以是一个整数类型或枚举类型的值,也可以是由这些数据类型的值构成的数组。

六、功能及代码:

6.1四选一多路选择器(choice4_2):

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;--程序包

entitychoice4_1is--定义实体

port(s:

instd_logic_vector(1downto0);--信号选择端口s

d1,d2,d3,d4:

instd_logic_vector(7downto0);--d1d2d3d4分别连接四个波形发生模块

y:

outstd_logic_vector(7downto0));--定义输出信号端口

endchoice4_1;

architecturebehavofchoice4_1is--结构体

begin

process(s)

begin

casesis--casewhen语句进行信号位的选择

when"00"=>y<=d1;

when"01"=>y<=d2;

when"10"=>y<=d3;

when"11"=>y<=d4;

whenothers=>null;

endcase;

endprocess;--进程结束

endbehav;--结构体结束

四选一选择器

6.2方波发生器

功能:

产生方波,是通过交替送出全0和全1实现的,每32个时钟翻转一次

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

useieee.std_logic_arith.all;

entityfangbois

port(clkf,rf:

instd_logic;

qf:

outstd_logic_vector(7downto0)

);

endentity;

architecturebehavoffangbois

signala:

bit;

begin

process(clkf,rf)--计数分频

variablecnt:

integerrange0to32;

begin

if(rf='0')then

a<='0';

elsifclkf'eventandclkf='1'then

ifcnt<31then--进行32分频

cnt:

=cnt+1;

else

cnt:

=0;

a<=nota;

endif;

endif;

endprocess;

process(clkf,a)--信号输出

begin

ifclkf'eventandclkf='1'then

ifa='1'then

qf<="11111111";

else

qf<="00000000";

endif;

endif;

endprocess;

endbehav;

方波原理图

6.3三角波信号发生器

功能:

产生的三角波以64个时钟为一个周期,输出q每次加减8。

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

useieee.std_logic_arith.all;

entitysanjiaobois

port(clks:

instd_logic;--时钟信号

rs:

instd_logic;--复位信号

qs:

outstd_logic_vector(7downto0));--输出信号

endentity;

architecturebehaofsanjiaobois

begin

process(clks,rs)

variabletmp:

std_logic_vector(7downto0);

variablea:

std_logic;

begin

if(rs='0')then

tmp:

="00000000";

elsifclks'eventandclks='1'then

if(a='0')then

if(tmp="11111000")then--tmp=248

tmp:

="11111111";

a:

='1';--信号计数完成,下一次改成递减

else

tmp:

=tmp+8;--递增

endif;

else

iftmp="00000111"then--tmp=7

tmp:

="00000000";

a:

='0';--信号计数完成,下一次改成递增

else

tmp:

=tmp-8;--递减

endif;

endif;

endif;

qs<=tmp;--信号输出

endprocess;

endbeha;

三角波原理图

6.4锯齿波发生器

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_arith.all;

useieee.std_logic_unsigned.all;--程序包

entityjuchibois

port(clkj,rj:

instd_logic;--定义clk、reset为输入信号

qj:

outstd_logic_vector(7downto0));--定义q为输出信号

endjuchibo;--实体

architecturebehavofjuchibois

begin

process(clkj,rj)--定义进程

variabletmp:

std_logic_vector(7downto0);--定义变量,8位

begin

ifrj='0'then--如果复位信号为0,tmp为0

tmp:

="00000000";

elsifrising_edge(clkj)then--捕捉时钟上升沿

iftmp="11111111"then--如果tmp递增至最大,增归零

tmp:

="00000000";

else--否则,tmp继续递增

tmp:

=tmp+1;

endif;

endif;

qj<=tmp;--q等于变量tmp

endprocess;--进程结束

endbehav;--结构体结束

锯齿波原理图

6.5正弦波发生器

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

useieee.std_logic_arith.all;

entitysinis

port(clksin,rsin:

instd_logic;

da:

outBIT_vector(7downto0));

endentity;

architecturebehavofsinis

signala:

bit;

begin

process(clksin,rsin)--计数分频

variablecnt:

integerrange0to256;

begin

if(rsin='0')then

a<='0';

elsifclksin'eventandclksin='1'then

ifcnt<4then--进行分频

cnt:

=cnt+1;

else

cnt:

=0;

a<=nota;

endif;

endif;

endprocess;

--process(clksin,a)

process(a)

variabletmp:

std_logic_vector(7downto0);

variabled:

BIT_vector(7downto0);

begin

--ifa='0'then

--d:

="00000000";

--elsifclksin'eventandclksin='1'then

ifa'eventanda='1'then

iftmp="00111111"then

tmp:

="00000000";

else

tmp:

=tmp+1;

endif;

casetmpis

when"00000000"=>d:

="11111111";

when"00000001"=>d:

="11111110";

when"00000010"=>d:

="11111100";

when"00000011"=>d:

="11111001";

when"00000100"=>d:

="11110101";

when"00000101"=>d:

="11101111";

when"00000110"=>d:

="11101001";

when"00000111"=>d:

="11100001";

when"00001000"=>d:

="11011001";

when"00001001"=>d:

="11001111";

when"00001010"=>d:

="11000101";

when"00001011"=>d:

="10111010";

when"00001100"=>d:

="10101110";

when"00001101"=>d:

="10100010";

when"00001110"=>d:

="10010110";

when"00001111"=>d:

="10001010";

when"00010000"=>d:

="01111100";

when"00010001"=>d:

="01100000";

when"00010010"=>d:

="01100011";

when"00010011"=>d:

="01010111";

when"00010100"=>d:

="01001011";

when"00010101"=>d:

="01000000";

when"00010110"=>d:

="00110101";

when"00010111"=>d:

="00101011";

when"00011000"=>d:

="00100010";

when"00011001"=>d:

="00011010";

when"00011010"=>d:

="00010011";

when"00011011"=>d:

="00001101";

when"00011100"=>d:

="00001000";

when"00011101"=>d:

="00000001";

when"00011110"=>d:

="00000001";

when"00011111"=>d:

="00000000";

when"00100000"=>d:

="00000000";

when"00100001"=>d:

="00000001";

when"00100010"=>d:

="00000001";

when"00100011"=>d:

="00001000";

when"00100100"=>d:

="00001101";

when"00100

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

当前位置:首页 > 农林牧渔 > 林学

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

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