admin 管理员组

文章数量: 1086019


2024年2月18日发(作者:mysql最后一步一个勾不打)

基于FPGA的实用多功能信号发生器

的设计与制作

基于FPGA的实用多功能信号发生器的设计与制作

摘 要

多功能信号发生器已成为现代测试领域应用最为广泛的通用仪器之一,代表了信号源的发展方向。直接数字频率合成(DDS)是二十世纪七十年代初提出的一种全数字的频率合成技术,其查表合成波形的方法可以满足产生任意波形的要求。由于现场可编程门阵列(FPGA)具有高集成度、高速度、可实现大容量存储器功能的特性,能有效地实现DDS技术,极大的提高函数发生器的性能,降低生产成本。

本文首先介绍了函数信号发生器的研究背景和DDS的理论。然后详尽地叙述了利用Verilog HDL描述DDS模块的设计过程,以及设计过程中应注意的问题。文中详细地介绍了多种信号的发生理论、实现方法、实现过程、部分Verilog

HDL代码以及利用Modelsim仿真的结果。

文中还介绍了Altera公司的DE2多媒体开发平台的部分功能及使用,并最终利用DE2平台完成了多功能信号发生器的大部分功能。包括由LCD显示和按键输入构成的人机界面和多种信号的发生。数字模拟转换器是BURR-BROWN公司生产的DAC902。

该信号发生器能输出8种不同的信号,并且能对输出信号的频率、相位以及调制信号的频率进行修改设定。

关键词:信号发生器;DDS;FPGA;DE2

Practical FPGA-based multi function signal generator

design and production

Abstract

Multi function signal generator has become the most widely used in modern

testing field of general instrument, and has represented one of the development

direction of the source. Direct digital frequency synthesis (DDS) is a totaly digital

frequency synthesis technology, which been put forward in the early 1970s. Using a

look-up table method to synthetic waveform, it can satisfy any requirement of

waveform produce. Due to the field programmable gates array (FPGA) with high

integrity, high speed, and large storage properties, it can realize the DDS technology

effectively, increase signal generator’s performance and reduce production costs.

Firstly, this article introduced the function signal generator of the research

background and DDS theory. Then, it described how to design a DDS module by

Verilog HDL, and introduced various signal occurs theory, method and the

implementation process, Verilog HDL code and simulation results.

This paper also introduces the function of DE2 multimedia development

platform, and completed most of the functions of multi-function signal generator on

DE2 platform finally. Including the occurrence of multiple signal and the

man-machine interface which composed by LCD display and key input.

Digital-to-analog converters is DAC902, which produced by company

BURR-BROWN.

This signal generator can output eight different kinds of signals, and the

frequency of the output signal, phase and modulation frequency signal also can be

modifyed.

Key Words: Signal generator; DDS; FPGA; DE2

目 录

论文总页数:34页

1 引言 ...................................................................... 1

1.1课题背景 ........................................................... 1

1.2国内外波形发生器的发展现状 ......................................... 1

1.3本文研究的主要内容 ................................................. 2

2 信号发生器原理 ............................................................. 2

2.1直接数字频率合成技术的基本原理 ..................................... 2

2.2

相位偏移控制 ....................................................... 3

2.3多种信号的发生 ..................................................... 3

2.3.1方波的发生 ..................................................... 3

2.3.2三角波发生 ..................................................... 4

2.2.3锯齿波发生 ..................................................... 4

2.3.4 PWM信号发生 ................................................... 4

2.3.5 SPWM信号发生 .................................................. 5

2.3.6 AM信号发生 .................................................... 5

2.3.7 FM信号发生 .................................................... 6

2.4

DDS

的特点 ......................................................... 7

2.4.1 DDS 的优点 ..................................................... 7

2.4.2 DDS 系统的缺点 ................................................. 7

3 系统整体设计 ............................................................... 8

3.1硬件部分 ........................................................... 8

3.1.1 DE2实验板 ..................................................... 8

3.1.2 LCD模块 ....................................................... 9

3.1.2 DAC902 ........................................................ 11

3.2基于VERILOG的FPGA设计 ........................................... 12

3.3软件工具 .......................................................... 12

3.3.1 Modelsim ...................................................... 12

3.3.2 Quartus ....................................................... 12

3.4系统设计 .......................................................... 13

3.4.1 系统初始化模块 ................................................ 13

3.4.2按键模块和LCD模块 ............................................ 13

3.4.3 RAM模块 ...................................................... 14

3.4.4数据转换模块 .................................................. 15

3.4.5 DAC驱动模块 .................................................. 15

3.4.6系统的运行 .................................................... 15

4 VERILOG HDL代码实现与仿真 ............................................... 15

4.1信号发生器模块 .................................................... 15

4.1.1频率控制字和相位累加器 ........................................ 15

4.1.2 相位偏移控制 .................................................. 16

4.1.3正弦波发生模块 ................................................ 17

4.1.4 方波发生模块 .................................................. 17

4.1.5 三角波发生模块 ................................................ 18

4.1.6 锯齿波发生模块 ................................................ 18

4.1.7 PWM信号发生模块 .............................................. 19

4.1.8 SPWM信号发生模块 ............................................. 19

4.1.9 AM信号发生模块 ............................................... 20

4.1.10 FM信号发生模块 .............................................. 21

4.2

按键输入模块 ...................................................... 22

4.3

LCD显示模块 ...................................................... 23

4.4

RAM模块 .......................................................... 24

4.5

数据转换模块 ...................................................... 25

5 系统测试.................................................................. 26

5.1

控制及显示部分测试 ................................................ 27

5.2

输出频率测试 ...................................................... 27

5.3信号发生测试 ...................................................... 28

5.3.1 正弦波、方波、三角波、锯齿波测试 .............................. 28

5.3.2 PWM信号测试 .................................................. 29

5.3.3 SPWM信号测试 ................................................. 29

5.3.4 AM信号测试 ................................................... 29

5.3.5 FM信号测试 ................................................... 30

结 论..................................................................... 31

参考文献.................................................................... 32

致 谢...................................................... 错误!未定义书签。

声 明...................................................... 错误!未定义书签。

1 引言

1.1课题背景

传统的信号发生器主要有两类:正弦波和脉冲波,而函数发生器介于两类之间。它能够提供正弦波、余弦波、方波、三角波等几种常用标准波形,产生其它波形时,需要采用较复杂的电路和机电结合的方法。这个时期的波形发生器多采用模拟电子技术,但是模拟器件构成的电路存在着尺寸大、价格贵、功耗大等缺点。而且要产生的信号波形越复杂,则电路结构也会越复杂。同时还有两个突出问题,一是通过电位器的调节来实现输出频率的调节,因此很难将频率调到某一固定值;二是脉冲的占空比不可调节。

现代科学技术的飞速发展对信号源提出了越来越高的要求。这些要求主要表现在高分辨率、高输出频率、任意波形等方面。此时传统的信号发生器已经无法满足要求。

直接数字频率合成[1](Direct Digital Synthesizer简称DDS)技术是一种新的全数字的频率合成原理,它从相位的角度出发直接合成所需波形。这种技术由美国学者J.Tiercy,M.Rader和B.Gold于1971年首次提出,但限于当时的技术和工艺水平,DDS技术仅仅在理论上进行了一些探讨,而没有应用到实际中去。但是随着电子技术的飞速发展,微处理器性能大幅提高,高速的DA以及随机存储器大量涌现,DDS技术已经变得很容易实现。它已广泛应用于通讯、雷达、遥控测试、电子对抗以及现代化的仪器仪表工业[2]等许多领域。将其与简单电路相结合就可以精确模拟仿真各种信号。

不论是在生产、实验还是在科研与教学上,多功能信号发生器都是用于仿真实验的最佳工具。随着我国经济和科技的发展,对相应的测试仪器和测试手段也提出了更高的要求,多功能信号生器己成为测试仪器中至关重要的一类,因此开发多功能信号发生器具有重大意义。

1.2国内外波形发生器的发展现状

早在1978年,由美国Wavetek公司和日本东亚电波工业公司公布了最高取样频率为5MHz,可以形成256点波形数据,垂直分辨率为8bit,主要用于振动、医疗、材料等领域的第一代高性能信号源。经过将近30年的发展,伴随着电子元器件、电路、及生产设备的高速化、高集成化,信号发生器的性能有了飞速的提高。信号发生器变得操作越来越简单而输出波形的能力越来越强。

90年代末,出现几种真正高性能、高价格的函数发生器,如HP公司推出了型号为HP770S的信号模拟装置系统。它由HP9770A任意波形数字化和HPl776A波形发生软件组成。HP8770A实际上也只能产生8种波形,而且价格昂贵。不久以后,Analogie公司推出了型号为Data-2020的多波形合成器,Lecroy公司生第1页 共34页

产的型号为9100的任意波形发生器等。

到了二十一世纪,随着集成电路技术的高速发展,出现了多种工作频率可达到GHz水平的DDS芯片,同时也推动了函数波形发生器的发展。2003年,Agilent公司的产品33220A能够产生17种波形,最高频率可达到20M,2005年的产品N6030A能够产生高达500MHz的频率,采样的频率可达1.25GHz。

1.3本文研究的主要内容

(1) 熟悉FPGA技术,学习verilog语言及仿真工具modelsim 和综合工具Quartus II的使用;

(2) 熟悉DE2平台的使用,并学会利用DE2平台进行系统设计和开发;

(3) 对DDS理论进行研究和分析,选择一种适合于FPGA实现的方案;

(4) 设计一个完整的实用的信号发生器系统,包括多种信号的发生、LCD显示及按键控制等;

(5) 利用DE2平台实现信号发生器系统。

2 信号发生器原理

2.1直接数字频率合成技术的基本原理

直接数字频率合成技术是根据奈奎斯特取样定理,从连续信号的相位Φ出发将一个信号取样、量化、编码,最后形成一个信号函数表,并且事先存于ROM 中。在信号合成时,通过改变相位累加器的频率控制字,来改变相位增量,而相位增量的不同将导致一个周期内取样点的不同,从而改变频率。具体的DDS实现时,是通过在采样频率不变的情况下,改变相位累加器的频率控制字,将这种变化的相位、幅值量化的数字信号通过DA变换及滤波,最终得到合成的模拟信号。

时钟信号输出频率控制字相位累加器ROM查找表DA转换低通滤波

图2-1 DDS的基本结构图

DDS主要由相位累加器、波形ROM、DAC以及低通滤波器等组成,如图2-1所示。位相位累加器的位数为N,每一个取样时钟相位累加器都会对频率控制字K进行累加。相位累加器的高位输出作为波形 ROM 的地址,从而实现了波形相位到幅值的转换。波形数据经DAC转换得到阶梯状的信号,通过滤波器输出相对平滑的波形。

如果相位累加器的长度为 N 位,时钟脉冲频率为fc,频率控制字为 K,这时可得 DDS 的输出频率如公式2-1所示。

第2页 共34页

foKfc (2-1)

2N由公式2-1可以看出,相位累加器的长度N决定了累加器输出的数字阶梯波的频率精度。而且N越大,得到波形的频率精度就越高。另 K=1,即可得到 DDS

的频率分辨率如公式2-2所示。

1fLNfc (2-2)

2由DDS的结构可以看出DDS输出信号的频率分辨率是由相位累加器的位数N决定,相位分辨率由ROM的寻址位数决定,而幅值分辨率是由DAC的数据位数所决定。

2.2 相位偏移控制

由相位累加器送出的相位(地址)经过查表进行从相位到幅度的转换就可以得到需要的正弦波。若在相位累加器的输出相位上加上一个小的数值,那么查表后得到的数据也会相应的超前,也就是说此时的输出波形的相位会相对于原来的波形超前。而且这个超前的相位值应该是和在相位加器输出相位上加的数值成正比的。

设相位累加器输出的相位是n位,当在当前相位累加器输出的相位上叠加一个大小为p的数值后,现在输出波形的相位相对于先前的相位就超前P,如公式2-3所示。

P360p (2-3)

2n2.3多种信号的发生

对于正弦波的发生,通常都采用上述查表的方法。当然这种方法也实用于其它的波形的发生。但是考虑到各种不同的波形的特点,也可以采用更为简便的方法得到。

2.3.1方波的发生

同样取相位累加器的最高几位作为方波发生器的地址。根据相位累加器的原理可知,该地址是随时间线性变化的,如图2-2所示。假设ob正好为输出波形的一个周期,那么在b点时地址应该刚好计满,即地址的每一个二进制位都是1。那么可知在ob的中点a处以前地址的最高位都为0,而在a点以后的地址最高位都为1。

利用这一特点,可以随时检查地址的最高位的电平。当最高位为低电平时第3页 共34页

OabO0xxxxxxa1xxxxxxb图2-2

2-2 方波的发生

图方波的发生

(为0时),则说明此时处于方波前半个周期,这时输出全部置1,输出波形为高电平。反之,当地址的最高位为高电平(为1)时,输出全部置0,输出波形为低电平。这样便可得到占空比为50%的标准方波,而且该方波的频率正好等于相位累加器的溢出率。

2.3.2三角波发生

同样取相位累加器的最高几位作为三角波发生器的地址。设ob正好为一个周期。

在前半个周期输出波形与地址的波形是一致的。利用这一点可以直接将地址信号作为输出信号送出。在后半周期地址信号波形与输出波形不相同,但是可以明显的看出二者的斜率正好相反。此时若将地址信号全部按位取反,就可以得到输出波形,如图2-3所示。

图2-3

三角波的发生三角波的发生 图2-3

Oab检查地址信号的最高位的电平变化情况。当最高位为低电平时,直接将地址信号作为输出信号送出;当最高位为高电平时,将地址信号全部按位取反再输出。这样就可以得到一个频率正好等于相位累加器的溢出率的标准三角波。

2.2.3锯齿波发生

锯齿波的波形与三角波的前半个周期相同,因此可以采用同样的发生方式。取相位累加器的最高几位作为地址,并将地址信号直接输出就可以得到锯齿波。同理,产生的锯齿波的频率也正好等于相位累加器的溢出率。

2.3.4 PWM信号发生

脉冲宽度调制(PWM),是英文Pulse Width Modulation的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。实际应用中通常是使用一个高精度的计数器来实现的。

这里直接取相位累加器的最高几位作为计数器。同时还需要一个寄存器用于存放脉宽值。将计数器的值与寄存器的值作比较。当计数器值小于寄存器值的时候,输出为高电平;当计数器的值大于寄存器的值的时候,输出翻转为低电平。这样就能得到一个PWM信号,而且该信号的脉宽取决于寄存器中数值的大小。当寄存器图2-4 PWM信号发生 图2-4 PWM信号的发生Oa寄存器值第4页 共34页

值增加,则输出波形脉宽增大;当寄存器值减小,则输出波形的脉宽减小,如图2-4所示。

2.3.5 SPWM信号发生

所谓SPWM,就是在PWM的基础上改变了调制脉冲方式,脉冲宽度时间占空比按正弦规率排列,这样输出波形经过适当的滤波可以做到正弦波输出。它广泛地用于直流交流逆变器等,比如高级一些的UPS就是一个例子。三相SPWM是使用SPWM模拟市电的三相输出,在变频器领域被广泛的采用。

SPWM信号可以通过一个频率较低的正弦信号与另一个频率较高的三角波信号做比较得到。把正弦波看作调制信号,三角波看作载波,将二者经过比较器调制得到SPWM信号。但是这种方法比较麻烦,所以这里借鉴了前面所用过的PWM的发生方式。产生PWM波形的时候需要一个寄存器用于存放脉宽值,通过修改该寄存器的值就可以修改输出波形的脉宽。那么,如果当该寄存器的值按正弦规律变化的话,输出波形的脉宽值也会按正弦规律变化,如图2-5所示。

同样取相位累加器的最高几位作为计数器,而该相位累加器的溢出率就相当于是载波的频率。调制信号的发生可以采用前面的正弦波的发生方式。但是这里需要另外一个独立的相位累加器专门为正弦波发生器提供地址信号,该相位累加器的溢出率就是调制信号的频率。再将正弦波值送到控制脉宽的寄存器,经过与计数器的比较就可以得到一个SPWM信号。

2.3.6 AM信号发生

在线性调制系列中,最先应用的一种幅度调制是全调幅或常规调幅,简称为调幅(AM)。不但在频域中已调波频谱是基带调制信号频谱的线性位移,而且在时域中,已调波包络与调制信号波形呈线性关系。

设调制信号为

u(t)Umcos(t) (2-4)

图2-5 SPWM信号的发生信号发生 图2-5 SPWMOa载波信号为

uc(t)Ucmcos(ct) (2-5)

根据调幅波的振幅与调制信号成正比,所以可得调幅波的表达式为

uAM(t)[Ucmkau(t)]cos(ct)[4] (2-6)

第5页 共34页

调幅系数为

makaUm (2-7)

UcmUm0u(t)在这里的正弦波的变化范围都是从Um到Um,如图2-6(a)所示。但是实际制Um(a)r(t)作时的正弦波需要由前面讲过的正弦波发生器来产生,它的变化范围是0到2n(n为ROM中存储的数据的位数),如图2-6(b)所示。

令Ucm2n1,则可得到

u(t)r(t)2n12n2n10(b)(a)理论上的正弦波 (b)rom中的正弦波图2-6图2-6 两种正弦波

(2-8)

于是调幅波的表达式可以表示为

uAM(t)[2n1ka(r(t)2n1r(t)2n1)] (2-9)

2n1由于输出信号不能小于零,所以还要在uAM(t)上叠加一个大小为2n1的一个直流分量。同时令ka=1,则可得

uout(t)uAM(t)2n1r(t)r(t)n12r(t) (2-10)

n12其中,r(t)是调制信号,r(t) 是载波信号,两路信号都必须由两个完全独立的电路产生。

2.3.7 FM信号发生

FM信号即频率调制信号,它的特点是载波的频率会随调制信号的幅度变化而发生相应的偏移。

设调制信号为

u(t)Umcos(t) (2-11)

载波信号为

uc(t)Ucmcos(ct0) (2-12)

则调频信号可以表示为

uFM(t)Umcos[ckfu0t(t)dt] (2-13)

但是实际上这样做起来会十分地复杂。根据前面的正弦波发生原理,输出正弦波的频率是由频率控制字来决定,而且输出频率是随频率控制字的变化做线性第6页 共34页

变化。所以将调制信号直接作用于频率控制字就可以输出调频信号。

设在没有调制信号的时候频率控制字为KK0,当输入调制信号后就可得到

KK0ku(t) (2-14)

n在实际的正弦波发生器中产生的正弦波r(t)的变化范围是0到2(n为ROM中存储的数据的位数),所以可得到

KK0k[r(t)2n1] (2-15)

其中调制信号r(t)必须由另外的独立的电路来产生。

2.4 DDS 的特点

2.4.1 DDS 的优点

由于 DDS 自身的数字化结构,它具有下列优点:

(1)频率分辨率高。从公式2-2可知,相位累加大的位数越多,输出的信号的精度就会越高。

(2)频率转换时相位保持连续。在进行频率转换时只需要修改频率控制字,而相位累加器中的值不会发生跳变。因此输出的信号的相位也不会发生跳变。

(3)频率切换时间短。通常频率控制字的传输时间及以低通滤波为主的器件响应时间很短,因此高速 DDS 系统的频率切换时间可以达到 ns 级。

(4)输出的频率范围宽。DDS输出的频率最低一般可达到几Hz,有的甚至可以达到1Hz以下。而输出的最高频率可达到系统时钟的一半。

(5)可以用于产生任意波形。通过事先在RAM中存储波形,或通过一些数字合成的方式,DDS可以产生任意波形。

2.4.2 DDS 系统的缺点

从理论上说,DDS的最高输出频率只能达到系统时钟频率的一半,而且在实际应用中还要小于此值。要想获得较高的输出频率,就必须提高系统的时钟频率,那么 DDS 系统的相位累加器、波形存储器、D/A 转换器等都必须同时工作在较高的时钟频率下。这样的话,它的实现就依赖于高速数字电路和高速 D/A

转换器。这也是 DDS 系统在早期没有得到重视,直到最近几年才迅速发展的原因。同时,DDS 系统先采用数字技术构成离散信号,再将该离散信号变换成模拟信号输出。在此过程中必然会产生一定的误差,尤其是要产生相位截断误差,因而噪声和杂散是不可避免的。

第7页 共34页

3 系统整体设计

3.1硬件部分

3.1.1 DE2实验板

DE2开发板是Altera公司针对大学教学及研究机构推出的FPGA多媒体开发平台。DE2为用户提供了丰富的外设及多媒体特性,并具有灵活而可靠的外围接口设计。DE2能帮助使用者迅速理解和掌握实时多媒体工业产品设计的技巧,并提供系统设计的验证。DE2平台的设计和制造完全按照工业产品标准进行,可靠性很高[3]。

图3-1 DE2实验板

DE2平台上提供的资源如下:

(1) Altera Cyclone II系列的EP2C35F672C6 FPGA,内含35 000个逻辑单元(LE);

(2) 主动串行配置器件EPCS16U30;

(3) 板上内置用于编程调试和用户API设计的USB Blaster,支持JTAG模式和AS模式;

(4) 512K字节SRAM;

(5) 8M字节SDRAM;

(6) 1M字节闪存(可升级至4M字节);

(7) SD卡接口;

(8) 4个按键KEY0~KEY3;

(9) 18个拨动开关SW0~SW17;

(10) 9个绿色LED灯LEDG0~LEDG8;

第8页 共34页

(11) 18个红色LED灯LEDR0~LEDR17;

(12) 两个板上时钟源(50MHz晶振和27MHz晶振),也可以使用外部时钟;

(13) 24位CD品质音频的编/解码器WM8371,带有麦克风的输入插座、线路输入插座和线路输出插座;

(14) VGA DAC ADV7123 (含有3个10位高速DAC)及VGA输出接口;

(15) 支持MTSC和PAL制式的TV解码器ADV7181及TV接口;

(16) 10M/100M以太网控制器DM9000AE及网络接口;

(17) USB主从控制器ISP1362及接口;

(18) RS232收发器MAX232及接口;

(19) PS2鼠标/键盘连接器;

(20) IRDA收发器;

(21) 带二极管保护的两个40脚扩展端口GPIO;

(22) 2×16字符的LCD模块;

(23) 平台通过插座接入直流9V供电,并有电源总开关;

图3-2 DE2板上的资源

3.1.2 LCD模块

数据显示采用DE2板上自带的LCD。该LCD模块能显示各种ASCII字符,每一行能显示16个字符,共显示两行,一共能显示32个字符。模块内部带有ASCII码字库,不需要外部提供。模块提供了8位并行和串行两种通信方式,使用灵活。

第9页 共34页

图3-3 LCD结构

LCD模块内部有一个指令寄存器和一个数据寄存器,分别用于存入指令和数据。当管脚RS为0时,对模块内部的指令寄存器操;当管脚RS为1时,对模块内部的数据寄存器操作。管脚R/W为0明表示对模块进行写操作,管脚R./W为1时表示对模块进行读操作。这里只对模块进行写操作,具体的时序如图3-4所示。

图3-4 LCD写时序

表3-1 LCD写时序中的各种时间的意义及值的大小

第10页 共34页

3.1.2 DAC902

DAC902是高速的12位数字模拟转换器,最高转换速率可达165MSPS。DAC902输出电流信号,有较高的输出阻抗(200kΩ),输出电流可达20mA。

DAC902的输出电流是两路互补输出的电流的总和。

IOUTFSIOUTIOUT (3-1)

具体的输出电流决定于送入DAC数据的大小,

IOUTIOUTFS(Code/4096) (3-2)

IOUTIOUTFS(4096Code/4096) (3-3)

其中,Code是DAC的数据输入字符的十进制表示形式。此外,IOUTFS是参考电流的100000倍,是由参考电压和外部设置电阻,电流设置确定的。

IOUTFS32VREF/RSET (3-4)

在输出时需要一个负载电阻将电流信号转化面电压信号。那么最终输出为公式3-5和公式3-6。

VOUTIOUTRLOAD (3-5)

VOUTIOUTRLOAD (3-6)

DAC902的写操作非常简单。将12位数据送到数据端口,通过控制时钟信号的变化就可以将数据写入,如图3-5所示。

图3-5 DAC写时序图3-5 DAC写时序

第11页 共34页

表3-2 DAC写时序中的各时间的意义

SYMBOL

t1

t2

tS

tH

tPD

tSET

DESCRIPTION

Clock Pulse High Time

Clock Pulse Low Time

Data Setup Time

Data Hold Time

Propagation Delay Time

Output Setting Time to 0.1%

MIN

1.5

2.5

TYP

3.0

3.0

(t1+t2)+1

30.0

MAX

UNITS

ns

ns

ns

ns

ns

ns

3.2基于VERILOG的FPGA设计

Verilog HDL是目前应用最为广泛的硬件描述语言。Verilog HDL可以用来进行各种层次的逻辑设计,也可以进行数字系统的逻辑综合,仿真验证和时序分析等。

Verilog HDL适合算法级,寄存器级,逻辑级,门级和版图级等各个层次的设计和描述。Verilog HDL进行设计最大的优点是其工艺无关性。这使得工程师在功能设计,逻辑验证阶段可以不必过多考虑门级及工艺实现的具体细节,只需根据系统设计的要求施加不同的约束条件,即可设计出实际电路。

Verilog HDL是一种硬件描述语言(hardware description language),为了制作数字电路而用来描述ASICs和FPGA的设计之用。Verilog 的设计者想要以 C 编程语言为基础设计一种语言,可以使工程师比较容易学习。

3.3软件工具

3.3.1 Modelsim

Mentor公司的ModelSim是业界最优秀的HDL语言仿真软件,它能提供友好的仿真环境,是业界唯一的单内核支持VHDL和Verilog混合仿真的仿真器。它采用直接优化的编译技术、Tcl/Tk技术、和单一内核仿真技术,编译仿真速度快,编译的代码与平台无关,便于保护IP核,个性化的图形界面和用户接口,为用户加快调错提供强有力的手段,是FPGA/ASIC设计的首选仿真软件。

3.3.2 Quartus

Altera的Quartus II可编程逻辑软件属于第四代PLD开发平台。该平台支持一个工作组环境下的设计要求,其中包括支持基于Internet的协作设计。Quartus平台与Cadence、ExemplarLogic、 MentorGraphics、Synopsys和Synplicity等EDA供应商的开发工具相兼容。改进了软件的LogicLock模块设计功能,增添了FastFit编译选项,推进了网络编辑性能,而且提升了调试能力。

QuartusII design 提供完善的 timing closure 和 LogicLock基于块的设计流第12页 共34页

程。QuartusII design是唯一的一个包括以timing closure 和基于块的设计流为基本特征的programmable logic device (PLD)的软件。 Quartus II 设计软件改进了性能、提升了功能性、解决了潜在的设计延迟等,在工业领域率先提供FPGA与mask-programmed devices开发的统一工作流程。

Quartus II 作为一种可编程逻辑的设计环境, 由于其强大的设计能力和直观易用的接口,越来越受到数字系统设计者的欢迎。

3.4系统设计

系统的设计主要是基于DE2实验平台,具有友好的人机交互界面。具体包括了按键输入、LCD显示、系统初始化、RAM、数据转换处理、信号发生器、DAC转换几个模块,如图3-6所示。系统时钟选用DE2上自带的50MHz时钟信号。

系统初始化按键控制RAMLCD显示信号发生器DAC驱动数据转换

图3-6 系统总框图图3-6 系统总框图

3.4.1 系统初始化模块

当系统刚启动时,RAM中并没有任何数据。但是其它几个模块的运行却必须依赖于RAM中的数据。为解决这个问题,这里专门设计了一个系统初始化模块。

模块内部包括一块ROM和RAM的写时序控制电路。ROM包括32个8位的静态存储器,能存放32个ASCII代码,用于存放初始化数据。该初始化数据主要用于LCD显示,其中包括了频率、相位和波形发生方式的默认值。RAM的写时序控制电路用于将ROM中的数据写入RAM。

3.4.2按键模块和LCD模块

DE2实验板上共有四个按键,分别是KEY0到KEY3,如图3-7所示。在普通模式下KEY1和KEY2用于波形发生模式的切换,并能过波形发生模式的切换输出不同的波形。在此模式下按下KEY0就可以进入编程模式。在该模式下可第13页 共34页

以通过KEY1和KEY2对频率或相位进行修改。KEY3可以使光标向左移动。在此模式下专门增加了一个拨码开关SW0用于光标在上下行之间的切换。此时按下KEY0可以返回普通模式,同时还可以将设定好的波形输出。

KEY3KEY2KEY1KEY0F:0,001,000HzP:0,000sine图3-8 初始化时的LCD显示 图3-7 按键示意图

LCD显示模块会不停的将RAM中的ASCII数据送到LCD显示。图3-8所示为刚初始化完成时LCD显示内容。第一行显示的数值为输出信号的频率,在SPWM、AM、FM三种波形发生模式下表示载波频率。第二行左边的数值在不同的波形发生模式下表示不同的意义。在正弦波、方波、三角波、锯齿波四种波形发生模式下,该数据表示输出波形的偏移相位(数据范围是0到360,单位是度);在PW波形发生模式下该数据表示输出波形的占空比(数据范围是0%到100%);在SPWM、AM、FM发生模式下该数据表示调制信号的频率(单位是Hz)。各种波形发生方式的显示内容如表3-3所示。

表3-3 各种波形发生模式与LCD显示的对照

编号波形发生模式显示内容0正弦波sine1方波squa23三角波锯齿波triasawt4PWMPWM5SPWMSPWM6AMAM7FMFM

3.4.3 RAM模块

在系统的7个模块中,RAM处于中心位置。它是由32个8位存储器构成,能存储32个ASCII代码。它在系统中起着数据存储、各模块间数据交流以及协调各模块间的有序运行的作用。RAM的数据交流功能包括:

(1)在系统启动时由初始化模块将初始化数据写入RAM;

(2)LCD显示模块从RAM中读出数据并显示;

(3)按键模块从RAM中读出数据,修改后又写回RAM;

(4)数据处理模块从RAM中读出数据并转换。

RAM它的协调作用包括:

(1)在系统初始化完成之前禁止其它所有模块对它的所有读写操作;

(2)当有按键操作时关闭LCD显示模块和数据转换模块;

(3)当数据处理模块运行时关闭LCD显示模块;

(4)协调各模块间的地址和数据信号。例如:LCD显示时,需要将LCD显示地址送入,同时将得到的数据送到LCD的数据端口;而在数据处理时则需要将要处理数据的地址送入,同时将得到的数据送到数据处理模块的相应端口。

第14页 共34页

3.4.4数据转换模块

RAM中存储的数据全部为ASCII数据,数据转换模块会将RAM中对应位置的ASCII数据转换为二进制的频率或相位数据。

3.4.5 DAC驱动模块

要实现DA转换首先需要将数字信号送到DAC的数字输入端。这里利用DE2实验板上提供的普通IO口(GPIO_1)作为与DAC芯片的连接端口。其中DAC时钟采用系统时钟。

IO0 IO1IO2 IO3IO4 IO5IO6 IO7IO8 IO9VCC5 GNDIO10 IO11IO12 IO13IO14 IO15IO16 IO17IO18 IO19IO20 IO21IO22 IO23IO24 IO25VCC33 GNDIO26 IO27IO28 IO29IO30 IO31IO32 IO33IO34 IO35bit1 clkbit2 +VDbit3 DGNDbit4 NCbit5 +VAbit6 BYPbit7 Ioutbit8 !Ioutbit9 AGNDbit10 BWbit11 FSAbit12 REFNC INT/EXTNC PD

图3-9 GPIO与DA的连接

3.4.6系统的运行

系统的运行主要包括以下几种情形:

(1) 系统刚启动时,系统初始化模块将初始化数据写入RAM;

(2) LCD显示模块实时将RAM中的ASCII字符直接显示出;

(3) 在按键操作时直接修改RAM中的相应数据;

(4) 在按键操作完成后,数据转换处理模块要将RAM中的ASCII代码转换成相应的频率值或相位值,同时将该频率值或相位值送到信号发生器;

(5) 信号发生器根据得到的频率或相位值产生相应的信号,该信号最后将通过DAC驱动模块送到外部DAC进行DA转换。

4 Verilog HDL代码实现与仿真

4.1信号发生器模块

4.1.1频率控制字和相位累加器

根据公式2-1可得

2Nfo

Kfc (4-1)

第15页 共34页

取相位累加器的位数N=32,Verilog HDL代码如下:

module fre_ctrl(fre, fre_word);

input [19:0]fre; //频率值

output [31:0]fre_word; //频率控制字

assign fre_word = 64'h1_0000_0000 * fre / 32'd50_000_000;

endmodule

为相位累加器代码如下:

module phase_adder(clk, rest,fre_word, add_phase);

input clk,rest;

input [31:0]fre_word;

output [12:0]add_phase;

reg [31:0]A; //累加器寄存器

assign add_phase = A[31:19]; // 输出地址

always@(posedge clk,negedge rest)

begin

if(!rest)

A <= 32'h0;

else

A <= A + fre_word;

end

endmodule

两个模块的modelsim仿真结果如图4-1所示。

图4-1 相位累加器的仿真结果

4.1.2 相位偏移控制

由式公式2-3可得公式4-2。

2npP

360 (4-2)

取相位累加器的输出相位位宽为n=13得到Verilog HDL代码如下:

module phase_ctrl(set_phase,add_phase,phase);

input [8:0]set_phase; //设定的相位超前量

input [13:0]add_phase; //相位累加器的输出相位

output [8:0]phase; //输出相位

assign phase[12:3] = add_phase[12:3] + (18'd512 * set_phase)/9'd360;

assign phase[2:0] = add_phase[2:0];

endmodule

模块的modelsim仿真结果如图4-2所示。

第16页 共34页

图4-2 相位偏移控制的仿真结果

图 4-24.1.3正弦波发生模块

正弦波的每个周期采样512个点,数据位宽为12位。ROM中存储了一个完整的周期。

正弦波发生器模块的Verilog HDL代码如下:

module sine_gene(phase,sine_out);

input [8:0]phase;

output [11:0]sine_out;

sine_rom sinerom(phase,sine_out);

endmodule

模块的modelsim仿真结果如图4-3所示。

图4-3 正弦波发生模块仿真结果

4.1.4 方波发生模块

Verilog HDL代码如下:

module square_gene(phase,square_out);

input [8:0]phase;

output [11:0]square_out;

reg [11:0]square_out;

always @(*)

begin

if(phase[8])

square_out = 12'h000;

else

square_out = 12'hfff;

end

endmodule

模块的modelsim仿真结果如图4-4所示。

第17页 共34页

图4-4 方波发生模块仿真结果

4.1.5 三角波发生模块

三角波发生模块Verilog HDL代码如下:

module triangle_gene(phase,triangle_out);

input [12:0]phase;

output [11:0]triangle_out;

reg [11:0]triangle_out;

always @(*)

begin

if(phase[12])

triangle_out = ~phase[11:0];

else

triangle_out = phase[11:0];

end

endmodule

模块的modelsim仿真结果如图4-5所示。

图4-5 三角波发生模块的仿真结果

4.1.6 锯齿波发生模块

锯齿波发生模块Verilog HDL代码如下:

module sawtooth_gene(phase,sawtooth_out);

input [11:0]phase;

output [11:0]sawtooth_out;

reg [11:0]sawtooth_out;

always @(*)

begin

sawtooth_out = phase;

end

endmodule

模块的modelsim仿真结果如图4-6所示。

第18页 共34页

图4-6 锯齿波发生模块仿真结果

4.1.7 PWM信号发生模块

PWM发生模块Verilog HDL代码如下:

module PWM_gene(dutycycle,phase,PWM_out);

input [7:0]dutycycle;

input [8:0]phase;

output [11:0]PWM_out;

reg [11:0]PWM_out;

wire [8:0]PW;

assign PW = (dutycycle%100)*512/100;

always @*

begin

if(phase < PW)

PWM_out = 12'hfff;

else

PWM_out = 12'h000;

end

endmodule

当输出频率为10kHz、占空比为30%时的modelsim仿真结果如图4-7所示。

图4-7 PWM信号发生模块仿真结果

4.1.8 SPWM信号发生模块

SPWM发生模块Verilog HDL代码如下:

module SPWM_gene(PW,phase,SPWM_out);

input [11:0]PW;

input [8:0]phase;

output [11:0]SPWM_out;

wire [11:0]PW;

reg [11:0]SPWM_out;

always @*

第19页 共34页

begin

if(phase < PW[11:3])

SPWM_out = 12'hfff;

else

SPWM_out = 12'h000;

end

endmodule

当载波频率为10kHz、调制信号频率为1kHz时的modelsim仿真结果如图4-8所示。

图4-8 SPWM信号发生模块仿真结果

4.1.9 AM信号发生模块

AM信号发生模块Verilog HDL代码如下:

module AM_gene(clk,rest,m,phase,AM_out);

input clk,rest;

input [11:0]m;

input [8:0]phase;

output [11:0]AM_out;

wire [11:0]c ;

reg [24:0]temp1,temp2,temp3;

reg [11:0]AM_out;

always @(posedge clk,negedge rest)

begin

if(!rest)

AM_out <= 12'hzzz;

else

begin

temp1 <= m[11:1] * c;

temp2 <= temp1 / 2048;

temp3 <= temp2 + 2047;

AM_out <= temp3 - m[11:1];

end

end

sine_rom AMsine(phase,c);//carrier wave

endmodule

当载波频率为10kHz、调制信号频率为1kHz时的modelsim仿真结果如图4-9所示。

第20页 共34页

图4-9 AM信号发生模块仿真结果

4.1.10 FM信号发生模块

FM信号发生模块Verilog HDL代码如下:

module FM_gene(clk,rest,m,fre_word,FM_out);

input clk,rest;

input [11:0]m;

input [31:0]fre_word;

output [11:0]FM_out;

reg [31:0]A;

reg [31:0]temp;

wire [19:0]temp2;

assign temp2 = {m[11:0],8'h00};

always @(posedge clk, negedge rest)

begin

if(!rest)

begin

A <= 32'h0;

temp <= 32'h0;

end

else

begin

temp <= fre_word + temp2 - 20'h524288;

A <= A + temp;

end

end

sine_rom FMsine(A[31:23],FM_out); //carrier wave

endmodule

当载波频率为10kHz、调制信号频率为1kHz时的modelsim仿真结果如图4-10所示。

第21页 共34页

图4-10 FM信号发生模块仿真结果

4.2 按键输入模块

按键模块一共要处理KEY0到KEY3四个按键的输入。分别将这四个按键按功能命名如下表:

表4-1 按键与名称的对应

按键名称KEY0OKKEY1upKEY2downKEY3cursor

系统分为两种运行模式,普通模式和编程模式。如下图,与普通模式相对应的是00和01两个状态,与编程模式相对应的是10和11两个状态。

各状态的功能如图4-11所示。

counter< 8counter< 701!rest|counter>=8/counter=0!rest/re=0up |down/re=1up |downOK/cursor_en=100!rest|OK/cursor_en=010cursor_en=111counter=7/counter=0,re=0

图4-11 按键模块状态转移图

(1)00:系统运行的基体状态,只有在该状态下系统才能正常的输出信号。此时按下up或down键将修改波形发生模式,同时状态将跳到01。若此时按下OK键,状态将跳到10,同时开启光标显示(cursor_en=1)。

(2)01:根据当前的波形发生模式同步更新LCD上的显示内容。LCD上显示波形发生模式使用了4个ASCII代码,那么就需要向RAM中写4次数据,每一次需要两个时钟,一共需要8个时钟(counter是计数器)。

(3)10:编程模式的基体状态。此时若按下cursor键,则LCD显示的光标第22页 共34页

将会向右移1位。若按下up或down按键,状态将跳到11。若按下OK键,则状态将跳回00,同时关闭光标(cursor_en=0)。

(4)11:修改光标处的数据,up为加,down为减。首先要将光标处的数据从RAM中读出,这大约需要3个时钟。然后修改数据需要一个时钟。最后将数据写回RAM需要2个时钟。re为从RAM中读数据的使能。当re为1时才能从RAM中读出数据。

4.3 LCD显示模块

LCD显示模块共包括了三个部分:数据准备、写数据和光标闪烁控制。

(1)数据准备部分将要写到LCD中的数据准备好。该数据分为两类,一类是用于LCD显示控制的指令,如表4-2所示;另一类是要在LCD上显示的数据,该数据来处于RAM。

表4-2 模块中用到的LCD控制命令

命令(十六进制)380c010680c0命令功能设置接口为8位数据,分两行显示开启LCD显示清屏关闭LCD内部光标设定LCD内部DDRAM的地址为第一行开始设定LCD内部DDRAM的地址为第二行开始

/data=8'h06011/data=8'h01!rest010addr=31/addr=0!rest101addr=15100/addr+1,data=ram[addr]/data=8'h80/data=8'h0c001!rest!rest!rest110/data=3'hc0!rest000111!rest/data=8'h38/addr+1,data=ram[addr]

图4-12 LCD数据准备状态转移图

该部分一共有8个状态,如图4-12所示。从000到011这四个状态用于LCD第23页 共34页

初始化。在系统复位后完成后首先依次进入这四个状态,且只进入一次。在LCD初始化完成后,系统会在100到111这四个状态之间不断的循环。状态100将LCD第一行的首地址写入,此后每写一个数据地址加1。状态101要执行16次,分别把RAM中的第1到第16个数据分别写入,addr既是从RAM中读数据的地址,也是向LCD中写数据的地址。状态110将LCD第二行的首地址写入。状态111也执行16次,分别把RAM中的从第17到第32个数据分别写入。当系统跳出状态111后就完成了一次LCD显示,这时系统又回来100状态进行下一次显示。

(2)写数据部分将已准备好数据写入到LCD,如图4-13所示。状态00将数据送到LCD端口,并且将控制信号E拉高。状态01用于延时,延时间不小于230ns。状态10将控制信号E拉低,将数据写入到LCD内部的DDRAM中。状态11用于延时,延时时间约为2.5ms。

0110!rest/E=1,LCD=data!rest/E=00011

图4-13 LCD写数据部分状态转移图

(3)光标闪烁控制。光标闪烁是用一个下划线字符和光标处原字符交替显示来实现的。这里需要一个定时器,定时器周期为0.8s。在前0.5s显示原数据,在后0.3s显示下划线。通过LCD可以看到光标闪烁的效果。

4.4 RAM模块

该模块包括了RAM部分和协调各模块间地址和数据信号部分。以下为协调各模块间的地址和数据信号部分的代码:

always @(posedge clk,negedge rest)

begin

if(!rest)

begin

LCD_en <= 0; //关闭LCD显示

end

else

begin

if(!EN) //EN为全局使能信号

第24页 共34页

end

end

begin

if(init_we) //初始化模块写数据信号

dataram[init_addr] <= init_data;

end

else

begin

if(key_we) //按键模块写数据信号

dataram[key_addrout] <= key_dataout;

if(key_re) //按键模块读数据信号

begin

key_datain <= dataram[key_addrin];

LCD_en <= 0;

end

else if(pro_re) //按键模块读数据信号

begin

pro_data <= dataram[pro_addr];

LCD_en <= 0;

end

else //LCD模块读数据

begin

LCD_en <= 1;

LCD_dat <= dataram[LCD_addr];

end

end

图4-14和图4-15分别为模块的写操作和读操作的modelsim仿真结果。

图4-14 RAM的写操作仿真结果

图4-15 RAM的读操作仿真结果

4.5 数据转换模块

在RAM中存放的数据包括了频率值(或载波频率)和相位值(或调制信号频率)。它们都是以十进制的形式存储的,而且存的都对应十进制数据的ASCII代码。各个十进制数据的存放地址如图4-16所示。其中从地址2到10存放的是频率值,从地址18到22中存放的是相位值。

第25页 共34页

28910

图4-16 RAM中的数据存放地址

在进行数据转换时首先需要要将数据从RAM中逐个地读出,然后再逐个地对数据进行处理。如图4-17所示为相位值转换的状态转移图。

其中,addr从RAM中读数据的地址,P用于存储相位值。状态0首先将P置0,并且将第一个地址18送出。由于从RAM中读数据需要延时1 个钟,所以RAM中地址18中的的数据会在状态1中到达。状态1将RAM送来的数据送入P存储,并且将下一个地址20送出。在状态2中先将P乘以10再加上RAM送来的数据并再次存入P,同时送出下一个地址21。依次类推最终完成数据的转换。

/addr=21,P=P*10+ram[20]-482/addr=20,P=ram[18]-481/addr=18,P=00/P=P*10+ram[22]-4853/addr=22,P=P*10+ram[21]-484

图4-17 相位值的转换方式

图4-18所示为模块的modelsim仿真结果。

图4-18 数据转换模块的仿真结果

5 系统测试

Quartus II 软件具有SignalTap II嵌入式逻辑分析仪,它提供了一种对器件进行实时测试的手段。SignalTap II嵌入式逻辑分析仪可以随设计文件一起下载到目标芯片中,用以捕捉目标芯片中设计者感兴趣的信号节点处的信息,而不影响芯片的正常工作。SignalTap II将测得的样本信号暂存于目标器件的片内RAM(如第26页 共34页

ESB、M4K)中,然后通过器件的JTAG端口和ByteBlaster II编程线将采得的信息付出,送入计算机进行分析。

以下的波形测试工具均为SignalTap II嵌入式逻辑分析仪。

5.1 控制及显示部分测试

开机后系统先要进行初始化。系统默认的输出信号为正弦波,信号频率为1kHz,相位偏移为0度。如图5-1所示为初始化完成后LCD的显示结果。

图5-1 初始化后LCD显示效果

通过按键操作可以对LCD显示的内容进行修改,同时波形发生器的各种参数也会被相应的修改。例如将输出信号改为AM信号,载波信号频率为10kHz,调制信号频率为1kHz。LCD显示结果如图5-2所示。

图5-2 LCD显示效果

5.2 输出频率测试

波形发生器的时钟为50MHz,相位累加器为32位。根据公式2-2可知波形发生器的频率分辨率约为0.0116Hz。波形发生器所能产生的最高频率为时钟信号的40%,即为20M。也就是说波形发生器的输出频率范围理论上为0.0116Hz到20MHz。

由于该系统在设计时采用了7位十进制数据来显示频率值,显示的数据最多只能达到9.999999MHz。所以该信号发生器的最终信号输出范围为1Hz到第27页 共34页

9.999999MHz。

同时由于SignalTap II嵌入式逻辑分析仪的RAM容最多只能达到32K,也就是只能记录32K的数据。当采样信号采用系统时钟50MHz时,分析仪只能观察到1KHz以上的信号(指能观察到一个完整的周期)。因此在测试时只选取1KHz以上的信号做测试。

分别设定了几个不同的频率点,并利用SignalTap II嵌入式逻辑分析仪进行测量,测量结果如表5-1所示。

表5-1 设定频率与测量频率的对照

设定输出信号频率测量输出信号周期测量输出信号频率1.99992kHz2.9994kHz10kHz100kHz1MHz5MHz频率差值0Hz0.08Hz0.6Hz0Hz0Hz0Hz0Hz5.3信号发生测试

5.3.1 正弦波、方波、三角波、锯齿波测试

当输出频率10kHz时,利用SignalTap II嵌入式逻辑分析仪得到的波形如图5-3到图5-6所示。

图5-3 正弦波

图5-4 方波

第28页 共34页

图5-5 三角波

图5-6 锯齿波

5.3.2 PWM信号测试

载波信号频率90kHz,占空比80%。利用SignalTap II嵌入式逻辑分析仪得到的波形为图5-7所示。

图5-7 PWM信号

5.3.3 SPWM信号测试

载波信号频率90kHz,调制信号频率3kHz。利用SignalTap II嵌入式逻辑分析仪得到的波形为图5-8所示。

图5-8 SPWM信号

5.3.4 AM信号测试

载波信号频率90kHz,调制信号频率3kHz。利用SignalTap II嵌入式逻辑分析仪得到的波形为图5-9所示。

第29页 共34页

图5-9 AM信号

5.3.5 FM信号测试

载波信号频率20kHz,调制信号频率3kHz。利用SignalTap II嵌入式逻辑分析仪得到的波形为图5-10所示。

图5-10 FM信号

本章完成了对多功能信号发生器的测试。包括对人机界面的测试和多种信号的发生的测试。从测试结果来看,该多功能信号发生器完全符合设计要求。人机界面友好,可以通过按键对信号的各种参数进行修改,并能通过液晶显示器实时地显示。输出信号的频率范围宽、精度高。能输出8种不同的信号,而且每一种信号都符合设计要求。

第30页 共34页

结 论

本文从直接数字频率合成(DDS)技术入手,详细分析了其背景和发展现状,并说明了研究多功能信号发生器的现实意义。第二章对接数字频率合成技术的原理做了十分详尽的介绍,并针对DDS技术的各种优点和缺点做了分析。以DDS为基础,文中还结合到各种不同信号的特点,详细地分析了多种信号发生原理,并提出了基于FPGA的实现方案。

第三章从系统的角度分析了实用多功能信号发生器的实现方案。将整个系统分为了七个模块,各模块完成各自的不同的功能,间既相互独立又紧密联系。将系统分解开来,使系统结构清晰、方便实现;并针对各个模块的不同功能,做了十分详细的阐述说明。同时还介绍了系统设计所要使用到的硬件平台、器件和软件工具、硬件描述语言。

第四章详给出多功能信号发生器部分模块的Verilog HDL语言实现代码,还有其通过Modelsim仿真软件的仿真人结果。由于有一部分模块的代码量太大,所有的代码没有在文中给出,但是文中对其最终代码实现方案做了十分详细的说明,并给出了Vreilog HDL语言的代码结构以及其中用到的状态机的状态转移图等。

第五章对多功能信号发生器进行了整体测试。测试内容包括人机界面、信号发生器的输出频率和各种输出波形等。

综上所述,本文完整地介绍了实用多功能信号发生器从设计、实现、调试到最后的测试的过程,并且很好地实现了信号发生器的实用和多功能的特点。该信号发生器的特点包括:

(1)能通过LCD实时显示信号发生器输出信号的种类、频率等信息;

(2)能通过按键对输出信号的各类以及各种参数进行修改设置;

(3)输出信号频率范围为1Hz到9.999999MHz;能输出8种不同的信号(正弦波、方波、三角波、锯齿波、PWM、SPWM、AM、FM);

(4)能对基本信号(正统波、方波、三角波、锯齿波)的进行相位偏移控制;

(5)能对PWM信号的占空比进行修改设定;

(6)能对复杂信号(SPWM、AM、FM)的调制信号的频率进行修改设定。

但是,由于在最初设计时考虑不够全面,使得最后的信号发生器存在一些不足的地方。例如没有对信号发生器的输出波形进行滤波,缺少输出信号的幅度控制,文中提到的对基本信号的相位控制的实用性不强。同时,由于时间仓促和本人的知识水平所限,文中错误和漏洞在所难免。还望各位老师批评和指正。

第31页 共34页

参考文献

[1] Jierey J,Radar C M,Radar C M,Gold B.A digital frequency

synthesizer.IEEETransonAudioEltroacount,1971,august 1971:48—57

[2] 袁振东.一种高效率智能电子实验仪的设计与实现.电气电子教学学报。2000,(1):55—62

[3] 张志刚. FPGA与SOPC设计教程--DE2实践, 西安电子科技大学出版社,2007.4 :30--32

[4] 胡宴如,耿苏燕.高频电子线路,高等教育出版社,2005.12 :126--127

[5] 王金明.数字系统设计与Verilog HDL(第二版),电子工业出版社,2005.9

[6] 夏宇闻.Verilog数字系统设计教程,北京航空航天大学出版社,2008.6

[7] 李辉.基于FPGA的数字系统设计,西安-西安电子科技大学出版社,2008

第32页 共34页


本文标签: 信号 频率 输出 相位