基于FPGA实现的任意波形发生器的设计与研究
基于FPGA实现的任意波形发生器的设计与研究
a v n a e f sm l p r t o n ih d g e f it g a in c a a tr s i sb t a s a d u t b e f eu n y d a t g so ip e o e a in a d h g e r e o n e r t o h r c e it c u lo h sa j sa l r q e c
本文的重点 。D S 电路工作 时首先对 需要的波形进行采样, D
将 采样数值存入波形存储器作 为查 找表 ,然 后再通过查找表 将 数据 读 出来 ,经过 D A转换器转化成模拟信 号,并通过低 / 通 滤波器将 D C 转换器输 出的阶梯波 转换成光 滑的连续 信 A
号 。D S电路 的基 本 结 构 一 般 包 括 以下 几 部 分 :相 位 累 加 器 、 D
3 基于 F G P A的 D S电路的实现 D
3 1DD 的 结构 . S
境下的时序约束分析工具分析可知, 采用此结构 的 3 位相位 2 累加器的数据累加延时 比普通结构的进位 累加器 的数据延 时 减小 了一倍,提高 了 D S的相位 累加速度 。 D
D S 电路 的实现 是整个硬件 系统设计的关键所在,也是 D
设计 。
21 硬件设计方案 .
在任 意波形发 生器 的组成部分 中,硬件系统是整个系统 的核心。它包括波形 生成 电路 ,处理器 、存储器、接 口控制 模块、波 形选择 电路以及系统硬件控制模块等 电路 ,其它模
块通过相关接 口与其连接 ,构成 了一个完整 的硬件系统 。
2 硬件
基于 D S技术实现波形发生器 的方法主要有 以下两种 : D
3 2 1 相 位 累 加 器 的 设 计 ..
基于FPGA的任意波形发生器设计
典型的模拟滤波器有巴特沃斯 (Butterworth) 滤波器、切比雪夫 (Chcbyshcv) 滤波器、贝塞尔(Scsscl) 滤波器和椭I 圜(Ellipsc) 滤波器。
这几种低通滤波器都有各自的幅频特性。通带与阻带之间称为过渡带,过渡 带越窄,说明滤波器的选择性越好。巴特沃斯滤波器的响应最为平坦,它的 通带内没有波纹,在靠近零频处,有最平坦通带,趋向阻带时衰减单调增大, 缺点是从通带到阻带的过渡带最宽,对于带外干扰信号的衰减作用最弱,过 渡带不够陡峭。切比雪夫滤波器在通带内衰减在零值和一个土限值之间做等 起伏变化,阻带内衰减单调增大,通带或组带有波动,但过渡带比较陡峭。 贝塞尔滤波器通带内有较好的线性相位持性。椭圆函数滤波器不仅通带内有 起伏,阻带内也有起伏,而且过渡带陡峭。
? 单片机主要完成以下三个方向的任务:
(1) 根据键盘设置的波形和频率,完成波形的选择、编辑,并产生相应的 频率控制字送FPGA 。
(2) 将输出信号的频率送数码管显示。
(3) 与USB 接口芯片实现USB 接口电路并与上位PC 机通信。
主要要完成的工作:
? 1)基于FPGA 的DDS 实现 首先熟悉Quartus II 开发环境,其次对确定FPGA
工艺,无需另行架构,波形稳定度与准确度都比较高,有 理想的波形质量。但是,专用的DDS 芯片的数据表都已 经固化在芯片里,因此对于不同的应用其灵活性相对较, 无法灵活的实现任意波形的输出,同时DDS 芯片加单片 机的设计模式使硬件电路相对复杂。
基于DDS技术选择的实施方案
? 方案二: 基于FPGA 实现DDS 功能,通过单片机实现控制。此方 案的核心在于FPGA 的设计实现逻辑功能,通过对存储器 查表后输出信号,由相连接的数模转换器转换为要求的波 形。单片机作为控制器,易于控制与调试。
基于FPGA的任意波形发生器设计与实现
采用“激励—响应”方法进行系统参数测量时,需要产生已知的激励信号输入到被测系统,系统对激励信号输出相应的响应信号,通过对该响应的测定和分析找出被测系统的输入—输出关系,从而定义系统的性能。由此我们可以看出,高质量激励信号的产生是系统参数测量中一个重要的环节,标准理想的输入激励是整个测试系统正确工作的基础,它从根本上影响测量系统的性能。
传统的信号发生器一般基于模拟技术。它首先生成一定频率的正弦信号,然后再对这个正弦信号进行处理,从而输出其他波形信号(例如通过比较器可以输出方波信号,对方波信号通过积分器可以生成三角波信号等)。这种方法的关键在于如何生成特定频率的正弦信号。早期的信号发生器大都采用谐振法,后来出现采用锁相环等频率合成技术的信号发生器。但基于模拟技术的传统信号发生器能生成的信号类型比较有限,一般只能生成正弦波、方波、三角波等少数的规则波形信号。如果需要生成较复杂的波形信号,电路的复杂度及设计难度都将大大增加。
任意波形发生器是现代电子测试领域应用最为广泛的通用仪器之一,它的功能远比函数发生器强,可以产生各种理想及非理想的波形信号,对存在的各种波形都可以模拟,广泛应用于测试、通信、雷达、导航、宇航等领域。
1.2任意波形发生器的功能
任意波形发生器既具有其他信号源的信号生成能力,又可以通过各种编辑手段生成任意的波形采样数据,方便地合成其他信号源所不能生成的任意波形,从而满足测试和仿真实验的要求。任意波形发生器的主要功能[3]包括:
1.3国内外发展现状
采用可变时钟和计数器寻址波形存储器的任意波形发生器在一段时期内曾得到广泛的应用,其取样时钟频率较高且可调节,但其对硬件要求比较高,需要高性能的锁相环和截止频率可调的低通滤波器(或者多个低通滤波器),且频率分辨率低,频率切换速度较慢,已经逐步退出市场。
基于FPGA的任意波形发生器设计
基于FPGA的任意波形发生器设计与研究摘要:在此基于DDS技术进行任意波形发生器的研制。
以单片机为控制核心,采用FPGA芯片EP1C3T144C8,通过使用相位累加器和波形ROM等模块实现DDS功能,可产生正弦波、方波、三角渡与锯齿波等常规波形,而且能够产生任意波形,并通过键盘一一对应波形,从而满足研究的需要。
最后给出系统产生的测试数据,并对影响频谱纯度的杂散与噪声产生的原因进行分析。
关键词:FPGA;DDS;任意波形发生器;杂散引言任意波形发生器(Arbitrary Waveform Generator,AWG)是一种多波型的信号发生器,它不仅能产生正弦波、指数波等常规波形,也可以表现出载波调制的多样化,如:产生调频、调幅、调相和脉冲调制等。
更可以通过计算机软件实现波形的编辑,从而生成用户所需要的各种任意波形。
任意波形发生器的实现方案主要有程序控制输出、DMA输出、可变时钟计数器寻址和直接数字频率合成(DDS)等多种方式。
目前任意波形发生器的研制主要基于DDS 技术,与传统的频率合成器相比,DDS具有低成本、低功耗、高分辨率和快速转换时间等优点,广泛使用在通信、测量与电子仪器领域,是设备全数字化的一个关键技术。
1 任意波形发生器的理论分析1.1 DDS技术简介DDS(Direct Digital Synthesis)的概念由美国学者J.Tierney、C.M.Rader和B.Gold 在1971年提出。
该技术是从相位的概念进行频率合成,主要优点是输出相位连续、相对带宽较大、频率分辨率很高、可编程、准确度和稳定度都比较高。
DDS技术是利用查表法来产生波形,而通过修改存储在ROM里的数据,就可以产生任意波形。
1.2 DDS基本结构DDS主要有相位累加器、ROM波形查询表、数模转换器组成。
其基本框图如图1所示。
线性数字信号通过相位累加器逐级实现,波形函数存储在ROM中,根据累加器输出的相位值作为地址,寻找存储在ROM中的波形函数的幅度量化值,完成相位到幅值的转换,输出相对应的序列。
FPGA实现的任意波形发生器的设计
FPGA实现的任意波形发生器的设计波形发生器广泛应用于电子电路、自动控制和科学试验领域,是一种为电子测量工作提供符合严格技术要求的电信号设备,和示波器、电压表、频率计等仪器一样是最普通、最基本也是应用最为广泛的电子仪器之一,几乎所有电参量的测量都要用到波形发生器。
随着通信、雷达的不断发展,对信号源的频率稳定度、频谱纯度、频率范围和输出频率的个数以及信号波形的形状也提出越来越多的要求。
不仅要求能产生正弦波、方波等标准波形,还能根据需要产生任意波形,且操作方便,输出波形质量好,输出频率范围宽,输出频率稳定度、准确度及分辨率高,频率转换速度快且频率转换时输出波形相位连续等。
可见,研究制作高性能的任意波形发生器十分有必要,而且意义重大。
1 任意波形发生器的FPGA 实现系统框架如图1 所示,上位机产生任意波形数据,经USB2.0 控制器CY7C68013A 与FPGA(现场可编程门阵列)相连。
将数据下载到FPGA 的RAM 当中,再通过硬件电路依次从波形存储器中读取出来,经D/A 转换及滤波后得到所需信号波形输出。
关于DDS 的基本原理与结构在这里就不再加以阐述,用FPGA 按照DDS 的基本原理和结构设计和实现一个任意波形发生器,所以DDS 的几个基本部分都是应当具备的。
实现任意波形发生的关键在于把存放波形量化表的ROM换成了可以改写的RAM,这样通过与RAM 的接口可以改变存放在波形RAM 中的数据从而实现任意波形发生。
这里主要介绍控制部分、相位累加器、波形RAM 几个模块来叙述任意波形发生器的实现。
1.1 控制部分这个部分主要是要解决DDS 模块与单片机的接口问题。
在FPGA 的实现中,主要设计了2 个模块,一个是输入寄存器模块,为了接收单片机写入的频率控制字。
另外一。
课题设计 基于FPGA的多功能波形发生器的设计
课题实训基于FPGA的多功能波形发生器的设计一、实训目的1.懂得利用FPGA芯片实现多种波形的产生方法2.懂得多功能波形发生器的结构组成3.懂得一种复杂FPGA电路的设计二、实训器材1.EDA实验箱1台2.微型计算机1台3.MAX+PLUSII10.2软件1套4.下载电缆1条三、实训原理设计一个多功能波形发生器。
该波形发生器能产生正弦波、方波、三角波和由用户编辑的特定形状波形。
具体要求如下:(1)具有产生正弦波、方波、三角波、锯齿波4种周期性波形的功能。
(2)用键盘输入编辑生成上述4种波形(同周期)的线性组合波形。
(3)具有波形存储功能。
(4)输出波形的频率范围为100Hz~200kHz;重复频率可调,频率步进间隔≤100Hz。
(5)输出波形幅度范围0~5V(峰-峰值),可按步进0.1V(峰-峰值)调整。
(6)具有显示输出波形的类型、重复频率(周期)和幅度的功能。
(7)用键盘或其他输入装置产生任意波形。
多功能波形发生器系统由以下四部分组成.输入部分、FPGA部分、DAC、显示部分组成。
多功能波形发生器方框图四、设计程序(参考程序)--功能:实现4种常见波形正弦、三角、锯齿、方波(A、B)的频率、幅度可控输出(方波--A的占空比也是可控的),可以存储任意波形特征数据并能重现该波形,还可完成--各种波形的线形叠加输出。
--说明:SSS(前三位)和SW信号控制4种常见波形种哪种波形输出。
4种波形的频率、--幅度(基准幅度A)的调节均是通过up、down、set按键和4个BCD码置入器以及一--个置入档位控制信号(ss)完成的(AMP的调节范围是0~5V,调节量阶为1/51V)。
--其中方波的幅度还可通过u0、d0调节输出数据的归一化幅值(AMP0)进行进一步--细调(调节量阶为1/(51*255)V)。
方波A的占空比通过zu、zp按键调节(调节--量阶1/64*T)。
系统采用内部存储器——RAM实现任意输入波形的存储,程序只支--持键盘式波形特征参数置入存储,posting 为进入任意波置入(set)、清除(clr)状态--控制信号,SSS控制存储波形的输出。
基于fpga多功能波形发生器实验报告含程序
基于FPGA多功能波形发生器实验报告含程序基于FPGA的多功能波形发生器课程设计实验报告学院: 电气与控制工程学院班级: 微电子11011106080118 学号:姓名: 李少飞日期: 2015.4.2一、电路主体电路图二、各模块vhdl代码三、各模块仿真结果四、实验感悟一、实验主体电路二、各模块vhdl代码三角LIBRARY ieee; USE ieee.std_logic_1164.all;LIBRARY altera_mf;USE altera_mf.all;ENTITY sanjiao ISPORT(address : IN STD_LOGIC_VECTOR (7 DOWNTO 0); inclock : IN STD_LOGIC ;q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0));END sanjiao;ARCHITECTURE SYN OF sanjiao ISSIGNAL sub_wire0 : STD_LOGIC_VECTOR (7 DOWNTO 0); COMPONENT altsyncramGENERIC (clock_enable_input_a : STRING;clock_enable_output_a : STRING;init_file : STRING;intended_device_family : STRING;lpm_hint : STRING;lpm_type : STRING;numwords_a : NATURAL;operation_mode : STRING;outdata_aclr_a : STRING;outdata_reg_a : STRING;widthad_a : NATURAL;width_a : NATURAL;width_byteena_a : NATURAL);PORT (clock0 : IN STD_LOGIC ;address_a : IN STD_LOGIC_VECTOR (7 DOWNTO 0);q_a : OUT STD_LOGIC_VECTOR (7 DOWNTO 0));END COMPONENT;BEGINq <= sub_wire0(7 DOWNTO 0);altsyncram_component : altsyncramGENERIC MAP (clock_enable_input_a => "BYPASS",clock_enable_output_a => "BYPASS",init_file => "sanjiao.hex",intended_device_family => "Cyclone II",lpm_hint => "ENABLE_RUNTIME_MOD=YES, INSTANCE_NAME=rom3", lpm_type => "altsyncram",numwords_a => 256,operation_mode => "ROM",outdata_aclr_a => "NONE",outdata_reg_a => "UNREGISTERED",widthad_a => 8,width_a => 8,width_byteena_a => 1)PORT MAP (clock0 => inclock,address_a => address,q_a => sub_wire0);END SYN;-正弦LIBRARY ieee;USE ieee.std_logic_1164.all;LIBRARY altera_mf;USE altera_mf.all;ENTITY sinx ISPORT(address : IN STD_LOGIC_VECTOR (7 DOWNTO 0); inclock : IN STD_LOGIC ;q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0));END sinx;ARCHITECTURE SYN OF sinx ISSIGNAL sub_wire0 : STD_LOGIC_VECTOR (7 DOWNTO 0); COMPONENT altsyncramGENERIC (clock_enable_input_a : STRING;clock_enable_output_a : STRING;init_file : STRING;intended_device_family : STRING;lpm_hint : STRING;lpm_type : STRING;numwords_a : NATURAL;operation_mode : STRING;outdata_aclr_a : STRING;outdata_reg_a : STRING;widthad_a : NATURAL;width_a : NATURAL;width_byteena_a : NATURAL);PORT (clock0 : IN STD_LOGIC ;address_a : IN STD_LOGIC_VECTOR (7 DOWNTO 0); q_a : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) );END COMPONENT;BEGINq <= sub_wire0(7 DOWNTO 0);altsyncram_component : altsyncramGENERIC MAP (clock_enable_input_a => "BYPASS",clock_enable_output_a => "BYPASS",init_file => "sinx.hex",intended_device_family => "Cyclone II",lpm_hint => "ENABLE_RUNTIME_MOD=YES, INSTANCE_NAME=ROM1", lpm_type => "altsyncram",numwords_a => 256,operation_mode => "ROM",outdata_aclr_a => "NONE",outdata_reg_a => "UNREGISTERED",widthad_a => 8,width_a => 8,width_byteena_a => 1)PORT MAP (clock0 => inclock,address_a => address,q_a => sub_wire0);END SYN;方波LIBRARY ieee;USE ieee.std_logic_1164.all;LIBRARY altera_mf;USE altera_mf.all;ENTITY fangbo ISPORT(address : IN STD_LOGIC_VECTOR (7 DOWNTO 0); inclock : IN STD_LOGIC ;q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0));END fangbo;ARCHITECTURE SYN OF fangbo ISSIGNAL sub_wire0 : STD_LOGIC_VECTOR (7 DOWNTO 0); COMPONENT altsyncramGENERIC (clock_enable_input_a : STRING;clock_enable_output_a : STRING;init_file : STRING;intended_device_family : STRING;lpm_hint : STRING;lpm_type : STRING;numwords_a : NATURAL;operation_mode : STRING;outdata_aclr_a : STRING;outdata_reg_a : STRING;widthad_a : NATURAL;width_a : NATURAL;width_byteena_a : NATURAL);PORT (clock0 : IN STD_LOGIC ;address_a : IN STD_LOGIC_VECTOR (7 DOWNTO 0);q_a : OUT STD_LOGIC_VECTOR (7 DOWNTO 0));END COMPONENT;BEGINq <= sub_wire0(7 DOWNTO 0);altsyncram_component : altsyncramGENERIC MAP (clock_enable_input_a => "BYPASS",clock_enable_output_a => "BYPASS",init_file => "fangbo.hex",intended_device_family => "Cyclone II",lpm_hint => "ENABLE_RUNTIME_MOD=YES, INSTANCE_NAME=rom2", lpm_type => "altsyncram",numwords_a => 256,operation_mode => "ROM",outdata_aclr_a => "NONE",outdata_reg_a => "UNREGISTERED",widthad_a => 8,width_a => 8,width_byteena_a => 1)PORT MAP (clock0 => inclock,address_a => address,q_a => sub_wire0);END SYN;斜波LIBRARY ieee;USE ieee.std_logic_1164.all;LIBRARY altera_mf;USE altera_mf.all;ENTITY xiebo ISPORT(address : IN STD_LOGIC_VECTOR (7 DOWNTO 0); inclock : IN STD_LOGIC ;q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0));END xiebo;ARCHITECTURE SYN OF xiebo ISSIGNAL sub_wire0 : STD_LOGIC_VECTOR (7 DOWNTO 0);COMPONENT altsyncramGENERIC (clock_enable_input_a : STRING;clock_enable_output_a : STRING;init_file : STRING;intended_device_family : STRING;lpm_hint : STRING;lpm_type : STRING;numwords_a : NATURAL;operation_mode : STRING;outdata_aclr_a : STRING;outdata_reg_a : STRING;widthad_a : NATURAL;width_a : NATURAL;width_byteena_a : NATURAL);PORT (clock0 : IN STD_LOGIC ;address_a : IN STD_LOGIC_VECTOR (7 DOWNTO 0); q_a : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) );END COMPONENT;BEGINq <= sub_wire0(7 DOWNTO 0);altsyncram_component : altsyncramGENERIC MAP (clock_enable_input_a => "BYPASS",clock_enable_output_a => "BYPASS",init_file => "xiebo.hex",intended_device_family => "Cyclone II",lpm_hint => "ENABLE_RUNTIME_MOD=YES, INSTANCE_NAME=rom4", lpm_type => "altsyncram",numwords_a => 256,operation_mode => "ROM",outdata_aclr_a => "NONE",outdata_reg_a => "UNREGISTERED",widthad_a => 8,width_a => 8,width_byteena_a => 1)PORT MAP (clock0 => inclock,address_a => address,q_a => sub_wire0);END SYN;四选一library ieee;use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity choice_4 isport(sel:in std_logic_vector(1 downto 0); d1,d2,d3,d4:instd_logic_vector(7 downto 0);q:out std_logic_vector(7 downto 0)); end choice_4;architecture behave of choice_4 is beginprocess(sel)begincase sel iswhen "00"=>q<=d1;when "01"=>q<=d2;when "10"=>q<=d3;when "11"=>q<=d4;when others=>null;end case;end process;end architecture;2-4译码器library ieee;use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; ENTITY decoder24 ISPORT(sel:IN std_logic_vector(1 downto 0);en1,en2,en3,en4:OUT std_logic); END;ARCHITECTURE be OF decoder24 IS BEGINprocess(sel)BEGINcase sel iswhen "00" => en1 <='1'; when "01" => en2 <='1'; when "10" =>en3<='1'; when "11" => en4 <='1'; when others=>null; end case;END process;END;正选扫描电路LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; --正弦信号发生器源文件USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY sins ISPORT ( CLK,en ,reset: IN STD_LOGIC; --信号源时钟DOUT : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) );--8位波形数据输出 END sins;ARCHITECTURE behave OF sins IS COMPONENT sinx --调用波形数据存储器LPM_ROM文件:datarom.vhd声明 PORT(address : IN STD_LOGIC_VECTOR (7 DOWNTO 0);--8位地址信号 inclock : IN STD_LOGIC ;--地址锁存时钟q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) ); END COMPONENT;SIGNAL Q1 : STD_LOGIC_VECTOR (7 DOWNTO 0); --设定内部节点作为地址计数器BEGINPROCESS(CLK,en,reset ) --LPM_ROM地址发生器进程BEGINif reset='0' then Q1<="00000000";elsif CLK'EVENT AND CLK = '1' and en='1' THEN Q1<=Q1+1; --Q1作为地址发生器计数器 END IF;END PROCESS;u1 : sinx PORT MAP(address=>Q1, q => DOUT,inclock=>CLK);--例化 END;斜波扫描电路LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; --正弦信号发生器源文件USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY xiebos ISPORT ( CLK,en ,reset: IN STD_LOGIC; --信号源时钟DOUT : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) );--8位波形数据输出 END xiebos;ARCHITECTURE behave OF xiebos IS COMPONENT xiebo --调用波形数据存储器LPM_ROM文件:datarom.vhd声明 PORT(address : IN STD_LOGIC_VECTOR (7 DOWNTO 0);--8位地址信号 inclock : IN STD_LOGIC ;--地址锁存时钟q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) );END COMPONENT;SIGNAL Q1 : STD_LOGIC_VECTOR (7 DOWNTO 0); --设定内部节点作为地址计数器 BEGINPROCESS(CLK,en,reset ) --LPM_ROM地址发生器进程BEGINif reset='0' then Q1<="00000000";elsif CLK'EVENT AND CLK = '1' and en='1' THEN Q1<=Q1+1; --Q1作为地址发生器计数器 END IF;END PROCESS;u1 : xiebo PORT MAP(address=>Q1, q => DOUT,inclock=>CLK);--例化 END;方波扫描电路LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; --正弦信号发生器源文件USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY fangbos ISPORT ( CLK,en ,reset: IN STD_LOGIC; --信号源时钟DOUT : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) );--8位波形数据输出 END fangbos;ARCHITECTURE behave OF fangbos ISCOMPONENT fangbo --调用波形数据存储器LPM_ROM文件:datarom.vhd声明PORT(address : IN STD_LOGIC_VECTOR (7 DOWNTO 0);--8位地址信号 inclock :IN STD_LOGIC ;--地址锁存时钟q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) ); END COMPONENT;SIGNAL Q1 : STD_LOGIC_VECTOR (7 DOWNTO 0); --设定内部节点作为地址计数器 BEGINPROCESS(CLK,en,reset ) --LPM_ROM地址发生器进程BEGINif reset='0' then Q1<="00000000";elsif CLK'EVENT AND CLK = '1' and en='1' THEN Q1<=Q1+1; --Q1作为地址发生器计数器 END IF;END PROCESS;u1 : fangbo PORT MAP(address=>Q1, q => DOUT,inclock=>CLK);--例化 END;三角波扫描电路LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; --正弦信号发生器源文件USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY sanjiaos ISPORT ( CLK,en ,reset: IN STD_LOGIC; --信号源时钟DOUT : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) );--8位波形数据输出 END sanjiaos;ARCHITECTURE behave OF sanjiaos IS COMPONENT sanjiao --调用波形数据存储器LPM_ROM文件:datarom.vhd声明 PORT(address : IN STD_LOGIC_VECTOR (7 DOWNTO 0);--8位地址信号 inclock : IN STD_LOGIC ;--地址锁存时钟q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) ); END COMPONENT;SIGNAL Q1 : STD_LOGIC_VECTOR (7 DOWNTO 0); --设定内部节点作为地址计数器 BEGINPROCESS(CLK,en,reset ) --LPM_ROM地址发生器进程BEGINif reset='0' then Q1<="00000000";elsif CLK'EVENT AND CLK = '1' and en='1' THEN Q1<=Q1+1; --Q1作为地址发生器计数器 END IF;END PROCESS;u1 : sanjiao PORT MAP(address=>Q1, q => DOUT,inclock=>CLK);--例化END;方波仿真三、各模块仿真结果斜波仿真三角仿真正弦仿真四选一仿真二四译码器四、实验感悟大学的生活就要接近尾声,为了巩固我们所学的专业知识,学院为我们开设了这门实验课,说真的我十分喜欢FPGA课程,因为从一开始我就认准这个行业会是将来发展的热门行业,因此我不仅把全部的精力投注到了这门实验上,而且为了进一步学到多的知识,我选择了有关FPGA的毕业设计课题。
基于fpga的任意波形发生器的设计与实现
基于fpga的任意波形发生器的设计与实现
一、设计概述
本设计的主要目的是利用FPGA(可编程逻辑器件)来实现一个任意波形发生器,可以产生任意的波形,用于模拟信号的测试和测量。
本设计利用FPGA的自定义功能,根据用户输入的参数,设计一个可以产生任意波形的发生器,并将其实现在一个硬件系统中。
二、系统架构
本系统的架构主要由以下几个部分组成:
(1)输入模块:用户输入的参数由输入模块接收,并将其转换为FPGA可识别的数据格式。
(2)FPGA模块:FPGA模块将用户输入的参数转换为可以产生任意波形的算法,并将其实现在FPGA的芯片上。
(3)输出模块:输出模块将FPGA模块产生的波形输出到外部设备,以便进行测试和测量。
三、设计实现
(1)输入模块:输入模块负责接收用户输入的参数,包括波形类型、频率、相位等,并将其转换为FPGA可识别的数据格式。
(2)FPGA模块:FPGA模块负责将用户输入的参数转换为可以产生任意波形的算法,并将其实现在FPGA的芯片上。
(3)输出模块:输出模块负责将FPGA模块产生的波形输出到外部设备,以便进行测试和测量。
基于FPGA的波形信号发生器的设计
基于FPGA的波形信号发生器的设计1、引言随着微电子技术的发展,20世纪80年代中期出现的现场可编程门阵列FPGA器件得到了飞速发展。
由于该器件具有体系结构、逻辑单元灵活、集成度高以及适用范围广等特点,可实现大规模和超大规模的集成电路,而且编程灵活。
因而在数字信号处理中得到了广泛应用,越来越受到硬件电路设计工程师们的青睐。
波形发生器是一种广泛应用于电子电路、自动控制和科学实验等领域的信号源,从某种意义上说高品质的的信号源更是实现高性能指标的关键。
正弦波信号、三角波信号和方波信号都是科研中最常用的三种信号形式,应非常广泛。
它们通常作为标准信号,用于电子电路的性能试验或参数测量。
本文就是利用GW48—SOPC/DSP实验开发系统采用宏功能模块较为方便地实现了正弦波信号、三角波信号和方波信号。
可编程门阵列(FPGA)中的波形发生器控制电路钟,它通过外来控制信号和高速时钟信号,向波形数据ROM 发出地址信号.输出波形的频率由发出的地址信号的速度决定:当以固定频率扫描输出地址时,模拟输出波形是固定频率。
而当以周期性时变方式扫描输出地址时.则模拟输出波形为扫频信号。
波形数据ROM中存有发生器的波形数据.如正弦波数据。
当接受来自FPGA的地址信号后,将从数据线输出相应的波形数据,地址变化得越快,则输出数据的速度越快,从而使D/A输出的模拟信号的变化速度越快。
在本实验设计过程中采用可编程逻辑器件FPGA,并通过运用Alter公司推出的功能强大的支持可编程逻辑器件的设计环境QuartusII软件和基于超高速硬件描述语言VHDL编程语言,可以进行软件模拟检测设计的正确性,大大简化了系统结构,降低了成本,提高了系统的性能和可靠性,从而方便的实现了信号(正弦信号、三角波信号、方波信号)发生器电路。
2、波形发生器的设计原理2.1 硬件电路的设计的理论基础本设计的设计基础是DDS(直接数字频率合成)技术。
DDS(直接数字频率合成)技术是七十年代初提出的一种新的频率合成技术,它是一种心的全数字频率合成技术,其数字结构满足了现代电子系统的许多要求。
基于FPGA的任意波形发生器的设计
在其中存储1,1/2,1/4波形的数据。用C语言程序来计
算信号波形采样点的数值既简单又精确,而且用C语言可
以很容易地实现各规则信号采样点的计算。故可利用C
编程实现一个正弦信号,并将该正弦信号的256个采样点
的数值精确计算出来,再将这些数据添加到ROM表中,
从而实现查表功能。
在系统中用到了8位数据空间,所以写数据的单片机
程序为: for(i一0;i<256;i++) {xbyte{-il—floor(125.5*(1+sin(2。pi*i/256))); for(j一0,j<10000;j++);
}
在程序中要注意数字系统是不能用到小于0的数值 的,所以要在生成的所有数值中将所生成的一1到+1的 值通过加1全部抬到+1到+2后,再通过256/2来降低 应得到的数值。
1方案选择
产生可变频信号的方法有很多种,利用传统的LC振 荡电路只要改变其中电感的值,就可以得到不同的频率 值。但是他却存在着一系列缺点,如带宽不足、输出频率 不够准确等,
晶体振荡电路也可以构成反馈振荡器,决定频率的元 件是晶体,通常把晶体振荡器也称为晶振。根据试验显 示,他的频率稳定度可以达到10叫量级。虽然所担心的频 率输出不稳的问题可以得到很好地解决,但是同时也遇到 了一个难题:晶振一旦制作好,频率就被固定,不可以调
收稿日期:2007一06—11
万方数据
整,但是单一的频率对于产生一种实用的信号来说当然是 不符合要求的。+
随着电子技术的发展和大规模集成电路制作工艺的 提高,DDS(Direct Digital Frequency Synthesis)技术的出 现无疑提供了一种新的选择。 2 DDS的工作原理
DDS的工作原理图如图1所示。
EDA课程设计基于FPGA的任意波形发生器
EDA课程设计__基于FPGA的任意波形发生器学院:通信与电子工程学院摘要本文主要探索了应用FPGA灵活可重复编程和方便在系统重构的特性,以Verilog HDL为设计语言,运用QuarrtusII软件,将硬件功能以软件设计来描述,提高了产品的集成度,缩短开发周期。
所设计的波形发生器可产生正弦波(sina_wave)、锯齿波(swat_wave)、矩形波(squr_wave)、三角波(trig_wave)四种信号,能够实现信号的转换并且频率可调;关键字:任意波形发生器FPGA Verilog HDL QuartusIIAbstractThis paper explored the application of flexible and reprogrammable FPGA and convenience features in the system reconfiguration to Verilog HDL design language, the hardware functions to software design to describe and improve the integration of products and shorten the development cycle. Waveform generator designed to produce sine wave (sina_wave), ramp (swat_wave), rectangular wave (squr_wave), triangular wave (trig_wave) four signals, to achieve signal conversion and frequency adjustable;Keywords: Arbitrary Waveform Generator FPGA Verilog HDL QuartusII目录摘要 (I)ABSTRACT (II)目录 (III)第1章绪论 (1)1.1概述 (1)1.2任意波形发生器的功能 (1)1.3国外发展现状 (2)第2章波形发生器的基本理论 (4)2.1 FPGA简介 (4)2.2Verilog语言简介 (4)2.2.1 Verilog语言概述 (4)2.2.2VerilogHDL基本结构 (5)2.3QuarrtusII概述 (6)第3章方案设计 (8)3.1 系统介绍 (8)3.2波形发生器各个模块设计 (9)3.2.1 Wave_gen 模块 (9)3.2.2 波形数据存储ROM 模块 (9)第4章波形发生器软件仿真 (11)4.1设计平台及仿真工具 (11)4.2仿真过程 (11)结论 (14)附录 (16)第1章绪论1.1 概述波形发生器是一种常用的信号源,广泛应用于电子电路,自动控制系统,教学实验等领域,目前使用出现了大量能够产生多种波形且性能稳定的任意波形发生器,但大多数方案都是基于串行或并行总线进行数据的传输,这种方案虽然成本较低,但系统的实时性较差,难以满足复杂波形的大数据量的传输要求。
基于FPGA的任意波形发生器设计探究
Vo l _ 3 ONo . 8
Au g .2 01 4
基于 F P G A的任意波形 发生器设计探究
徐 宇 宝 ,张 晓 东
( 皖西 学院 机械 与 电子 工程 学 院 ,安徽 六安 2 3 7 0 1 2 )
摘 要 :本 文 对 F P G A 芯 片 实现 的 DDS结 构 中数 字部 分 与接 口部 分 进 行 了设 计 ,将 RoM 改成
3 DD¥ 工 作 原 理
D D S工作 原理 如 图一所 示 .
图 1 基本 D D S结 构 原 理 图
相位 累 加器 是 D D S技 术 的核 心 ,它 的作用 就
和一个计数器 相似 , 当一个 时钟信号到来 , 就可 以
使 相位 累加 器 的输 出得 到增 加 , 增 加 的是一 个 步长
不 准确 , 带宽不足等缺点. 还有 一种 方 法 就 是 晶 体
信号的一个周期 的幅度 . 相位累加器中输 出信号 的 信息可 以从数据表中读出 , 这种信息是当前相位累 加器输 出信号相位值对应的幅度数据 , 并将这种数 据通过 D A C的转换功能变成模拟信号波形进行输
出 ,相 位 累加 器 通 过 线性 相 位 累 加 的方 式 进 行 叠 加 ,当达到 满量 程 时就 可 以进行 一 次计 数溢 出 , 输
作速度 , 我们可以用一种在时序电路设计中常用 的
设计 方 法 , 就 是 流水 线 结 构法 , 通过 流水 线结 构 来 实现 的 累加器运 行 过程是 这样 的 , 现将 一个 位数 很 长 的加法 拆 分成 N比较 短 的加 法 ,并 在 N个 时钟 周 期 种流 水 线 结构 后 使 得加 法 器 的字 长 变 的更 短 了, 这对 于 F P G A提 高其工 作频率 具有 重大 意义 l 5 1 . 下 面 我 们来 详 细 的对 累加 器 流水 结 构 的 实 现 进 行 分析 , 将 一 个字 长 为 N的 累加器 进 行拆 分 , 分
基于FPGA的任意波形发生器的设计
1绪论1.1频率合成技术概述所谓频率合成技术指的是由一个或者多个具有高稳定度和高精确度的频率参考源,通过在频率域中的线性运算得到具有同样稳定度和精确度的大量的离散频率的技术。
完成这一功能的装置被称为频率合成器。
频率合成信号发生器是利研、教学实验及各种电子测量技术中很重要的一种信号源,频率合成器应用范围非常广泛,特别是在通信系统、雷达系统中,频率合成器起了极其重要的作用。
随着电子技术的不断发展。
频率合成器的应用范围也越来越广泛,对信号源的性能要求也越来越高,要求信号源的频率稳定度、准确度及分辨率要高,以适应各种高精度的测量,为了满足这种高的要求,各国都在研制一此频率合成信号源,这种信号源一般都是由一个高稳定度和高准确度的标准参考频率源,采用锁相技术产生千百万个具有同一稳定度和准确度的频率信号源,为了达到高的分辨率往往要采用多个锁相环和小数分频技术。
主要指标有以下这些(1) 输出频率的范围指的是输出的最小频率和最大频率之间的变化范围。
(2) 频率稳定度指的是输出频率在一定时间间隔内和标准频率偏差的数值,它分长期、短期和瞬间稳定度三种。
(3) 频率分辨率指的是输出频率的最小间隔。
(4) 频率转换时间指的是输出由一种频率转换成另一种频率的时间。
(5) 频谱纯度频谱纯度以杂散分量和相位噪声来衡量,杂散分为谐波分量和非谐波分量两种,主要由频率合成过程中的非线性失真产生;相位噪声是衡量输出信号相位抖动大小的参数。
(6) 调制性能指的是频率合成器是否具有调幅(AM)、调频(FM)、调相(PM)等功能。
1.2频率合成器的实现方法基于FPGA的数字合成信号发生器频率合成器的实现方法大体可以分成三种:直接频率合成、间接频率合成、直接数字频率合成。
下面对这三种方法进行一下简单的介绍。
直接频率合成是一种比较早期的频率合成方法,这种频率合成方法使用一个和多个标准。
频率源先经过谐波发生器产生各次谐波,然后经过分频、倍频、混频滤波等处理产生所需要的各个频点。
基于FPGA的任意波形发生器的设计和实现
在腐蚀领域和电镀行业,常常需要使用任意波形的电流电压信号进行生产和测试。
任意波形是指频率可变、幅值可变、相位可变的正弦波形和其他波形,如三角波形、锯齿波、特殊波形等。
目前任意波形发生器大多采用直接数字频率合成(DDS)技术,即将波形的数字量信号存储于存储器中,嵌入式主机以一定的速率依次将存储器单元中的波形数据逐个发送给D/A转换器,合成为需要的波形。
随着微处理器日益广泛的应用和大规模集成电路技术的发展,出现了大量能够产生多种波形且性能稳定的任意波形发生器,但大多数方案都是基于串行或并行总线进行数据的传输,这种方案虽然成本较低,但系统的实时性较差,难以满足复杂波形的大数据量的传输要求。
我们设计了一种基于FPGA芯片的任意波形发生器,充分利用了FPGA强大的逻辑功能,实现了利用单片FPGA芯片控制整个系统的方案。
同时选择USB2.0接口芯片CY7C68013,它能较好地与FPGA芯片合作,完成系统预先设计的功能,使总体电路简单,成本低廉,产生的波形信号精度较高。
数字波形数据从上位机通过USB总线直接存储在SRAM数据存储器中,通过FPGA控制,将波形数据读出,送入后向通道进行D/A转换和放大处理后得到所需的模拟信号波形。
与传统的发生器在ROM或FLASH存储波形数据的方法相比,具有更大的灵活性。
1 系统总体结构及工作过程波形发生器以FPGA为核心,它控制着整个系统的读、写、输出等操作,系统框图如图l所示。
上位机将数字波形数据通过USB2.O总线送到数据存储器中,数据存储器循环地将波形数据发送到DAC电路,由DDS电路产生相应的DAC刷新时钟(0~1MHz,步进0.02Hz),DAC输出波形经缓冲放大、低通滤波、放大输出。
输出的波形频率为0.1Hz(DC)~1MHz(-3dB),频率分辨率为0.01Hz。
本系统主要由五部分组成:(1)上位机。
主要功能是利用仿真软件(如CVI、MATLAB、VB等)产生所需波形数据,并通过USB接口下载到波形发生器中,其次就是存储USB2.0接口芯片的驱动(2)USB2.0接口控制器芯片。
基于FPGA的任意波形信号发生器的设计与实现
基于FPGA的任意波形信号发生器的设计与实现发布时间:2021-05-13T09:58:53.630Z 来源:《中国电力企业管理》2021年2月作者:赵晓燕[导读] 任意波形信号发生器是一种能够提供正弦波、三角波、矩形波、高斯波形、不规则波形等任意波形的设备,常应用于高级研究、复杂电子测试等领域中需求苛刻激励源的情况。
现有的信号发生器具有价格高、体积大、通道数少、操作复杂等缺点,现有的直接数字频率合成信号发生器具有不适宜产生不规则任意波形的缺点。
南京先进激光技术研究院赵晓燕 210000摘要:任意波形信号发生器是一种能够提供正弦波、三角波、矩形波、高斯波形、不规则波形等任意波形的设备,常应用于高级研究、复杂电子测试等领域中需求苛刻激励源的情况。
现有的信号发生器具有价格高、体积大、通道数少、操作复杂等缺点,现有的直接数字频率合成信号发生器具有不适宜产生不规则任意波形的缺点。
本文提出一种基于FPGA的任意波形信号发生器,可以提供至少六路任意波形信号发生通道,具有面向用户的操作界面,具有精度高、成本低、体积小、便于操作、便于集成等优点,能有效弥补现有信号发生器产品和直接数字频率合成信号发生器的缺点。
关键词:信号发生器、任意波形、FPGA、多通道引言信号发生器[1]是一种可以产生各种频率、各类波形和各种输出电平的电信号的设备,常被用作激励源或信号源,广泛应用于生产、科技、工业、教学等各项领域中。
任意波形信号发生器是一种可以产生正弦波、三角波、矩形波、高斯波形、不规则波形等任意波形的设备,常应用于高级研究、复杂电子测试等领域中需求苛刻激励源的情况。
目前,国内的信号发生器主要有两种:一种是成熟的面向市场的信号发生器产品,具有集成度高、功能多、产品型号丰富的优点,但具有价格高、体积大、通道数少、任意波形产生操作复杂的缺点,不便于应用于系统集成,以及需求多路通道同步工作的场景下。
另一种是基于直接数字频率合成(DDS)技术实现的信号发生器,具有成本低、体积小的突出优点,但该方法多以产生基础信号的调幅、调频、调相信号为主,不适宜产生不规则的任意波形,不能满足特定需求场合。
EDA课程设计_基于FPGA的任意波形发生器
EDA课程设计__基于FPGA地任意波形发生器学院:通信与电子工程学院摘要本文主要探索了应用FPGA灵活可重复编程和方便在系统重构地特性,以Verilog HDL 为设计语言,运用QuarrtusII软件,将硬件功能以软件设计来描述,提高了产品地集成度,缩短开发周期.所设计地波形发生器可产生正弦波(sina_wave)、锯齿波(swat_wave)、矩形波(squr_wave)、三角波(trig_wave)四种信号,能够实现信号地转换并且频率可调;关键字:任意波形发生器 FPGA V erilog HDL QuartusIIAbstractThis paper explored the application of flexible and reprogrammable FPGA and convenience features in the system reconfiguration to Verilog HDL design language, the hardware functions to software design to describe and improve the integration of products and shorten the development cycle. Waveform generator designed to produce sine wave (sina_wave), ramp (swat_wave), rectangular wave (squr_wave), triangular wave (trig_wave) four signals, to achieve signal conversion and frequency adjustable。
Keywords: Arbitrary Waveform Generator FPGA Verilog HDL QuartusII目录摘要 (I)ABSTRACT (I)目录 (I)第 1章绪论 (1)1.1概述 (1)1.2任意波形发生器地功能 (1)1.3国内外发展现状 (2)第2章波形发生器地基本理论 (3)2.1 FPGA简介 (3)2.2V ERILOG 语言简介 (4)2.2.1 Verilog语言概述 (4)2.2.2 VerilogHDL基本结构 (4)2.3Q UARRTUS II概述 (6)第3章方案设计 (7)3.1 系统介绍 (7)3.2波形发生器各个模块设计 (8)3.2.1 Wave_gen 模块 (8)3.2.2 波形数据存储 ROM 模块 (9)第4章波形发生器软件仿真 (10)4.1设计平台及仿真工具 (10)4.2仿真过程 (10)结论 (13)附录 (14)第 1章绪论1.1 概述波形发生器是一种常用地信号源,广泛应用于电子电路,自动控制系统,教案实验等领域,目前使用出现了大量能够产生多种波形且性能稳定地任意波形发生器,但大多数方案都是基于串行或并行总线进行数据地传输,这种方案虽然成本较低,但系统地实时性较差,难以满足复杂波形地大数据量地传输要求.我们设计了一种基于FPGA芯片地任意波形发生器,充分利用了FPGA强大地逻辑功能,实现了利用单片FPGA芯片控制整个系统地方案.1.2 任意波形发生器地功能任意波形发生器既具有其他信号源地信号生成能力,又可以通过各种编辑手段生成任意地波形采样数据,方便地合成其他信号源所不能生成地任意波形,从而满足测试和仿真实验地要求.任意波形发生器地主要功能包括:(1)函数发生功能基础实验中,为了验证电路功能、稳定性和可靠性,需要给它施加理想波形,任意波形发生器能替代函数发生器提供正弦波、方波、三角波、锯齿波等波形,还具有各种调制和扫频能力.利用任意波形发生器地这一基础功能就能满足一般实验地信号需求.(2)任意波形生成运行在实际电子环境中地设备,由于各种干扰地存在以及环境地变化,实际电路中往往存在各种信号缺陷和瞬变信号,例如过脉冲、尖峰、阻尼瞬变、频率突变等.任意波形发生器可以模拟这些特殊信号,以测试系统地实际性能.(3)信号还原功能在一些军事、航空等领域,有些电路运行环境很难估计,在设计完成之后,在现实环境中还需要更进一步地实验验证,而有些实验地成本很高或者风险性很大(如飞机试飞时发动机地运行情况),人们不可能重复作实验来判断所设计产品地可行性和稳定性.此时,可以利用任意波形发生器地信号还原功能.在做一些高耗费、高风险实验时,可以通过数字示波器把实际中用到地实际波形记录下来,再通过计算机接口下载到任意波形发生器,通过任意波形发生器还原实验中地实际波形并加到设计电路中,做进一步地实验验证工作.1.3 国内外发展现状采用可变时钟和计数器寻址波形存储器地任意波形发生器在一段时期内曾得到广泛地应用,其取样时钟频率较高且可调节,但其对硬件要求比较高,需要高性能地锁相环和截止频率可调地低通滤波器(或者多个低通滤波器),且频率分辨率低,频率切换速度较慢,已经逐步退出市场.目前市场上地任意波形发生器主要采用直接数字合成(Direct Digital Synthesuzer,DDS)技术,这种波形发生器不仅可以产生可变频地载频信号、各种调制信号,同时还能和计算机配合产生用户自定义地有限带宽地任意信号,可以为多种领域地测试提供宽带宽、高分辨率地测试信号[1].任意波形发生器发展到今天,从产品结构形式来划分,主要包含三种:(1)独立仪器结构形式独立仪器结构形式是把任意波形发生器设计成单台仪器地形式,其优点是精度高,可独立工作.(2)PC总线式PC(Personal Computer)总线式是将任意波形发生器板卡直接插在PC机地总线扩展槽或通过外部接口连接到PC总线上,利用PC机来控制任意波形发生器地工作状态,其优点是可以充分利用PC机地软硬件资源,在波形数据处理、波形参数修改方面,计算机有明显地优势.(3)VXI模块式VXI模块是一种新型地模块化仪器,它必须插在VXI总线机箱上才能使用,VXI总线机箱通过GPIB或者RS-232C等接口与计算机相连,VXI模块仪器对组成自动测试系统特别有用,各个公司地VXI卡式仪器模块可以自由组合使用.从发展状况来看,国外任意波形发生器地研制及生产技术已经较为成熟.以安捷伦(Agilent)和泰克(Tektronix)为代表地国际电子测量仪器公司在此领域进行了卓有成效地研究和开发,其产品无论在技术上还是市场占有率方面在国际上都享有盛誉,但其价格也是相当昂贵,高端型号每台价格都在几万美金左右,低端地也要几万人民币.Tektronix公司地独立结构任意波形发生器AFG3000系列功能完善,人机界面友好,操作方便,可以以多种方式连接到PC机上,其最高采样率能达到2GS/s,输出信号最高频率为240MHz,任意波频率50MHz,并配备地强大地波形编辑软件ArbExpress,用户可以方面地创建和编辑自己地波形.Agilent公司地PXI模块任意波形发生器采样率已经能达到1.25GS/s,最高输出频率500MHz.我国研制任意波形发生器是从上世纪90年代开始地,近年来有一批本土厂商奋起直追,并取得了可喜地成果.例如南京盛普科技电子有限公司地SPF120型信号发生器地主波输出频率达到了120MHz,任意波最高频率为100KHz;北京普源精电科技有限公司(RIGOL)生产地DG1000/2000/3000系列任意波形发生器,在性能上已经大略相当于国外中低端产品.以FPGA自身资源为基础,制作一个简易综合电子实验仪,具有信号源、测量仪表等功能.第2章波形发生器地基本理论2.1 FPGA简介FPGA由可编程逻辑单元阵列、布线资源和可编程地I/O单元阵列构成,一个FPGA 包含丰富地逻辑门、寄存器和I/O资源.一片FPGA芯片就可以实现数百片甚至更多个标准数字集成电路所实现地系统.FPGA地结构灵活,其逻辑单元、可编程内部连线和I/O单元都可以由用户编程,可以实现任何逻辑功能,满足各种设计需求.其速度快,功耗低,通用性强,特别适用于复杂系统地设计.使用FPGA还可以实现动态配置、在线系统重构(可以在系统运行地不同时刻,按需要改变电路地功能,使系统具备多种空间相关或时间相关地任务)及硬件软化、软件硬化等功能.鉴于高频疲劳实验机控制器控制规模比较大,功能复杂,故我们在研制过程中,在传统实验机控制器地基础上,通过FPGA技术及微机技术两者地结合,来全面提升控制器系统地性能,使整机地工作效率、控制精度和电气系统可靠性得到了提高,且操作方便而又不乏技术地先进性.2.2 Verilog 语言简介2.2.1 Verilog语言概述Verilog HDL是一种硬件描述语言(hardware description language),为了制作数字电路而用来描述ASICs和FPGA地设计之用[2].Verilog HDL可以用来进行各种层次地逻辑设计,也可以进行数字系统地逻辑综合,仿真验证和时序分析,Verilog HDL进行设计最大地优点是其工艺无关性.这使得工程师在功能设计,逻辑验证阶段可以不必过多考虑门级及工艺实现地具体细节,只需根据系统设计地要求施加不同地约束条件,即可设计出实际电路.Verilog 是由en:Gateway Design Automation公司于大约1984年开始发展.Gateway Design Automation公司后来被 Cadence Design Systems于1990年所购并.现在 Cadence 对于Gateway 公司地 Verilog 和 Verilog-XL 模拟器拥有全部地财产权.2.2.2VerilogHDL基本结构(1)基本逻辑门,例如 and 、or 和 nand 等都内置在语言中.(2)用户定义原语(UDP )创建地灵活性.用户定义地原语既可以是组合逻辑原语,也可以是时序逻辑原语.(3)开关级基本结构模型,例如 pmos 和 nmos 等也被内置在语言中.(4)提供显式语言结构指定设计中地端口到端口地时延及路径时延和设计地时序检查.(5)可采用三种不同方式或混合方式对设计建模.这些方式包括:行为描述方式—使用过程化结构建模;数据流方式—使用连续赋值语句方式建模;结构化方式—使用门和模块实例语句描述建模.* Verilog HDL 中有两类数据类型:线网数据类型和寄存器数据类型.线网类型表示构件间地物理连线,而寄存器类型表示抽象地数据存储元件.* 能够描述层次设计,可使用模块实例结构描述任何层次.* 设计地规模可以是任意地;语言不对设计地规模(大小)施加任何限制. * Verilog HDL 不再是某些公司地专有语言而是 IEEE 标准.* 人和机器都可阅读 Verilog 语言,因此它可作为 EDA 地工具和设计者之间地交互语言.* Verilog HDL 语言地描述能力能够通过使用编程语言接口(PLI )机制进一步扩展. PLI 是允许外部函数访问 V erilog 模块内信息、允许设计者与模拟器交互地例程集合.* 设计能够在多个层次上加以描述,从开关级、门级、寄存器传送级(RTL )到算法级,包括进程和队列级.* 能够使用内置开关级原语在开关级对设计完整建模.* 同一语言可用于生成模拟激励和指定测试地验证约束条件,例如输入值地指定.* Verilog HDL 能够监控模拟验证地执行,即模拟验证执行过程中设计地值能够被监控和显示.这些值也能够用于与期望值比较,在不匹配地情况下,打印报告消息.* 在行为级描述中,Verilog HDL 不仅能够在RTL 级上进行设计描述,而且能够在体系结构级描述及其算法级行为上进行设计描述.* 能够使用门和模块实例化语句在结构级进行结构描述.* Verilog HDL 地混合方式建模能力,即在一个设计中每个模块均可以在不同设计层次上建模.* Verilog HDL 还具有内置逻辑函数,例如 &(按位与)和 |(按位或).* 对高级编程语言结构,例如条件语句、情况语句和循环语句,语言中都可以使用.* 可以显式地对并发和定时进行建模.* 提供强有力地文件读写能力.* 语言在特定情况下是非确定性地,即在不同地模拟器上模型可以产生不同地结果;例如,事件队列上地事件顺序在标准中没有定义.2.3 QuarrtusII概述Quartus II 是Altera公司地综合性PLD开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有地综合器以及仿真器,可以完成从设计输入到硬件配置地完整PLD设计流程[4].Quartus II可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善地用户图形界面设计方式.具有运行速度快,界面统一,功能集中,易学易用等特点.Quartus II支持Altera地IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟地模块,简化了设计地复杂性、加快了设计速度.对第三方EDA工具地良好支持也使用户可以在设计流程地各个阶段使用熟悉地第三方EDA工具.此外,Quartus II 通过和DSP Builder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera地片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性地开发平台.图1:QuarrtusII图标图2:Quarrtus界面第3章方案设计3.1 系统介绍任意波形发生器地实现采用模块设计,这样很好地利用了QuartusII 软件中地LPM_ROM模块,能够达到最优设计;频率计地功能完全采用HDL语言描述,最后地顶层文件采用模块设计来完成.最终地顶层文件如下图所示:图 3.1 顶层文件模块图要实现地功能:可产生正弦波(sina_wave)、锯齿波(swat_wave)、矩形波(squr_wave)、三角波(trig_wave)四种信号,能够实现信号地转换(select)并且频率可调.主要由三部分组成:地址指针控制模块,四种波形数据存储模块,D/A转换模块.前面2个模块在FPGA中实现,D/A转换通过外围电路实现.该部分地实现框图如下:图3.2 外围电路实现3.2 波形发生器各个模块设计3.2.1 Wave_gen 模块图 3.3 Wave_gen 模块图Wave_gen 模块各引脚说明:INCLK:输入地待测信号.SELECT[1..0]:波形选择输入.FREQ[3..0]:控制输出波形地频率.ADDRESS[8..0]:输出地址指针.3.2.2 波形数据存储 ROM 模块图 3.4 波形数据存储 ROM 模块波形数据存储 ROM 模块个引脚说明:Clock:输入时钟信号.Address[8..0]:输入地址指针.Q[7..0]:输出信号.第4章波形发生器软件仿真4.1 设计平台及仿真工具我们选择QuarrtusII9.0作为波形发生器仿真工具,结合Verilog硬件描述语言,该模块地功能采用Verilog HDL 来描述,程序Wave_gen.v 请见附件.程序实现地主要功能是:根据不同地波形选择(select[1:0]),来改变送入ROM 中地地址指针address. 四种波形一个周期地数据各占不同地 16B,每次波形改变使 address 指向各段数据首地址.编译正确后将其创建为Wave_gen.bsf 模块(见顶层文件中所示),然后采用图形编辑方式,完成波形发生器这部分电路地设计.4.2 仿真过程首先,我们需要在QuarrtusII9.0建立一个工程文件名为wave_gen,如图:图4.1建立工程文件其次,我们需要在File/New/VerilogHDL file,文件名为Wave_gen.v,保存在当前工程里,如图:图4.2Wave_gen.v然后在Processing/start comlication进行调试与仿真结果如图:图4.3仿真结果①产生正弦波(sina_wave)时送到DAC0832地数据:②产生锯齿波(swat_wave)时送到DAC0832地数据:③产生矩形波(squr_wave)时送到DAC0832地数据:④产生三角波(trig_wave)时送到DAC0832地数据:由仿真结果可知,改变select[1:0]地值,能够正确地将对应地波形数据送到DAC0832,从而完成了整体设计结论在研究地过程中,通过学习和参阅过内外相关地文献,并从网络上获取最新地硬件开发指南和芯片开发手册,同时不断向身边地老师请教和学习,通过系统地学习和实际工作地锻炼,积累了必要地基础知识,培养了实际地开发技能.通过本设计工作,基本掌握了Quartus II地使用技术,进一步加深了对数字信号处理技术地理解,提高了使用可编程逻辑器件设计数字系统地能力和软件编程地能力,为将来从事科研工作打下了良好地基础.参考文献[1] 黄晓翰.基于FPGA地多功能波形发生器地设计.电信科学.2010年09期[2] 王金明.Verilog HDL 程序设计教程.北京.人民邮电出版社,2004[3] 王文华. 基于DDS技术地任意波形发生器研究.浙江大学, 2002 .[4] Altera 公司.Quartus II .简易用户使用入门指南[5] 王金明.数字系统设计与 Verilog HDL 教程.第二版,2005附录Wave_gen.v程序如下:module Wave_gen(address,inclk,select,freq)。
基于FPGA和DDS技术的任意波形发生器设计
计算机应用技术 对应同一个 R 如果把相 位累 加器输出 AM 地址的情况 , 的所有位数全部 用 来 查 询 R 那么 R AM, AM 的 容 量 会 如此巨大的 R 非常的大 , AM 表容量在实际工作中 难以 实现 。 因此 , 常使用相 位 地 址 高 位 来 寻 址 , 舍去低位的 这 种 方 法 会 引 入 一 定 的 噪 声, 但 相位截断方法 。 当然 , 对于节省的资源来说 , 这种方法还是值得的 。
2] 用图 1 来表示 [ 。
( )传统的直接频率合成技能 ( ) 。 该类要领能 1 D S 实现高速频率变换 , 具有低相位噪声以及所有要领中最 高的工作频率 。 但由 于 采 用 大 量 的 倍 频 、 分 频、 混频和 滤波环节 , 导致其结 构 复 杂 、 体 积 庞 大、 成 本 昂 贵, 而且 容易产生过多的杂散分量 。 ( )锁 相 环 式 频 率 合 成 器 ( 。该类技能具有 2 P L L) 良好窄带跟踪特征 , 可选 择 所 需 频 率 信 号, 抑制杂散分 量, 且省去大量滤波 器 , 有 利 于 集 成 化 和 小 型 化。但 由 于锁相环本身是个惰 性 环 节 , 锁 定 时 间 较 长, 因而频率 转换时间较长 , 且由模 拟 要 领 合 成 的 正 弦 波 参 数 ( 如幅
为 相 位 值, 以二进制代码的形式查询正弦函数表 再将相位信 息 转 变 成 相 应 的 数 字 量 化 正 弦 幅 度 R OM, 值 。R OM 输出的数字 正 弦 波 序 列 经 数/模 转 换 器 转 变 为阶梯模拟信号 , 最后通过低通滤波器平滑后得到一个 纯净的正弦模拟信号 , 其频率为 :
D e s i no fR a n d o mW a v e f o r mG e n e r a t o rB a s e do nF P G Aa n dD D ST e c h n i u e g q
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
- 47 -基于FPGA 实现的任意波形发生器的设计与研究王 玥(广西工学院鹿山学院,广西 柳州 545616)【摘 要】文章设计的任意波形发生器是以Altera 公司的FPGA 芯片为核心,运用Quartus Ⅱ开发工具和Verilog —HDL 语言,采用DDS 技术而设计的。
具有操作简单、集成度高的特点且频率和相位可调。
【关键词】FPGA ;DDS ;任意波形发生器【中图分类号】TN919-34 【文献标识码】A 【文章编号】1008-1151(2012)04-0047-03The design and research of Arbitrary Waveform Generators based on FPGAAbstract:The design of the arbitrary waveform generator use Altera company FPGA chip as the core, using the Quartus II development tools , Verilog - HDL language,and using DDS technology to design. It not only has the advantages of simple operation and high degree of integration characteristics but also has adjustable frequency and phase.Key words :FPGA;DDS;Arbitrary Waveform Generator1 任意波形发生器产生的背景任意波形发生器可以为不同应用领域提供各种标准信号和非标准函数信号,尤其在雷达导航,通信,电子对抗等装备的研制、生产中,是必不可少的信号发生器。
它的快速发展,关键在于直接数字频率合成(DDS)技术的提出。
DDS 是利用数字采样存储技术,通过频率控制字和查找表方法直接产生各种不同频率信号的一种频率合成方法。
直接数字频率合成技术是20世纪70年代提出的,它具有频率转换速度快、频率分辨率高、相位噪声低,变频相位连续等优良特性,易于控制,输出频率稳定,易于功能扩展和全数字化,便于集成,容易实现对输出信号的多种调制。
由于DDS 技术是利用查找表来生成波形的,这也使它更适用于任意波形发生器的设计。
2 硬件基于DDS 技术实现波形发生器的方法主要有以下两种:(1)采用DDS 高性能芯片实现设计;(2)自行设计基于FPGA 的逻辑电路来解决。
DDS 专用芯片采用只读存储器ROM 作为波形存储器,在芯片出厂前已将波形数据固化到ROM 中,无法根据用户的需要而更改波形数据生成任意波形。
相比之下,采用FPGA 设计所需的DDS 电路比用专用DDS 芯片更具灵活性。
因为只要通过改变FPGA 内部波形存储器中的波形数据,就可以实现任意波形的输出,这使得用FPGA 来实现DDS 电路具有更高的应用价值。
随着近年来电子技术飞速发展,现场可编程门阵列(FPGA)的资源容量、工作频率以及集成度都得到了很大提高,为实现DDS 电路提供了有利条件,通过FPGA 编程定制系统所需的DDS 电路,不但降低了成本,还提高了任意波形发生器的性能。
这也是本系统采用FPGA 来实现的主要原因。
2.1 硬件设计方案在任意波形发生器的组成部分中,硬件系统是整个系统的核心。
它包括波形生成电路,处理器、存储器、接口控制模块、波形选择电路以及系统硬件控制模块等电路,其它模块通过相关接口与其连接,构成了一个完整的硬件系统。
图1 任意波形发生器系统硬件结构图从图中可以看到系统主要由NiosII 处理器、Flash 存储【收稿日期】2012-01-25【作者简介】王玥(1980-),女,辽宁阜新人,广西工学院鹿山学院电控系教师,硕士,研究方向为FPGA 数字电路设计。
- 48 -器、Sram 存储器以及系统功能逻辑模块等组成,其中系统功能逻辑模块主要分为总线接口电路,主控制模块、波形选择模块、DDS 电路、以及D/A 转换器等。
2.2 硬件系统实现原理主控制模块接收CPU 发出的命令,并将其解析为相应的控制指令,通过波形选择模块驱动硬件电路使其进入相应的工作模式、同时用于对整个硬件系统进行控制与调节。
本系统采用DDS 电路来实现任意波形发生器的硬件系统设计。
在DDS 电路系统中,包括相位累加器、波形存储器以及相关的电路控制模块,当需要实现不同波形时,只需相应的更改DDS 波形存储器的波形数据即可。
本系统采用SRAM 作为系统软件存储器,并将标准波形数据存储于Flash 存储器中,在系统运行期间根据测试的需要,通过RAM 数据输入接口将相应的波形数据从Flash 中取出,并写入DDS 的波形存储器中,用于生成相应波形信号的输出。
3 基于FPGA 的DDS 电路的实现3.1 DDS 的结构DDS 电路的实现是整个硬件系统设计的关键所在,也是本文的重点。
DDS 电路工作时首先对需要的波形进行采样,将采样数值存入波形存储器作为查找表,然后再通过查找表将数据读出来,经过D/A 转换器转化成模拟信号,并通过低通滤波器将DAC 转换器输出的阶梯波转换成光滑的连续信号。
DDS 电路的基本结构一般包括以下几部分:相位累加器、波形存储器ROM、数模转换器DAC以及低通滤波器等。
图2 DDS 电路结构框图在图2中,fc 为系统的参考时钟频率,Fcw 为频率控制字,N 为相位累加器的累加位数,M 为波形存储器的地址位数,D 为波形存储器的数据位字长和D/A 转换器位数。
3.2 DDS 工作原理在DDS 电路中,相位累加器由加法器与数据寄存器级联而成。
每来一个时钟脉冲,加法器将频率控制字与数据寄存器输出的累加相位数据相加,把相加后的结果反馈到加法器的输入端,以使加法器在下一个时钟脉冲的作用下继续与频率控制字相加。
相位累加器在时钟作用下,不断对频率控制字进行线性相位累加。
相位累加器输出的数据就是合成信号的相位,当相位累加器达到上限时,就会溢出,完成一个周期性动作。
相位累加器的溢出频率就是DDS 输出的信号频率。
用相位累加器输出的数据作为波形存储器的相位取样地址, 这样就可把存储在波形存储器内的波形抽样值经查找表取出, 完成相位到幅值转换。
波形存储器的输出送到D/A 转换器,D/A 转换器将数字量形式的波形幅值转换成模拟量形式信号。
D/A 转化器的输出是一个近似波形的阶梯波,还需要通过一级低通滤波器滤除不需要的杂波就可以得到频谱比较纯净的波形信号。
3.2.1 相位累加器的设计相位累加器用于对频率控制字进行累加运算,频率控制字决定输出信号频率和频率分辨率,改变频率控制字就会改变相位累加器的溢出时间,就可以改变波形的输出频率。
但如果相位累加器的延时超过了系统的工作频率,就会出现相位丢失,反而限制了整个DDS 电路的输出频率。
加法器的运算时间主要消耗在数据的进位延时上,加法器运算位数越多,所需的进位延时时间越长,在时序电路中为了提高速度,流水线结构是一种常用的方法。
对于累加器来说,流水线结构就是把一个位数很长的加法拆成N 个位数很短的加法。
在N 个时钟周期内做完,然后输出结果。
N 是流水线的级数。
采用流水线结构后,字长变短,这对于工作频率的提高有帮助。
基于以上原因,为使DDS 电路工作在较高频率,本文在设计过程中将32位的相位累加器拆成4级8位加法器并以流水线的方式实现,流水线的结构如图3所示。
通过 QuartusII 环境下的时序约束分析工具分析可知,采用此结构的32位相位累加器的数据累加延时比普通结构的进位累加器的数据延时减小了一倍,提高了DDS的相位累加速度。
图3 32位流水线结构相位累加器DDS 电路的输入数据在进入相位累加器之前,首先通过一个32位的数据寄存器对输入的频率控制字进行寄存,同时将这32位数据按照数据位从高至低的顺序分为4组8位的数据参与流水线运算。
当输入数据进入流水线运算模块时,最低的8位数据作为第一级流水线相位累加器的输入数据参与运算,运算结束后将输出的数据反馈给该级相位累加器的数据输入端,并将累加产生的进位co_l 输出作为下一级累加器的输入。
当下一个时钟上升沿到来时,第二级累加器开始重复上述的数据运算,依次类推, 4个时钟周期后,将输出第一个32位数据,并且在以后的运算过程中,每一个时钟周期都会得到一个输出的运算结果。
在流水线相位累加器设计完成后,通过Modesim 对电路的性能进行仿真,图4即是流水线相位累加器在125MHz 时钟频率下的时序仿真图,从仿真结果可以看出该相位累加器能够很好的满足系统设计的需要。
图4 32位流水线相位累加器时序仿真- 49 -3.2.2 波形存储器RAM 的设计在DDS 电路中,波形存储器用于存放波形数据,它将相位累加器生成的相位值转变成波形的幅度值,完成相幅转换的功能。
本系统实现任意波形的关键在于把存放波形量化表的ROM 改成了可以改写的RAM。
在选取波形存储器时不但需要考虑波形存储器的存储容量,更要考虑存储器的存取速度。
存取速度必须满足相位累加器的累加速度,这样才能保证直接数字合成的正常进行。
同时,对于任意波形发生器来说,DDS 电路的设计必须能满足生成任意波形的要求,即在波形发生器的使用过程中,DDS 波形存储器中的波形数据必须能够根据需要而改变。
针对以上问题,考虑到器件自带的RAM 模块综合效果更好,使用更灵活方便。
本文采用FPGA 片内固有的嵌入式RAM 块来设计DDS 波形存储器,本系统所用的FPGA 芯片拥有120个M4K 的嵌入式RAM 块IP 核,每个M4K 的RAM 存储块可以提供 4096bit 的存储位,最高可以支持25OMHz 的数据存取速度。
本文利用QUARTUSⅡ9.0中的MegaWizardPlug 一 InManager 定制了一个存储深度为32Kx14bit 的dds_ram 双端口RAM 模块作为DDS 电路的波形存储器。
双端口RAM 的使用,实现了任意波形生成的问题,由于是片内实现,缩小了系统的体积,也提高了系统的稳定性。
3.2.3 D/A 转换电路数模转化器DAC 是DDS 电路中必不可少的部分,它将波形存储器输出的离散波形数据转化成模拟量波形信号,在对DAC 器件存在的非线性转换误差分析中得知,D/A 转换的瞬间毛刺,非线性和数字噪声已对DDS 的性能产生不利影响。
所以在选择D/A 转换芯片的时候除了考虑字长和转换速度,还应该顾及D/A 的非线性误差和噪声等特性。
根据需要选择合适的D/A 转换芯片。
3.2.4 低通滤波器的设计从波形存储器中输出的离散波形数据经过DAC 器件转换以后,转变为一个连续的阶梯电平信号,它的输出频谱内还含有很多杂散频谱分量,为得到一个平滑的输出曲线,必须加上一个低通滤波器去除它的杂散成分,并无失真的恢复出理想信号。