资源描述
《电子设计自动化》
课程设计
题目: 任意频率正弦波形发生器电路
院(系) 信息科学与工程学院
专 业 通信工程
届 别
班 级
学 号
姓 名
任课老师
摘要
本次课程设计的主要内容为采用VHDL硬件描述语言实现任意频率正弦波形发生器电路的编程,在QuartusII软件上实现仿真,并利用Altera公司的FPGA器件及其外围电路和示波器实现其实际功能。
整个系统由输入选择模块、分频模块、并行D/A转换器、频率显示模块组成。输入选择模块由8个脉冲按键组成,其中7个为数字输入,1个为选择按键;分频模块由3个计数器、1个锁存器、1个乘法器构成;并行D/A转换器幅度范围为8位;频率显示模块由3个lpm_constant和3个lpm_devide模块组成,外接3个数码管,分别显示分频后得到的频率。
波形仿真结果级硬件实现均测试成功。该波形发生器的输入采用选择输入的方式,使分频的精度得到提高(理论上分频范围为1/127~127/2),输入直接采用2进制方式输入,较为方便。D/A转换器的深度增大为1024,使最后示波器显示的波形更加平滑流畅。
关键字:任意分频 波形发生器 VHDL FPGA 示波器
1
目录
第一章 系统设计.......................................................4
一、设计要求.....................................................................................4
二、系统设计方案.............................................................................4
三、总体方案的论证与比较..............................................................5
第二章 单元电路设计.................................................5
一、输入选择模块...............................................................................5
二、分频模块.......................................................................................5
1、M计数器...................................................................................5
2、N计数器....................................................................................6
3、频率计算模块............................................................................6
三、D/A转化器.....................................................................................8
四、频率显示模块................................................................................9
第三章 软件设计..........................................................9
一、软件设计平台................................................................................9
二、程序流程方框图............................................................................10
三、实现的功能....................................................................................10
四、测试仪器........................................................................................10
第四章 系统测试.........................................................10
一、系统性能指标...............................................................................10
二、功能的测试方法、步骤................................................................11
三、仪器设备名称、型号....................................................................11
四、测试数据........................................................................................11
第五章 总结与反思......................................................12
参考文献........................................................................13
附录................................................................................13
第一章 系统设计
一、 设计要求
正弦波输出,幅度范围8位(并行D/A转换器DAC0832);输出信号频率可任意设置;十进制显示输出正弦波的频率。实现波形仿真并通过实验箱显示频率,示波器显示频率和波形,且示波器上所示频率应与实验箱上显示一致。
二、 系统设计方案
系统设计思路:
图1.1 原理图
图1.2 顶层图形文件
图1.1为波形发生器整体系统设计原理框图,共分为输入选择模块、分频模块、D/A转换器、频率显示模块四个部分。其中输入选择模块包括数值输入和选择按键(所输入的数是送给M或N);分频模块是利用输入的M和N对原始频率进行分频,其包括L.M.N三个计数器和D锁存器组成,D/A转换器的功能是将每个脉冲对应一个电压,众多脉冲对应众多电压,便在示波器上显示初连续的正弦波,(点数越多,波形越光滑流畅);显示模块利用数码显示管将最后示波器上显示的频率显示出来。
三、 总体方案的论证与比较
整个分频模块设计,均基于F=f*N/1024/M这一基本公式(F为最后输出频率,f为原始输入频率),有2种思路可供选择。(1)M计数器是一个每次只增加一的计数器,f接1024HZ的频率,那么输入就只有N一个,范围可从0~255,N输入的数值便是数码管和示波器最终显示的数值;、(2)M.N都设置为任意分频计数器,f也可接任意频率,最后频率F等于f*N/1024/M。 本设计选择后者,原因在于前者若f接1024HZ外部频率时,能做到输入与输出一致,但频率范围仅为0~255,与设置的0~999相差甚远,若接其他数值为外部频率时,无法做到输入与输出一致,且输出的频率是不连续的,如接入外部频率为16384HZ, 当N=1,F=16; 当N=2,F=32,而16~32间的频率值都是无法输出的,这样并没有做到真正的“任意频率”。综上所述,后者是更优的选择。
第二章 单元电路设计
一、 输入选择模块
原理分析: 该模块为由下降沿或上升沿锁存输入数值的2选1选择器,由h端输入数值,当S出现上升沿时h的值赋给j,当s出现下降沿时h的值赋给k。最终j的值将赋给M,而k的值将赋给N。H.j.k均是7位的2进制数,数值范围为0~127。
输入选择模块的波形仿真图如下图所示:
输入选择器波形仿真结果
二、 分频模块
分频模块
整个分频模块由L.M.N三个计数器,一个D锁存器,一个除法模块,调用一个乘法模块lpm_mult组成,下面就分别每一板块做详细介绍。
1) 、M计数器
M计数器将计数的最大值设置为(M-1),当计数到(M-1)时COUT向前进位,此时计数归零,从头开始。将COUT接入下一板块的clk2,此时clk2的频率是clk频率的1/M,实现分频。下图为该计数器的波形仿真结果,取M=4,COUT的频率为clk频率的1/4。
M计数器波形仿真结果
2)、N计数器
N计数器的计数方式不是一个脉冲到来数值加一,所加的数值为N。这相当于输入端每加一,输出端加N,即输入一个脉冲,输出N个脉冲,输出频率为输入频率的N倍。下图为该计数器的波形仿真结果,取N=4,由图可见输入端每增一,输出端增加4,实现4倍频。
N计数器波形仿真结果
3)、频率计算模块
频率计算模块
该模块中L为常规计数器,它的其中一个输入端clK与M计数器的输出端COUT相接,故该模块输入频率为原始频率经M分频后的频率,它的另一个输入端EN直接接实验箱上0.5HZ脉冲,该脉冲周期为2秒,高低电平分别1秒,而EN端只有高电平时计数器才工作,故1秒内计算出的脉冲数恰好等于其频率。
D为下降沿触发的锁存器,它的一个输入端clk与EN相接,当EN 在高电平时计完1秒的脉冲数,跳为低电平时,锁存器立即将L得到的值存起来以便接下来的板块对该值进行处理。若不适用锁存器,让L和A直接相连,由于L中的输出端只在EN向低电平跳变时才增加到正确值,此时L会将该值输出,但由于EN跳变太快,以致L来不及输出或A还未对其进行处理,EN已回到低电平,L的输出端CQ已归零,故最终的输出频率始终为零。所以D锁存器是必不可少的。
板块A只完成一个操作:将经M分频后的频率除以1024,1024为本设计中D/A转换器的深度。完成到此步骤,此时的输出频率经M和1024分频,只需将该频率乘以N倍便完成全部分频。之所以不把*N这一步放在板块A中完成,原因在于:VHDL中/、*等运算要求颇为严格,所乘的数和所除的数要为2的整数次方,故N不可任意取值。为了解决这个问题,加入一个乘法模块,将其中的一个成乘数接到N端,如此,N的值不会受限。
以下是频率设计模块波形仿真图,由图可知,只要EN有下降沿,输出端便能将正确频率永久地保存下来。
频率计算模块波形仿真结果
三、 D/A转换器
该lpm_rom模块是QuartusII软件中自带模块,需要时可直接调用,其输入为转换器的深度,即一个波形周期内横向点数,故该值越大,波形越光滑流畅。输出为转换器幅度。
四、 频率显示模块
频率输出模块
由于本设计中将输出频率的范围设置为0~999,只需要3个输出,分别为百位、十位、 个位,分别在3个数码管上显示。采用不断模10的方式将每一位数逐个分离,上面已说明VHDL中使用“/”的局限性,故在此调用软件中原有的lpm_divide和lpm_constant模块来完成模10。如输入一个三个数128,经第一个模10模块后,输出端a得到个位8,另一个输出端得到商12,并将12送给下一个模10模块2,该模块的输出端b得到十位2,另一输出端得到商1,并将这个1送给下一个模10模块,当1模10,余数就为1,输出端c得到百位。下图为频率输出模块波形仿真结果。
频率输出模块波形仿真图
第三章 软件设计
一、 软件设计平台:QuartusII
二、 程序流程方框图:
三、 实现的功能
本设计能够对接入的实验箱上的频率进行1/127~127/2(M最小只能取到2)范围的分频,M.N均为外部输入数值,8个按键中7个按键为数值输入,1个为选择键,决定将输入的值给M或是N;最终分频后的频率范围为0~999(最大频率范围可为0~99999999,如有需要,可对相应程序的数值设定做修改,在频率输出部分增加相应模10模块即可),本设计能在示波器上成功显示出平滑流畅且不同频率的正弦波形。
四、 程序清单
输入选择器程序;
M计数器程序;
N计数器程序;
L计数器程序;
D锁存器程序;
除法模块a程序;
第四章 系统测试
一、 系统性能指标
二、 功能的测试方法、步骤
将仿真成功且管脚分配好的程序下载到芯片中,选择模式5,将EN 对应的管脚接0.5HZ的脉冲,M模块上clk接任意频率的脉冲,将示波器的输入和接地端接到实验箱上相应地方,打开实验箱和示波器,输入规定范围内的N.M值,观察示波器和数码箱上显示的频率是否相同且示波器上正弦波形是否随M.N的输入而变化。
三、 仪器设备名称、型号
Altera公司CycloneII系列EP2C5T144C8芯片
实验箱
示波器
四、 测试数据
完整系统波形仿真图:
波形分析:由图中可看出,clk接入2048HZ脉冲,EN接入0.5HZ脉冲。先给数值输入口h输入2,选择输入键s输入一个上升沿,输入的“2”赋给M,此时再给数值输入口h输入16,键s输入一个下降沿,输入的“16”赋给N,当EN出现下降沿时出现分频后的频率。可知此时的M.N对clk的原始频率进行了1/128的分频(lpm_rom深度为1024),故输出值应为16HZ,图中可看出十位b为1,个位c为6,结果正确。
第五章 总结与反思
本设计通过M.N两个计数器完成对输入频率分频,分频范围是1/127~127/2,通过波形仿真和硬件测试表明本设计达到标准。但其仍有不足之处:由于本设计使用模块较多,最后的顶层图形文件显得杂乱繁琐,如图1.2所示。此时应对联系紧密的小模块进行封装,这样可使最后的顶层图形文件简明有序,便于分析,以后应注意。(注:老师,在做课设时还没有讲封装,望原谅哈)
参考文献
1、潘松、黄继业EDA技术与VHDL(第三版)北京:清华大学出版社,2009
2、.baidu.
附录:
输入选择器程序;
M计数器程序;
N计数器程序;
L计数器程序;
D锁存器程序;
1、 输入选择器程序
library ieee;
ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity xuanze is
port(s: in std_logic;
h :in std_logic_vector(6 downto 0);
j,k : out std_logic_vector(6 downto 0));
end xuanze;
architecture one of xuanze is
begin
process(s,h)
begin
if s'event and s='1' then j<=h;
elsif s'event and s='0' then k<=h;
end if;
end process;
end;
2、M计数器程序
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity m is
port(clk,rst,en : in std_logic;
m :in std_logic_vector(6 downto 0);
COUT : out std_logic);
end m;
architecture one of m is
signal count:std_logic_vector(6 downto 0);
begin
process(clk,rst,en,m)
begin
if rst ='1' then count<=(others=>'0');
elsif clk'event and clk='1' then
if en = '1' then
if count<m-1 then count<=count+1;
else count<=(others=>'0');
end if;
end if;
end if;
IF count =m-1 THEN COUT <= '1';
ELSE COUT <= '0';
END IF;
end process;
end;
3、 N计数器程序
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity n is
port(clk,rst,en: in std_logic;
n:in integer range 0 to 127;
cq:out integer range 0 to 1023);
end;
architecture one of n is
signal count:integer range 0 to 1023;
begin
process(clk,rst,en,n)
begin
if rst ='1' then count<=0;
elsif clk'event and clk='1' then
if en = '1' then
if count<1023 then count<=count+n;
else count<=0;
end if;
end if;
end if;
cq<=count;
end process;
end;
4、L计数器程序
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity L is
port(clk,en: in std_logic;
CQ:out integer range 0 to 60000);
end L;
architecture one of L is
signal p:integer range 0 to 60000;
begin
process(clk)
begin
if clk'event and clk='1' then
if en='1' then p<=p+1;
else p <=0;
end if;
end if;
end process;
CQ<=p;
end;
5、D锁存器程序
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity d is
port(clk: in std_logic;
t:in integer range 0 to 60000;
q:out integer range 0 to 60000);
end d;
architecture one of d is
begin
process(clk)
begin
if clk'event and clk='0' then
q<=t;
end if;
end process;
end;
引脚分配
读书的好处
1、行万里路,读万卷书。
2、书山有路勤为径,学海无涯苦作舟。
3、读书破万卷,下笔如有神。
4、我所学到的任何有价值的知识都是由自学中得来的。——达尔文
5、少壮不努力,老大徒悲伤。
6、黑发不知勤学早,白首方悔读书迟。——颜真卿
7、宝剑锋从磨砺出,梅花香自苦寒来。
8、读书要三到:心到、眼到、口到
9、玉不琢、不成器,人不学、不知义。
10、一日无书,百事荒废。——陈寿
11、书是人类进步的阶梯。
12、一日不读口生,一日不写手生。
13、我扑在书上,就像饥饿的人扑在面包上。——高尔基
14、书到用时方恨少、事非经过不知难。——陆游
15、读一本好书,就如同和一个高尚的人在交谈——歌德
16、读一切好书,就是和许多高尚的人谈话。——笛卡儿
17、学习永远不晚。——高尔基
18、少而好学,如日出之阳;壮而好学,如日中之光;志而好学,如炳烛之光。——刘向
19、学而不思则惘,思而不学则殆。——孔子
20、读书给人以快乐、给人以光彩、给人以才干。——培根
展开阅读全文