函数信号发射器的VHDL设计EDA报告.docx
- 文档编号:30618252
- 上传时间:2023-08-18
- 格式:DOCX
- 页数:26
- 大小:349.45KB
函数信号发射器的VHDL设计EDA报告.docx
《函数信号发射器的VHDL设计EDA报告.docx》由会员分享,可在线阅读,更多相关《函数信号发射器的VHDL设计EDA报告.docx(26页珍藏版)》请在冰豆网上搜索。
函数信号发射器的VHDL设计EDA报告
EDA实习报告
学院:
电气信息工程学院
专业班级:
姓名:
学号:
指导教师:
实验日期:
目录
一、实习题目…………………………………………………2
二、实习目的…………………………………………………2
三、实习技术要求
1、FPGA与VHDL简介………………………………………2
2、VHDL程序语言基本设计…………………………………3
3、设计工具…………………………………………………4
4、设计要求…………………………………………………5
四、实现过程
1、设计方案选择……………………………………………5
2、设计流程…………………………………………………5
3、主要函数语句应用………………………………………6
五、功能及代码
1、四选一选择器……………………………………………8
2、方波发生器………………………………………………9
3、三角波发生器…………………………………………11
4、锯齿波发生器…………………………………………12
5、正弦波发生器…………………………………………13
6、顶层文件………………………………………………18
六、仿真及硬件测试………………………………………20
七、总结……………………………………………………23
八、参考文献………………………………………………23
函数信号发射器的VHDL设计
一、实习题目
函数信号发射器的VHDL设计
二、实习目的
通过实习,使学生能够熟练掌握
1、VHDL硬件语言的编写
2、数字逻辑电路的设计方法
3、对学过知识的综合运用
4、学会撰写实习报告和总结
三、实习技术要求:
1、FPGA与VHDL简介
FPGA(Field-ProgrammableGateArray)即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。
它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
与传统们阵列和掩模可编程门阵列(MPGA)相比,FPGA具有很多的优点,传统门阵列可以用来设计任何电路,但是只能在工厂中一次性编程,而且还需要针对该电路的特定的掩模。
FPGA是标准通用器件。
使用其代替MPGA,可以将设计时间由几个月缩短至几小时,并且使设计更加简单,从而减少了错误修改和设计指标变更的花费。
FPGA器件在结构上,由逻辑功能块排列为阵列,它的结构可以分为三个部分:
可编程快CLB(ConfigurableLogicBlocks)、可编程I/O模块IOB(InputBlock)和可编程内部连线PI(ProgrammableInterconnect)。
CLB在器件中排列为阵列,周围有环形内部连线,IOB分布在四周的管脚上。
FPGA的基本特点主要有:
1、采用FPGA设计ASIC电路,用户不需要投片生产,就能得到合用的芯片。
2、FPGA可做其它全定制或半定制ASIC电路的中试样片。
3、FPGA内部有丰富的触发器和I/O引脚。
4、FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。
5、FPGA采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容。
VHDL(VeryHighSpeedIntegratedCircuitHardwareDescriptionLanguage,超高速集成电路硬件描述语言)是一种用来描述数字系统行为和结构的硬件描述语言,被广泛的运用于描述和仿真各种数字系统,小到几个门,大到许多复杂集成电路相连的系统。
VHDL诞生于1982年,是由美国国防部开发的一种快速设计电路的工具,目前已经成为IEEE(TheInstituteofElectricalandElectronicsEngineers)的一种工业标准硬件描述语言。
相比传统的电路系统的设计方法,VHDL具有多层次描述系统硬件功能的能力,支持自顶向下(ToptoDown)和基于库(LibraryBased)的设计的特点,因此设计者可以不必了解硬件结构。
从系统设计入手,在顶层进行系统方框图的划分和结构设计,在方框图一级用VHDL对电路的行为进行描述,并进行仿真和纠错,然后在系统一级进行验证,最后再用逻辑综合优化工具生成具体的门级逻辑电路的网表,下载到具体的FPGA器件中去,从而实现可编程的专用集成电路(ASIC)的设计。
2、VHDL程序语言基本设计
一个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
上面程序段中结构体的描述方式属于程序流描述方式。
3、设计工具
本次设计是基于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)产生方波、三角波、锯齿波和正弦波的VHDL模块程序
(2)输出波形选择模块程序
(3)完成顶层、底层设计,仿真出结果
(4)选择合适的D/A转换器观察波形
四、实现过程
1、设计方案选择
设计概述:
信号的输出实质上是指电压幅度随时间的变化。
根据这个原理我们就可以设计函数信号发生器了。
FPGA里面产生的数据只能是数字信号,最终我们通过连接8bit的DA转换器就能将数字信号转换成电压信号,从而实现了信号发生器的功能。
本设计有5个模块组成,其中有:
方波发生器,三角波发生器,正弦波发生器,阶梯波发生器,4选1选择器。
方案一:
通过4选1选择器选择四个不同的波形,波形的产生利用编程的思路,方波利用全1和全0的思路,三角波和锯齿波利用等差数列的思路,正弦波利用列举计算数列想法,进行编程。
方案二:
通过4选1选择器选择四个不同的波形,波形参数利用LPM_ROM模块产生,在加入计数器进行选址
进行两个方案的对比,方案一相对于方案二编程思路简单,编程方法简单,即选择方案一。
2、设计流程
1.弄清设计原理图。
2.分别编写四选一数字选择器、方波发生器、三角波发生器、锯齿波发生器、正弦波发生器并作为低层文件。
3.建顶层文件,并调用底层文件,定义信号量进行例化语句。
4.生成实验原理电路图。
5.进行嵌入式逻辑分析,并改变其波形种类和频率。
基于VHDL语言设计一个多功能信号发生器,通过选择输入信号,可以输出三角波、方波两种信号。
信号发生器的控制模块可以选用数据选择器实现,4种信号的数据选择可以使用4选1数据选择器实现。
11
10
01
00
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语句。
表达式可以是一个整数类型或枚举类型的值,也可以是由这些数据类型的值构成的数组。
也用到了元件例化,元件例化语句结构如下:
COMPONENTjuchibo
PORT(clkj,rj:
instd_logic;
qj:
outstd_logic_vector(7downto0));
ENDCOMPONENT;
u1:
fangboPORTMAP(clkf=>CLKIN,rf=>RIN,qf=>net1);
五、功能及代码
1、四选一选择器
功能:
选通模块作用,为每一种波形分配一个通道,并为之赋予一唯一的代码,当在s端输入不同的代码时,被选中的通道打开,响应的波形发生模块产生波形,当s=00,y=d1;当s=01,y=d2;当s=10,y=d3;当s=11,y=d4。
代码:
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;--结构体结束
四选一原理图
2、方波发生器
功能:
产生方波,是通过交替送出全0和全1实现的,每256个时钟翻转一次,进行256分频
代码:
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:
integerrange0to256;
begin
if(rf='0')then
a<='0';
elsifclkf'eventandclkf='1'then
ifcnt<255then--进行分频
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;
方波原理图
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;
三角波原理图
4、锯齿波发生器
功能:
产生的锯齿波,每周期分成256分,进行q加1的递增波形,即锯齿波
代码:
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;--结构体结束
锯齿波原理图
5、正弦波发生器
功能:
产生的正弦波,设计了64个状态,就是将一个周期的正弦波分成64分,每一部分进行计算得出相应数据,并通过分频进行正弦波周期的更改,通过移位进行正弦波幅度的更改
代码:
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";
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 函数 信号 发射器 VHDL 设计 EDA 报告