基于FPGA的信号发生器设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

桂林电子科技大学毕业设计(论文)报告用纸第1页共31页1引言信号发生器是一种常用的信号源,广泛应用于电子电路、自动控制和科学试验等领域。传统的信号发生器一般基于模拟技术,但基于模拟技术的传统信号发生器能生成的信号类型比较有限,一般只能生成少数的规则波形信号。如果需要生成较复杂的波形信号,电路的复杂度以及设计难度都将大大增加。任意波形发生器就是为了解决这个问题而去研究的,任意波形发生器是利用DDS(直接数字频率合成)技术,通过在波形存储器内存储待输出信号的波形采样数据,并对波形存储器进行顺序的循环寻址来合成波形。只要改变波形存储器中的波形采样数据,就可以方便的得到需要波形的信号。因此任意波形发生器不仅能产生正弦、余弦、方波、三角波和锯齿波等常见信号,还可以通过各种编辑手段生成任意的波形采样数据,方便的合成传统信号发生器所不能生成的任意波形信号,从而满足各种测试和实验的需要。当今时代微电子技术的进步以及各应用领域多样化的要求,促使集成电路向高速、高集成度、低功耗的系统集成方向发展。在单芯片上集成嵌入式CPU、DSP、存储器和其他功能的片上系统(SOC)正处于高速发展中。Altera公司提出的片上可编程系统(SOPC)解决方案,使得FPGA在嵌入式系统设计领域中的地位越来越重要。SOPC(SystemOnProgrammableChip可编程片上系统)是一种特殊的嵌入式微处理器系统。首先,它是片上系统(SOC,SystemOnChip),即由单个芯片完成整个系统的主要逻辑功能;其次,它是可编程系统,以FPGA为硬件基础,具有灵活的设计方式,可裁减、可扩充、可升级,并具备软硬件系统在线可编程的功能。本设计就是采用SOPC方案,以DDS技术为核心技术构建了波形发生器的整个系统,这样可以避免了传统信号发生器的缺点,方便地实现了信号的产生。桂林电子科技大学毕业设计(论文)报告用纸第2页共31页21总体设计概述FPGA(现场可编程门阵列)是一项非常前沿和有发展前景的技术。FPGA的芯片实际上就是一片已经制造好的大规模集成电路芯片。这种芯片没有固定的功能,但里面有排列规整的门级电路和用于连接这些门级电路的连线。这些连线所连接的路径是可以改变的,这就是FPGA编程的根本。通过编程来控制这些连线使得大规模的门级电路连接成一个可实现复杂功能的数字电路。随着片上系统SOC的出现和流行,人们就试图在FPGA芯片实现片上可编程系统(SOPC)。于是就出现了NIOS核。NIOS核实际上是一个内嵌入FPGA的处理器,并且是一个软核。软核的概念就是处理器是可以在FPGA内部利用FPGA本身的逻辑单元电路,通过硬件描述语言编程生成的处理器。这个处理器可以根据用户的需要定制所需要的功能。关于这些说明会在后面提到。本设计就是利用上面论述的片上可编程系统技术来实现波形发生器。本设计的波形发生核心原理是DDS技术。于是可以先利用FPGA的逻辑单元生成一个DDS波形发生模块,再在FPGA内部生成一个NIOS核来控制DDS模块。这就是设计的核心思想。设计的总原理框图如下图1.1所示。图1.1系统总原理框图在本设计中,NIOS核的作用主要是控制和显示。其大概原理是:在DDS工作的过程中直接控制累加器的控制字,相位和幅度的控制值。而由于这些值都不是直接可以显示的数据,必须要经过一定的计算才能变成表示实际值的数值。所以,NIOS核要处理运算部分,然后把所计算得到的值通过Avalon总线输出到DDS并且调用LCD函数库把数值显示出来。为了得到良好的用户交互界面,设计中通过LCD液晶显示器和键盘来控制和显示波形的输出。键盘的设计是利用Avalon总线连接到NIOS核上面,NIOS核通过不断的读连接着键盘的端口的数据把接受到的控制信息进行处理。然后对应着不同的状态作出对应的动桂林电子科技大学毕业设计(论文)报告用纸第3页共31页3作。关于键盘和LCD显示在下面再详细讨论。2DDS原理2.1核心工作原理DDS(DirectDigitalFrequncySynthesis,直接数字频率合成)是从相位概念出发直接合成所需要波形的一种新的频率合成技术。由于其具有频率转换快、分辨率高、频率合成范围宽、相位噪声低且相位可控制的优点,因此,DDS技术常用于产生频率快、转换速度快、分辨率高、相位可控的信号,广泛应用于电子测量、调频通信、电子对抗等领域。近年来,已有DDS技术的函数信号发生器陆续被研制、生产和投入应用。本设计的DDS信号源,采用Altera公司的FPGA为核心,用Verilog语言设计逻辑功能,将波形查找表用FPGA的RAM块实现。DDS的核心原理如下图2.1所示。图2.1DDS原理框图设置一个从外部输入的控制字,控制字与SUM相加,相加后的结果又送回加法器输入端继续与控制字相加。同时,相加的结果作为存储器的地址输入端。即累加器的输出对存储器寻址。在设计中把波形的一个周期的数据存储在存储器里面,当累加器对存储器寻址一遍就输出一个周期,此时累加器在多次相加后累加寄存器(SUM)已经加满并且溢出。也就是说,累加器SUM每溢出一次,就对存储器寻址一遍,存储器就输出一个波形的数据。这样累加器不断相加,不断溢出就能不断输出连续的波形。从图中可以看出累加器实际上是一个计数器,只是累加器所加的幅度并不是一,而是可以调整的控制字。另外,控制字是在参考时钟的控制下实现相位累加的,在时钟上升沿相加,即在每个时钟周期内累加器加一次,累加的大小就是控制字。所以控制字越大累加器所得的和越大,累加寄存器SUM变化得越快,溢出得越快,这样在一定时间内存储器输出的波形周期数就越多,即频率越大。从上面分析知道,通过改变控制字可以很方便地控制输出波形的频率。那么,频率输出大小的控制就要通过精密的计算才能很好地得到实现。桂林电子科技大学毕业设计(论文)报告用纸第4页共31页4在设计中DDS的工作频率采用500KHZ的时钟,这个时钟频率较低,之所以选择这个频率在较后的章节再进行讨论。累加器在这个时钟下面累加,一秒钟累加的次数就是时钟频率500K,所以SUM的总增量就是500K*FW。在设计中,SUM选择20位,所以SUM溢出的总次数为500K*FW/2^20。其实,这就是输出波形的频率。对于频率的精度问题,假设FW增加一,根据公式频率就增加了500K/2^20。即频率增加的最小幅度,这就是频率的精度。从这里也可以看出只要增加SUM的位数就可以提高精度,而且对于用FPGA实现的系统来说是轻而易举的。所以用FPGA实现的DDS能实现很高的频率精度,只要系统时钟足够精确。2.2相位的控制本设计要求输出的波形的初始相位可以得到调整和显示。现在主要分析调整的原理,显示部分由NIOS核完成,在下面再详细讨论。在本设计中相位的调整方法主要是根据波形的存储原理来出发的。由于波形的一个周期内存储了2K个点(2048个点),若把每个点按1到2048来编号,那么如果在读波形数据的时候是从第1个点开始读,相位就是0。如果是从其他点开始读,把总的点数2047除以360,所得的结果所对应的编号就对应1个弧度的增量。所以,只要将所初始读取的数据的编号除以这个结果就是对应的初始相位。上面只是粗略的原理性分析,在逻辑上的具体设计从图1.1可以看到相位直接控制累加寄存器SUM,使得SUM在累加后所得的结果得到了一个固定的增量,下面列出了DDS累加器的完整程序:moduleaddr(clk,reset,phas,freqen,addr);inputclk,reset;input[19:0]phas;//相位控制字input[19:0]freqen;//相位控制字output[10:0]addr;//输出波形寻址地址reg[19:0]counter,counter0;assignaddr[10:0]=counter0[19:9];always@(posedgeclkornegedgereset)if(!reset)begincounter0=0;counter0=0;endelsebegincounter=counter+freqen;//频率控制字累加counter0=counter+phas;end//累加器加上初始相位增量endmodule程序描述的寄存器counter实际上就是累加寄存器SUM,上面已经说过它是在时钟上升沿不断累加,只是再累加后再加上相位的增量phas。最后送到存储器寻址的是大小经过初始相位调整的是寄存器counter0。当累加寄存器counter的为0时,counter0就等于桂林电子科技大学毕业设计(论文)报告用纸第5页共31页5相位增量phas,其实这就是DDS系统寻址的第一个地址,这个就是初始相位。根据上面关于数据点编号的分析知,只要把phas的值除以每一弧度所对应的值就可以得到相位的实际值了,这样就可以实现初始相位的调整和显示了。还有一个问题就是溢出的问题,寄存器counter,counter0都是11位的寄存器,最大模值为2K-1(注意2K就是2048)。而counter0=counter+phas,所以当counter加上phas大于2K时counter0就会产生溢出,而此时累加器counter还没加满。之所以产生这样的效果,主要是由于相位的增量。这个增量相当于把寻址的地址counter循环右移,右移的结果就送给counter0。反过来说,counter0就是在没有相位增量的寻址空间向右移动phas个单位后所得到的寻址结果。所以,很明显,phas就直接表示初始相位,但不是真正的相位值,具体的相位值还要按照上面所分析的算法来计算得出。2.3波形的存储在本设计中波形的存储分三个文件分别存储正弦波,三角波和方波。每个波形存储器(ROM)中存储了一个周期的波形数据。在选择输出不同的波形时,累加器要对相应的存储器寻址。其路由选择关系如图2.2所示:图2.2波形存储结构图其中,每个波形的存储深度为2K,波形幅度量化为8位。即每个存储器的容量为2K*8bit。从上图可以看出,地址数据从DDS累加器输出后输入到地址选择器,控制信号为S,S为两位,00时把地址送进正弦存储器,01时送三角波存储器,10时送方波存储器。这样经过对相应的存储器进行寻址后输出波形数据,波形数据再通过输出数据选择器控制输出,其控制信号同样是S,这样就可以选择与对应选择的地址的数据输出。由于存储器的存储深度只有11位(2K),而累加寄存器是20位,这样就存在一个地桂林电子科技大学毕业设计(论文)报告用纸第6页共31页6址不匹配的问题。解决办法,可以把数据8位直接接累加寄存器的高11位,这样当累加寄存器加满一次也就对波形地址寻址一遍,这样既可以保证地址匹配,又能保证精度。2.4幅度的调整幅度的调整本来是非常简单的,可以在信号输出的放大器级加一个滑动变阻器就可以实现电压的调整。但是,由于电阻本身的误差就很大,这样做很难保证调整的准确度,测量和显示也很难得到实现。在一些方案中,把放大器中的电阻分成几个阻值几乎完全一样的电阻,通过对电阻级数的选择,就像数摸转换芯片里面对电流的选择一样。选择不同的级就输出并显示对应的电压。但是,这样做只能简单的选择几种电压输出,电压的精度同样很难控制,电路的设计也比较复杂。为了避免上述一些问题,在设计中选择的数字调压的方案。我们知道对于D/A转换原理,当基准电压恒定时输入数据与转换出来的模拟信号是成正比关系的。如D/A0832转换芯片,其输入的数据模值为data,基准电压为Vrf,那么,输出模拟信号的幅值Vout=data*Vrf/2^8。当Vrf一定时,Vout与data成正比关系。数字调压就是在FPGA内部实现调压逻辑电路,简单来说就是对波形数据进行处理输出。根据上面的原理,在设计中设置一个比例值。在波形未经过处理的时候波形的最高点的数据是全1的,其对应的电压就是基准电压Vrf。先把它分成N份(data/N),再乘以一个不比N大的数n,即最后输出的数据dataout=data/N*n,相当于dataout=data*(n/

1 / 31
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功