EDA分频器设计论文

萌到你眼炸
989次浏览
2020年08月14日 23:27
最佳经验
本文由作者推荐

陕西省招办-2012年入党思想汇报


课程设计说明书
1 引言
简易多功能信号发生器是信号发生器的一种,在生 产实践和科研领域中有着
广泛的应用。在研制、生产、测试和维修各种电子元件、部件以及整机设备时,
都需要有信号源,由它产生不同频率不同波形的电压、电流信号并加到被测器件
或设备上,用其 他仪器观察、测量被测仪器的输出响应,以分析确定它们的性能
参数。信号发生器是电子测量领域中最基 本、应用最广泛的一类电子仪器。它可
以产生多种波形信号,如正弦波,三角波,方波和锯齿波等,因而 广泛用于通信、雷
达、导航、宇航等领域。
本设计是采用VHDL来实现的简易多功能信号发 生器。它能产生正弦波,三
角波,方波和锯齿波。且对各种波形的要求如下:
(1)根据按键选择不同的波形(实现正弦波,三角波,方波和锯齿波);
(2)各波形的频率范围为100Hz-20KHz;
(3)各波形频率可调(通过按键控制频率的变化,步进值为500Hz);
(4)用LED数码管实时显示输出波形的频率值;
(5)用按键控制实现输出信号的幅度调节(幅度调节为2.5V和5V)。

















1


课程设计说明书
2 设计原理
2.1设计思想
信号发生器产生、控制和显示的总体结构图如图所示

时钟

频率








外部输入一个 50MHZ的时钟频率,经过频率控制单元控制其频率在要求的
范围内,由4选1数据选择器实现对输出 波形的选择,再通过DA转换模块,
将数字信号转换成模拟信号在示波器上显示出来。
选择
单 元
图1 总体结构图
频率控
制单元
四种
波形
DA 示波

2.2 总体原理图
基于VH DL语言设计一个简易多功能信号发生器,通过选入输入信号,可
以输出正弦波、三角波、方波和锯齿波 四种波形信号。信号发生器的控制模块可
以用数据选择器实现,四种信号的信号选择可以用4选1数据选 择器实现。同时
本设计使用原理图的方法,对正弦波、三角波、方波和锯齿波和4选1数据选择
器元件进行调用。
简易多功能信号发生器的原理图如下:










2


课程设计说明书







clk
b[1..0]
high
anjian
INPUT
VCC
INPUT
VCC
INPUT
VCC
INPUTVCC
a[1..0]
INPUT
VCC
sel
INPUTVCC
zx
clk
sel
dout0[7..0]
inst3< br>jc
xuanze
clk
sel
fenpin
addr[5. .0]shu[12..0]
clk
fb
inst2
clk
sel< br>inst
dout2[7..0]
clk2
dout1[7..0]
a [1..0]
dout0[7..0]
dout1[7..0]
dout2[7..0 ]
dout3[7..0]
inst7
b[7..0]
OUTPUT
c[7..0]
clk
b[1..0]
h
l
inst4








low
shu< br>address[5..0]s[12..0]
wan[3..0]
qian[3..0 ]
bai[3..0]
shi[3..0]
ge[3..0]
OUTPUT< br>inst6
sj
clk
sel
dout3[7..0]
ins t5
wan[3..0]
qian[3..0]
bai[3..0]
shi[ 3..0]
ge[3..0]
inst1
OUTPUT
OUTPUT
OUTPUT
OUTPUT

图2 总体原理图
2.3 总体功能介绍
由总体原理图可知,总体有六个输入,六个个输出。其中一个时钟输入
端clk,以一个 频率调节输入端b,一个使系统输出波形的频率为最大的控制输
入端h和一个使系统输出波形的频率为最 小的控制输入端l,sel进行幅度调节,
一个波形选择输入端a,波形输出b,五个频率显示数码管。
总体功能:由clk输入一个100MHZ的时钟脉冲,由high和low选择使系统
输出波 形的频率为最大或使系统输出波形的频率为最小。由b控制频率的加减,
产生一个地址数,再由分频数模 块把地址数转化成一个分频数给分频模块,分频
模块对clk分频产生相应的输出频率。把产生的频率分 别送给四种波形的clk,
通过波形选择模块进行波形选择,由b输出相应的波形。幅值的大小由sel 控制,
使幅值为2.5V或5V。
3 各个模块的实现
3.1正弦波
正 弦波的产生思想是将对模拟波形采样后的编码存入定义好的ROM中,再
根据时钟循环的将这些编码顺序 输出,在输出端将经过数模转换器转换后的模拟
信号接入示波器即可显示正弦波形。
3


课程设计说明书





zx
clk
sel
dout0[7..0]
inst3

图3 正弦波模块
功能介绍:包括两个输入clk和sel,一个输出dout0。由cl k输入一个时钟
脉冲,sel进行幅度调节,当sel='1'时,波形幅值为2.5V,当sel=' 0'时,波形幅
值为5.0V,每当clk的一个上升沿,由dout0输出一个数。当有64个上升沿 时,
就会输出一个完整的正弦波形。
3.2三角波
三角波的产生思想是将对模拟波 形采样后的编码存入定义好的ROM中,再
根据时钟循环的将这些编码顺序输出,在输出端将经过数模转 换器转换后的模拟
信号接入示波器即可显示三角波形。




sj
clk
sel
dout3[7..0]
inst5
图4 三角波模块
功能介绍:包括两个输入clk和sel,一个输出dout3。由clk输入一个时钟< br>脉冲,sel进行幅度调节,当sel='1'时,波形幅值为2.5V,当sel='0'时,波形幅< br>值为5.0V,每当clk的一个上升沿,由dout3输出一个数。当有64个上升沿时,
就会 输出一个完整的三角波形。
3.3方波
方波波的产生思想是将对模拟波形采样后的编码存入 定义好的ROM中,再
根据时钟循环的将这些编码顺序输出,在输出端将经过数模转换器转换后的模拟< br>信号接入示波器即可显示方波波形。




fb
clk
sel
dout2[7..0]
inst6
图5 方波模块
功能介绍:包括两个输入clk和sel,一个输出dout2。由clk输入一个时钟脉冲,sel进行幅度调节,当sel='1'时,波形幅值为2.5V,当sel='0'时,波形幅4


课程设计说明书
值为5.0V,每当clk的一个上升沿 ,由dout2输出一个数。当有64个上升沿时,
就会输出一个完整的方波波形。
3.4锯齿波
锯齿波的产生思想是将对模拟波形采样后的编码存入定义好的ROM中,再 < br>根据时钟循环的将这些编码顺序输出,在输出端将经过数模转换器转换后的模拟
信号接入示波器即 可显示锯齿波形。




inst4
jc
clk
sel
dout1[7..0]
图6 锯齿波模块
功能介绍:包括两个输入clk和sel,一个输出dout1。由clk输入一个时钟< br>脉冲,sel进行幅度调节,当sel='1'时,波形幅值为2.5V,当sel='0'时,波形幅< br>值为5.0V,每当clk的一个上升沿,由dout1输出一个数。当有64个上升沿时,
就会 输出一个完整的锯齿波形。
3.5按键模块




a njian
clk
b[1..0]
h
l
addr[5..0]
inst8
图7 按键模块
功能介绍:在按键输入识别模块中共有4个输入端。其中一 个时钟输入端
clk,以一个频率调节输入端b,一个使系统输出波形的频率为最大的控制输入端
h和一个使系统输出波形的频率为最小的控制输入端l。本课程设计要求输出波
形的频率在每按一次相 应的按键时,就增加或减少500Hz。而实验室的硬件设备
上的按键都是拨码是按键,即按键按下后一 直有效,这显然不能满足要求。于是
按键输入识别模块中用如下的代码实现按键没按一次都能有效的功能 。
if b0='0' and b1='1' then
if c=40 then
cnt<=0;
else c<=c+1;
end if;
elsif b0='1' and b1='0' then
5


课程设计说明书
if c=40 then
c<=0;
else c<=c+1;
end if;
以上代码实现的只是频率增长的功能,同理就可以实现频率减小的功能
当按下按键输入识别模块中分别使整个系统输出最大h和最小频率l的波形
的控制输入端时 ,在按相应的使频率增减的按键则实现频率从最大或最小开始
增加或减少的功能。
3.6分频数模块






ins t1
shu
address[5..0]s[12..0]
wan[3..0]
qian[3..0]
bai[3..0]
shi[3..0]
ge[3..0]< br>图8 分频数模块
功能介绍:在分频数产生模块中有一个输入端address接收从按键 输入模块
中输出地对频率的控制信号的输入端,一个分频数输出端s,五个相应的接数码
管以显 示系统输出信号的频率的输出端。当分频数产生模块的输入端接收从按键
输入模块中输出地对频率的控制 信号后,便产生相应的分频数送到输出端,同时
将与分频数相应频率送到与数码管相接的输出端。
3.7分频模块
分频模块有一个简单的分频器设计。




inst2
fenpin
shu[12..0]
clk
c lk2
图9 分频模块
功能介绍:在分频模块中有一个系统时钟输入端clk,一个分频 数输入端shu
和一个频率输出端clk2。分频器的功能主要是根据分频数产生相应的输出频率。
3.8选择模块
选择模块以用数据选择器实现,四种信号的信号选择可以用4选1数据选择
6


课程设计说明书
器实现




xuanze
a[1..0]
dout0[7..0]
dout1[7..0]dout2[7..0]
dout3[7..0]
inst7
b[7..0]图10 选择模块
功能介绍:在该模块为4选1的数据选择器,包括4个数据输入端dout0、
dout1、 dout2、dout3,一个数据选择输入端a和一个数据输出端b。其功能是根
据数据选择输入端输 入的数据来选择相应的数据送到输出端。从而实现数据的选
择输出。
当a为时,b输出为dout0,即输出为正弦波;
当a为时,b输出为dout1,即输出为锯齿波;
当a为时,b输出为dout2,即输出为方波;
当a为时,b输出为dout3,即输出为三角波;
4波形仿真
4.1顶层文件仿真
在Quartus II软件输入上述代码,再通过编译和时序仿真,可得到如下的仿
真波形。









图11 顶层文件仿真
上图中的输出制式模拟信号各采样点的数字编码,由于没有经过数模转换,
输出 结果就如图中所示。当将程序下载到硬件后,在示波器上就可以显示波形了。
4.2正弦波的仿真
在Quartus II软件输入上述代码,再通过编译和时序仿真,可得到如下的仿
7


课程设计说明书
真波形。



图12 正弦波的仿真
上图中的输出制式模拟信号各采样点的数字编码,由于没有经过数 模转换,
输出结果就如图中所示。当将程序下载到硬件后,在示波器上就可以显示正弦波
形了。
4.3.三角波的仿真
在Quartus II软件输入上述代码,再通过编译和时序仿真,可得到如下的仿
真波形。




图13 三角波的仿真
上图中的输出制式模拟信号各采样点的数字 编码,由于没有经过数模转换,
输出结果就如图中所示。当将程序下载到硬件后,在示波器上就可以显示 三角波
形了。
4.4方波的仿真
在Quartus II软件输入上述代码,再通过编译和时序仿真,可得到如下的仿
真波形。




图14 方波的仿真
上图中的输出制式模拟信号各采样点的数字编码 ,由于没有经过数模转换,
输出结果就如图中所示。当将程序下载到硬件后,在示波器上就可以显示三角 波
形了。
4.5锯齿波的仿真
在Quartus II软件输入上述代码,再通过编译和时序仿真,可得到如下的仿
8


课程设计说明书
真波形。




图15 锯齿波的仿真
上图中的输出制式模拟信号各采样点的数字编码,由于没有经过数模 转换,
输出结果就如图中所示。当将程序下载到硬件后,在示波器上就可以显示锯齿波
波形了。
4.6按键模块的仿真
在Quartus II软件输入上述代码,再通过编译和时序仿真,可得到如下的仿
真波形。




图16 按键模块的仿真
上图中的输出制式模拟信号各采样点的数字 编码,由于没有经过数模转换,
输出结果就如图中所示。当将程序下载到硬件后,就可以通过按键选择需 要的频
率了。
4.7分频数模块的仿真
在Quartus II软件输入上述代码,再通过编译和时序仿真,可得到如下的仿真波
形。






图17 分频数模块的仿真
上图中的输出制式 模拟信号各采样点的数字编码,由于没有经过数模转换,
输出结果就如图中所示。当将程序下载到硬件后 ,就可以产生分频数。
9


课程设计说明书
4.8分频模块的仿真
在Quartus II软件输入上述代码,再通过编译和时序仿真,可得到如下的仿
真波形。



图18 分频模块的仿真
上图中的输出制式模拟信号各采样点的数字编码,由于 没有经过数模转换,
输出结果就如图中所示。当将程序下载到硬件后,就可以实现分频功能了。
4.9选择模块的仿真
在Quartus II软件输入上述代码,再通过编译和时序仿真,可得到如下的仿
真波形。





图19 选择模块的仿真
上图中的输出制式模拟信号各采 样点的数字编码,由于没有经过数模转换,
输出结果就如图中所示。当将程序下载到硬件后,就可以实现 选择波形的功能了。
5硬件测试
本课程设计是简易多功能信号发生器,其总共有6个输入端 和6个输出端。
具体的输入输出端可见图1中所示。
根据引脚所锁定图将系统中的各个输入输 出端口锁定到合适的引脚上。需要
注意的是本系统用到了数码管显示,所以应该选定实验箱的模式5。另 外,本实
验输入的时钟频率是100MHz。
当引脚锁定完毕后,将程序下载到试验箱中,连 好示波器,在输入端输入相
应的值即可得到相应的输出波形。具体的硬件仿真波形如下:
10


课程设计说明书
在clk端输入100MHz的时钟信号,当图2 的原理图中的a[1..0]输入“00”
时得到的是正弦波波形,如图所示。改变sel的值可以该变 输出波形的幅值。按
频率控制单元中介绍的方法可以实现波形频率的改变。
图20 正弦波波形
在clk端输入100MHz的时钟信号,当图2的原理图中的a[1..0]输入“01 ”
时得到的是锯齿波波形,如图11所示。改变sel的值可以该变输出波形的幅值。
按频率控 制单元中介绍的方法可以实现波形频率的改变。










图21 锯齿波波形
在clk端输 入100MHz的时钟信号,当图1的原理图中的a[1..0]输入“10”
时得到的是方波波形,如 图12所示。改变sel的值可以该变输出波形的幅值。
按频率控制单元中介绍的方法可以实现波形频率 的改变。





11


课程设计说明书












22

方波波形
在clk端输入100MHz的时钟信号,当图1的原理 图中的a[1..0]输入“11”
时得到的是三角波波形,如图12所示。改变sel的值可以该变输 出波形的幅值。
按频率控制单元中介绍的方法可以实现波形频率的改变。
















图 三角波波形
12


课程设计说明书
6结论
EDA技术是当前数字系统设计领域比较火 热的一种工具,他可以大大缩短
设计需要的时间,降低成本的同时也提高了系统的稳定性。使用VHDL 语言描
述硬件系统使得EDA技术有了更为广阔的空间。本设计使用了基于Altera公司
的 开发软件工具Quartus II,本系统即实现了可以输出三种波形的简易多功能波
形发生器,仿真 结果证明,该设计正确有效,可以作为制作实物的理论依据。 对
于EDA技Quartus II进行 了系统的设计和仿真。简易波形发生器在生活中各个
场合都有着大量的使用术我一直都有着浓厚的兴趣, 借做课设的机会,认真的研
究了一下这么科学。发现EDA技术比我们想象中的要有很大的难度。里面有 很
多的思想来源于信息电子技术辑算法的设计,需要有很强的C语言编程功底。
学习一门知识要 从最基本的体系构架开始,倘若一开始就从顶层设计入手,就会
造成很多基本原理、基本概念上的偏差, 甚里面的基本知识,包括电路的概念以
及寄存器传送的基本知识。VHDL语言与C语言有很大的不同, 但是C语言的
编程思想也可以移植到VHDL语言当中来,尤其是一些逻至会拖延设计的时间,
事倍功半。虽然可设完成了,但我意识到,我对于这门学科只是停留在入门的阶
段,想要有更大的发展, 要深入的研究,还要更多的努力和实践。











13


课程设计说明书
参考文献
[1] 潘松,黄继业. EDA技术实用教程.北京:科学出版社,2002.
[2] 甘历.VHDL应用与开发实际.北京:科学出版社,2003.
[3] 孙延鹏,张芝贤.VHDL与可编程逻辑器件应用.航空工业出版社,2006.
[4] 赵明富,李立军,石新锋,沈献博.EDA技术基础.北京大学出版社,
2007.
[5] 黄仁欣.EDA技术实用教程.清华大学出版社,2006.


























14


课程设计说明书
附录
正弦波
library ieee;
use _logic_;
entity zx is
port(clk,sel:in std_logic;dout0:out integer range 0 to 255);
end zx;
architecture bhv of zx is
type mem_type is array(0 to 63) of integer range 0 to 255;
constant
mem:mem_type:=(255,254,252,2 49,245,239,233,225,217,207,197,186,174,162,150,137,
124,112,99,87,75,64,53,43,34,26,19,13,8, 4,1,0,0,1,4,8,13,19,26,34,43,53,64,75,8
7,99,11 2,124,137,150,162,174,186,197,207,217,225,233,239, 245,249,252,254,255);
signal address:integer range 0 to 63;
begin
process(clk)
begin
if clk'event and clk='1' then
if address>63 then
address<=0;
else
if sel='1' then
address<=address+1;
dout0<=(mem(address))2;
else
address<=address+1;
dout0<=mem(address);
end if;end if;end if;end process;end bhv;
方波
library ieee;
use _logic_;
entity fb is
port(clk,sel:in std_logic;
15


课程设计说明书
dout2:out integer range 0 to 255);
end fb;
architecture bhv of fb is
type mem_type is array(0 to 63) of integer range 0 to 255;
constant
mem:mem_type:=(255,255,255,255,25 5,255,255,255,255,255,255,255,255,255,255,2
55,
255,255,255,255,255,255,255,255,255,255,255,25 5,255,255,255,255,0,0,0,0,0,0,
0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
signal address:integer range 0 to 63;
begin
process(clk)
begin
if clk'event and clk='1' then
if address>63 then
address<=0;
else
if sel='1' then
address<=address+1;
dout2<=(mem(address))2;
else
address<=address+1;
dout2<=mem(address);
end if;end if;end if;end process;end bhv;
三角波
library ieee;
use _logic_;
entity sj is
port(clk,sel:in std_logic;
dout3:out integer range 0 to 255);
end sj;
architecture bhv of sj is
type mem_type is array(0 to 63) of integer range 0 to 255;
constant
16


课程设计说明书
me m:mem_type:=(0,8,16,24,32,40,48,56,64,72,80,88,96, 104,112,120,128,136,144,15
2,160,168,176,184,19 2,200,208,216,224,232,240,248,255,248,240,232,224, 216,208,2
00,192,184,176,168,160,152,144,136,12 8,120,112,104,96,88,80,72,64,56,48,40,32,24
,16 ,8);
signal address:integer range 0 to 63;
begin
process(clk)
begin
if clk'event and clk='1' then
if address>63 then address<=0;
elsef sel='1' then
address<=address+1;
dout3<=(mem(address))2;
else
address<=address+1;
dout3<=mem(address);
end if;end if;end if;end process;end bhv;
锯齿波
library ieee;
use _logic_;
entity jc is
port(clk,sel:in std_logic;
dout1:out integer range 0 to 255);
end jc;
architecture bhv of jc is
type mem_type is array(0 to 63) of integer range 0 to 255;
constant
mem:mem_type:=(0,4,8,12,16,20,24, 28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,8
8,92,96,100,104,108,112,116,120,124,128,132,136,14 0,144,148,152,156,160,164,168
,172,176,180,184, 188,
192,198,200,204,208,212,216,220,224,228,2 34,238,242,246,250,255);
signal address:integer range 0 to 63;
begin
process(clk)
17


课程设计说明书
begin
if clk'event and clk='1' then
if address>63 then
address<=0;
else
if sel='1' then
address<=address+1;
dout1<=(mem(address))2;
else
address<=address+1;
dout1<=mem(address);
end if;end if;end if;end process;end bhv;
按键
library ieee;
use _logic_;
entity anjian is
port(clk:in std_logic;
b:in std_logic_vector(1 downto 0);
h:in std_logic;
l:in std_logic;
addr:out integer range 0 to 40);
end anjian;
architecture bhv of anjian is
signal c:integer range 0 to 40 :=0;
signal b0,b1,b2,b3:std_logic;
begin
process(h,l,clk,b0,b1)
begin
if clk'event and clk='1' then
b0<=b(0);b1<=b0;b2<=b(1);b3<=b2;
if h='1' then c<=40;
elsif l='1' then c<=0;
elsef b0='0' and b1='1' then
if c=40 then c<=0;
18


课程设计说明书
else c<=c+1;end if;
elsif b0='1' and b1='0' then
if c=40 then c<=0;
else c<=c+1;end if;
elsif b2='0' and b3='1' then
if c=0 then c<=40;
else c<=c-1;
end if;
elsif b2='1' and b3='0' then
if c=0 then c<=40;
else c<=c-1;
end if;end if;end if;end if;end process;
addr<=c;
end bhv;
分频数
library ieee;
use _logic_;
entity shu is
port(address:in integer range 0 to 40;
s:out integer range 0 to 7812;
wan,qian,bai,shi,ge:out std_logic_vector(3 downto 0));
end shu;
architecture bhv of shu is
begin
process(address)
begin
case address is
when
0=>s<=7812;wan<=
when
1=>s<=1562;wan<=
when
2=>s<=781;wan<=
when
19


课程设计说明书
3=>s<=520;wan<=
when
4=>s<=390;wan<=
when
5=>s<=312;wan<=
when
6=>s<=260;wan<=
when
7=>s<=223;wan<=
when
8=>s<=195;wan<=
when
9=>s<=173;wan<=
when
10=>s<=156;wan<=
when
11=>s<=142;wan<=
when
12=>s<=130;wan<=
when
13=>s<=120;wan<=
when
14=>s<=111;wan<=
when
15=>s<=104;wan<=
when
16=>s<=97;wan<=
when
17=>s<=91;wan<=
when
18=>s<=86;wan<=
when
19=>s<=82;wan<=
when
20


课程设计说明书
20=>s<=78;wan<=
when
21=>s<=74;wan<=
when
22=>s<=71;wan<=
when
23=>s<=67;wan<=
when
24=>s<=65;wan<=
when
25=>s<=62;wan<=
when
26=>s<=60;wan<=
when
27=>s<=57;wan<=
when
28=>s<=55;wan<=
when
29=>s<=53;wan<=
when
30=>s<=52;wan<=
when
31=>s<=50;wan<=
when
32=>s<=48;wan<=
when
33=>s<=47;wan<=
when
34=>s<=45;wan<=
when
35=>s<=44;wan<=
when
36=>s<=43;wan<=
when
21


课程设计说明书
37=>s<=42;wan<=
when
38=>s<=41;wan<=
when
39=>s<=40;wan<=
when
40=>s<=39;wan<=
end case;
end process;
end bhv;
分频
library ieee;
use _logic_;
entity fenpin is
port(shu:in integer range 0 to 7812;
clk:in std_logic;
clk2:out std_logic);
end fenpin;
architecture bhv of fenpin is
signal num:integer range 0 to 7812;
signal a:integer range 0 to 7812:=0;
signal temp:std_logic:='0';
begin
process(clk,a,temp)
begin
if clk'event and clk='1' then
if a=shu then
a<=0;
temp<=not temp;
else a<=a+1;
end if;end if;
clk2<=temp;
end process;end bhv;
选择器
22


课程设计说明书
library ieee;
use _logic_;
entity xuanze is
port(a:in std_logic_vector(1 downto 0);
dout0,dout1,dout2,dout3:in integer range 0 to 255;b:out integer range 0 to 255);
end xuanze;
architecture bhv of xuanze is
begin
with a select
b<=dout0 when
dout1 when
dout2 when
dout3 when
null when others;
end bhv;

23

简历特长怎么写-赣南师范学院招生网


新诗-开斋节的习俗


厦门市双十中学-北京装甲兵工程学院


广州大学专业-苏州出国留学


关于读后感的作文-鲁西化工电子商务


证券业协会远程培训-班主任工作经验交流


行政助理-幼儿园教研总结


描写风景作文-幼儿园家长会发言稿