FPGA波形发生器实验报告
波形发生器实验总结

波形发生器实验总结1. 引言波形发生器是电子实验中常用的仪器之一。
它能够产生各种不同类型的波形信号,包括正弦波、方波、三角波等。
在电路设计、通信系统等领域中,波形发生器发挥着重要的作用。
本文将总结我在进行波形发生器实验时的经验和收获。
2. 实验背景波形发生器实验旨在通过搭建相应的电路,利用电子元件的特性来产生特定的波形信号。
不同的波形形式有不同的应用场景,因此具备一个可调节的波形发生器对于电子工程师而言是非常重要的。
3. 实验目的本次实验的目的是掌握波形发生器的原理和使用方法,并能够成功产生出不同类型的波形信号。
4. 实验步骤以下是我在实验中所采取的步骤:4.1 搭建电路首先,我搭建了一个基础的波形发生器电路。
该电路包括一个电源、一个信号发生电路和一个输出接口。
电源用于提供所需的电压,信号发生电路则根据不同的需要产生不同类型的波形信号。
4.2 调节参数接下来,我根据实验要求,调节信号发生电路中的参数,以产生不同类型的波形。
例如,我可以调节频率、幅度等参数来生成不同频率和振幅的波形信号。
4.3 观察输出信号在调节参数之后,我连接示波器,观察并记录输出信号的波形。
通过不断调节参数,我可以得到所需的波形信号,并进行进一步的实验和测试。
5. 实验结果与分析在实验中,我成功产生了正弦波、方波和三角波等不同类型的波形信号。
通过调节参数,我还可以改变波形的频率和幅度。
这对于电子工程师而言非常重要,因为不同的应用场景需要不同类型和特性的波形信号。
在实验过程中,我注意到波形发生器的频率范围、输出阻抗等参数对于产生稳定且准确的波形信号十分重要。
此外,使用示波器可以帮助我们观察和分析波形信号的特征,并进行进一步的实验和测试。
6. 实验总结通过本次波形发生器实验,我深入了解了波形发生器的原理和使用方法。
我能够熟练搭建相应的电路,并根据需要调节参数来产生不同类型的波形信号。
此外,我还掌握了使用示波器观察和分析波形信号的方法。
波形发生器实验报告(1)

波形发生器实验报告(1)波形发生器实验报告一、实验目的本实验的目的是通过使用示波器和电子电路来调制和产生不同的波形。
二、实验仪器与器材示波器、经过校准的函数发生器、万用表。
三、实验原理函数发生器是一种电子电路,可以产生不同类型的波形,例如正弦波、方波、三角波等。
为了实现这些波形,函数发生器中需要使用不同的电路元件。
例如,产生正弦波需要使用振荡电路,而产生方波需要使用比较器电路。
函数发生器的输出信号通过示波器来显示和测量。
四、实验步骤1.连接电路:将电源线连接到函数发生器和示波器上。
2.打开电源:按照设备说明书的步骤打开函数发生器和示波器的电源。
3.调节函数发生器:使用函数发生器的控制按钮来选择所需的波形类型,并调节频率和振幅。
使用示波器来观察和测量所产生的波形。
4.调节示波器:使用示波器的控制按钮来调整波形的亮度、对比度、扫描速度等参数,以达到最佳观测效果。
5.记录实验结果:记录所产生的不同波形类型、频率和振幅,并观察和记录示波器的显示结果。
五、实验结果通过本实验,我们成功地产生了正弦波、方波和三角波等不同的波形,并观察了这些波形的频率和振幅。
示波器的显示结果非常清晰,可以直观地观察到波形的特征和参数。
我们还对示波器的参数进行了调整,以获得最佳的观测效果。
六、实验结论本实验通过使用示波器和函数发生器,成功地产生了不同类型的波形,并观察了波形的特征和参数。
这些波形可以应用于各种电子电路实验中,并且需要根据具体应用要求进行调整和优化。
示波器是一种非常重要的测试仪器,可以直接观察和测量电路中的波形和信号特性,因此应用广泛。
基于FPGA的多功能波形发生器设计研究

基于FPGA的多功能波形发生器设计研究设计以VHDL为开发语言,对FPGA芯片进行编程设计,并对输出数据进行数模转换,以完成一个简单的周期可调的多波形发生器。
标签:FPGA;VHDL;多波形发生器1 引言在教学实验和教学研究中,信号发生器作为提供测试用电信号的仪器必不可少。
目前通用的信号发生器一般只能输出常用的波形信号,无法满足教学实验和教学研究的需要。
基于可编程逻辑器件FPGA的多波形信号发生器,采用VHDL 编程实现,整个系统除晶体振荡器和D/A转换外,全部集成在一片美国Altera 公司生产的EPF10K10LC84-3的芯片上,FPGA输出的8位数据经DAC0832模数转换器后接示波器观察其波形,通过改变控制信号线的高低电平实现波行的转换。
它除了输出常用的正弦波、三角波、方波以外,还可以输出以上两种波形任意线性组合波形。
该信号发生器输出波形的频率可数控选择,100HZ~1KHZ,且可手动调节频率,频率步进间隔为100HZ。
2 各模块电路设计2.1 总体设计FPGA器件内部结构多功能波形发生器由初值模块、分频模块、方波产生模块、三角波产生模块、正弦波产生模块、波形输出控制模块等部分组成,如图1所示。
调频模块TIAOPIN的主要目的是使频率调节能够手动执行。
通过手动输入端口RESETY输入若干脉冲,可达到对周期可调的多波形发生器循环选择输出频率的目的。
初值模块CHUZHI提供初值,供下一个模块FANA分频时用,通过不同的初值,在波形产生模块得到不同的工作频率,从而实现调节波形频率的目的。
由于输入的晶振频率是5MHz。
而要求得到的波形的频率为100Hz~1KHz,频率步进为100Hz。
而又由于设计的波形模块都是64个时钟为一个周期。
因此要求波形模块得到的频率是6.4KHz~64KHz。
由5M/64KHz≈78,而又由频率输出分高电平和低电平。
这样78/2≈39,这样可以得到输入状态为1001时,Q的输出参数为39;分频模块FANA的功能是将前一模块CHUZHI送来的初值对时钟进行分频,得到不同的工作频率,从而调节波形频率;方波产生模块ZENG的功能是产生方波;三角波产生模块DELTA的功能是产生三角波;正弦波产生模块SIN的功能产生正弦波;波形输出控制模块CHPRO31设置了三个按键,分别控制三种波形任意一种,或任意两种波形的叠加。
课题设计 基于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控制存储波形的输出。
波形发生器实验报告

波形发生器实验报告波形发生器实验报告引言波形发生器是电子实验室中常见的仪器之一,它能够产生不同形状和频率的电信号。
本实验旨在通过搭建和调试波形发生器电路,了解波形发生器的工作原理和应用。
实验目的1. 掌握波形发生器的基本原理和电路结构;2. 学会使用电子元器件和仪器搭建波形发生器电路;3. 调试波形发生器电路,产生不同形状和频率的波形信号。
实验器材与元器件1. 函数发生器2. 示波器3. 电阻、电容、电感等元器件4. 电源5. 连接线实验步骤1. 搭建基本的RC波形发生器电路。
将电阻和电容按照一定的连接方式搭建成RC电路,连接至电源和示波器。
2. 调节电源和示波器的参数。
根据实验要求,设置电源的电压和示波器的时间和电压刻度。
3. 调试波形发生器电路。
通过改变电阻和电容的数值,观察波形发生器输出的波形变化。
记录不同参数下的波形特点。
4. 搭建其他类型的波形发生器电路。
根据实验要求,搭建其他类型的波形发生器电路,如正弦波发生器、方波发生器等。
5. 调试其他类型的波形发生器电路。
通过改变电阻、电容或其他元器件的数值,观察不同类型波形发生器输出的波形特点。
实验结果与分析在实验过程中,我们成功搭建了基本的RC波形发生器电路,并调试出了不同频率和形状的波形信号。
通过改变电阻和电容的数值,我们观察到波形的周期和振幅发生了变化。
当电阻和电容的数值较小时,波形的频率较高;而当电阻和电容的数值较大时,波形的频率较低。
此外,我们还搭建了正弦波发生器和方波发生器电路,并成功调试出了相应的波形信号。
实验总结通过本次实验,我们深入了解了波形发生器的工作原理和应用。
波形发生器作为一种常见的仪器,广泛应用于电子实验、通信、音频等领域。
通过调节电路中的元器件数值,我们可以产生不同形状和频率的波形信号,满足不同实验和应用的需求。
然而,本实验中我们只涉及了基本的RC波形发生器电路和部分常见的波形类型。
在实际应用中,波形发生器还有更多的类型和功能,如脉冲波形发生器、锯齿波形发生器等。
基于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的毕业设计课题。
波形发生器的设计实验报告

波形发生器的设计实验报告波形发生器是一种用于产生各种波形信号的仪器或设备。
它常常被用于电子实验、通信系统测试、音频设备校准等领域。
本文将介绍波形发生器的设计实验,并探讨其原理和应用。
波形发生器的设计实验主要包括以下几个方面:电路设计、元件选择、参数调整和信号输出。
首先,我们需要设计一个合适的电路来产生所需的波形。
常见的波形包括正弦波、方波、三角波等。
根据不同的波形要求,我们可以选择适当的电路结构和元件组成。
例如,正弦波可以通过RC电路或LC电路实现,方波可以通过比较器电路和计数器电路实现,三角波可以通过积分电路实现。
在元件选择方面,我们需要根据设计要求来选择合适的电阻、电容、电感等元件。
这些元件的数值和质量对波形发生器的性能和稳定性起着重要的影响。
因此,我们需要仔细考虑每个元件的参数,并选择合适的品牌和型号。
参数调整是波形发生器设计实验中的关键步骤之一。
我们需要根据设计要求来调整电路中各个元件的数值和工作状态,以确保所产生的波形符合要求。
参数调整需要依靠实验数据和仪器测量结果来进行,同时也需要运用一定的电路分析和计算方法。
信号输出是波形发生器设计实验的最终目标。
在设计过程中,我们需要确保所产生的波形信号能够正确输出,并具有稳定性和准确性。
为了实现这一目标,我们可以使用示波器等仪器来对输出信号进行检测和分析,并根据需要进行调整和优化。
波形发生器具有广泛的应用领域。
在电子实验中,波形发生器常常被用于产生各种测试信号,用于测试和验证电路的性能和功能。
在通信系统测试中,波形发生器可以产生各种模拟信号,用于测试和校准通信设备。
在音频设备校准中,波形发生器可以产生各种音频信号,用于校准音频设备的频率响应和失真特性。
波形发生器的设计实验是一个涉及电路设计、元件选择、参数调整和信号输出的复杂过程。
在实验中,我们需要仔细考虑每个步骤的要求,并根据实际情况进行调整和优化。
通过合理的设计和实验验证,我们可以获得稳定、准确的波形信号,满足各种应用需求。
基于FPGA的波形信号发生器的设计

基于FPGA的波形信号发生器的设计1、引言随着微电子技术的发展,20世纪80年代中期出现的现场可编程门阵列FPGA器件得到了飞速发展。
由于该器件具有体系结构、逻辑单元灵活、集成度高以及适用范围广等特点,可实现大规模和超大规模的集成电路,而且编程灵活。
因而在数字信号处理中得到了广泛应用,越来越受到硬件电路设计工程师们的青睐。
波形发生器是一种广泛应用于电子电路、自动控制和科学实验等领域的信号源,从某种意义上说高品质的的信号源更是实现高性能指标的关键。
正弦波信号、三角波信号和方波信号都是科研中最常用的三种信号形式,应非常广泛。
它们通常作为标准信号,用于电子电路的性能试验或参数测量。
本文就是利用GW48—SOPC/DSP实验开发系统采用宏功能模块较为方便地实现了正弦波信号、三角波信号和方波信号。
可编程门阵列(FPGA)中的波形发生器控制电路钟,它通过外来控制信号和高速时钟信号,向波形数据ROM 发出地址信号.输出波形的频率由发出的地址信号的速度决定:当以固定频率扫描输出地址时,模拟输出波形是固定频率。
而当以周期性时变方式扫描输出地址时.则模拟输出波形为扫频信号。
波形数据ROM中存有发生器的波形数据.如正弦波数据。
当接受来自FPGA的地址信号后,将从数据线输出相应的波形数据,地址变化得越快,则输出数据的速度越快,从而使D/A输出的模拟信号的变化速度越快。
在本实验设计过程中采用可编程逻辑器件FPGA,并通过运用Alter公司推出的功能强大的支持可编程逻辑器件的设计环境QuartusII软件和基于超高速硬件描述语言VHDL编程语言,可以进行软件模拟检测设计的正确性,大大简化了系统结构,降低了成本,提高了系统的性能和可靠性,从而方便的实现了信号(正弦信号、三角波信号、方波信号)发生器电路。
2、波形发生器的设计原理2.1 硬件电路的设计的理论基础本设计的设计基础是DDS(直接数字频率合成)技术。
DDS(直接数字频率合成)技术是七十年代初提出的一种新的频率合成技术,它是一种心的全数字频率合成技术,其数字结构满足了现代电子系统的许多要求。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告册课程名称:Verilog HDL数字系统设计实验项目名称:频率可变的任意波形发生器学院:电子科学与技术专业:微电子班级:二班报告人:黄日才学号:2008160120指导教师:刘春平老师实验时间:2010.12.06 —2011.01.06提交时间:2011.01.06实验结论:经过不断的试验,最终完成了该实验设计的基本要求,输出四种不同的波形实现信号频率可调,并且在这基础上调用了FPGA芯片集成锁相环,增加了输出信号幅度可调。
经过测试显示输出波形信号稳定。
一、实验目的利用DE2实验板和DVCC试验箱的DA转换器设计出可出任意波形且频率可调的信号发生器,也就是基于FPGA的用Verilog描述的直接数字频率合成器(DDS)。
二、设计方案及其原理说明:DDS是一种把数字信号通过数/模转换器转换成模拟信号的合成技术。
它由相位累加器、相幅转换函数表、D/A转换器以及内部时序控制产生器等电路组成。
参考频率f_clk为整个合成器的工作频率,输入的频率字保存在频率寄存器中,经N位相位累加器,累加一次,相位步进增加,经过内部ROM波形表得到相应的幅度值,经过D/A转换和低通滤波器得到合成的波形。
△P为频率字,即相位增量;参考频率为f_clk;相位累加器的长度为N位,输出频率f_out为:F_out——输出信号的频率;N————相位累加器的位数;△P———频率控制字(步长);F_clk——基准时钟频率。
1、系统总体设计方案框架图:FPGA图1-1 系统总体设计方案2、四种波形单周期的取样示意图:3、本实验采用每个周期取样16次,以便产生的波形更加的平滑。
函数查找表的设计:(十进制)地址(8位二进制)rom的值0 1201 1652 2043 2304 2405 2306 2047 1658 1209 7410 3511 912 013 914 3515 744、程序思路1)分频器控制读取rom的步长,通过输入变量改变分频器计数器的计数总量,控制分频实验频率可调。
2)制作rom,通过一个函数实现,给函数输入一个地址,通过case语句输出一个值。
3)波形选择,同个if语句选择地址计数器输出的值,从而输出四种不同的波形4)锁相环(附加),调用FPGA芯片集成的锁相环模块,让输出的相位更加的稳定。
5)调幅(附加),通过在rom的值除以不同的值来控制改变输出信号的幅度。
三、程序及具体方法注释module dds_ver(clk_50MHz,fout,change,freq,key0);input clk_50MHz; //输入50MHz的全局时钟input[1:0] change; //定义输入变量,用来切换输出波形,一共4个档位input [2:0] freq; //定义输入变量,用来改变输出信号的频率,一共8个档位output [7:0] fout; //输出8为rom的值,用来驱动DA转化芯片,输出波形input key0; //定义输入变量,用来改变幅值计数器的值,从而改变幅值//调用FPGA芯片集成的锁相环模块,让输出的波形相位更稳定pll pll_inst (.inclk0 ( clk_50MHz ),.c0 ( clk_pll ));wire [7:0] fout;//分频功能,根据输入变量的不同实现不同的分频,用于读取rom的步长reg clk;reg [15:0] cnt;always @(posedge clk_pll) //利用计数器实现任意分频beginif(cnt==(50*(freq+1))) //设定频率控制字节begincnt=0;clk=~clk;endelsecnt=cnt+1;end//调幅功能,输入key0更变计数器cntvol的值,从而更变输出信号的幅度reg [2:0] cntvol;always@(negedge key0)beginif (cntvol>=1&&cntvol<7)cntvol<=cntvol+1'd1;else cntvol<=1'b1;end//地址累加器,实现地址的分段累加,从而实现四种不同波形的切换输出reg [5:0] addr;always @(posedge clk)beginbeginif(change==0)beginif(addr>=0&&addr<15) //切换正弦波addr=addr+1;elseaddr=0;endelse if(change==1)beginif(addr>=16&&addr<31) //切换方波addr=addr+1;elseaddr=16;endelse if(change==2)beginif(addr>=32&&addr<47) //切换正三角波addr=addr+1;elseaddr=32;endelse if(change==3)beginif(addr>=48&&addr<63) //切换反三角波addr=addr+1;elseaddr=48;endendend//制作rom的函数function [7:0] rom;input [63:0] address;case(address)0:rom=120/cntvol; //正弦波的rom值1:rom=165/cntvol;2:rom=204/cntvol;3:rom=230/cntvol;4:rom=240/cntvol;5:rom=230/cntvol;6:rom=204/cntvol;7:rom=165/cntvol;8:rom=120/cntvol;9:rom=74/cntvol;10:rom=35/cntvol;11:rom=9/cntvol;12:rom=0/cntvol;13:rom=9/cntvol;14:rom=35/cntvol;16:rom=10/cntvol; //方波的rom值17:rom=10/cntvol;18:rom=10/cntvol;19:rom=10/cntvol;20:rom=10/cntvol;21:rom=10/cntvol;22:rom=10/cntvol;23:rom=10/cntvol;24:rom=250/cntvol;25:rom=250/cntvol;26:rom=250/cntvol;27:rom=250/cntvol;28:rom=250/cntvol;29:rom=250/cntvol;30:rom=250/cntvol;31:rom=250/cntvol;32:rom=30/cntvol; //正三角波的rom值33:rom=60/cntvol;34:rom=90/cntvol;35:rom=120/cntvol;36:rom=150/cntvol;37:rom=180/cntvol;38:rom=210/cntvol;39:rom=240/cntvol;40:rom=210/cntvol;41:rom=180/cntvol;42:rom=150/cntvol;43:rom=120/cntvol;44:rom=90/cntvol;45:rom=60/cntvol;46:rom=30/cntvol;47:rom=0/cntvol;48:rom=240/cntvol; //反弦波的rom值49:rom=210/cntvol;50:rom=180/cntvol;51:rom=150/cntvol;52:rom=120/cntvol;53:rom=90/cntvol;54:rom=60/cntvol;55:rom=30/cntvol;56:rom=0/cntvol;57:rom=30/cntvol;58:rom=60/cntvol;60:rom=120/cntvol;61:rom=150/cntvol;62:rom=180/cntvol;63:rom=210/cntvol;endcaseendfunctionassign fout=rom(addr);// //把读到的rom的值赋给输出端口,输出驱动DA转换芯片endmodule四、实验结果及分析1、QuartusII仿真结果2、下载到DE2实验板连接到DVCC试验箱用示波器显示输出的各种波形图1)输出正弦波2)输出正弦波频率调节3)输出正弦波幅值调节4)输出方波3、结果分析通过仿真和搭建实验平台。
成功完成了实验设计的要求输出波形有很严重的锯齿现象,但是基本上显示出了完整的波形,实现了设计的波形切换输出、频率可调和幅值可调,前后比较了没有加入锁相环和加入锁相环模块输出波形的质量,加入锁相环值之后波形稳定很多。
输出波形的质量只要取决于信号周期取样的频率,取样点越多输出波形的失真越小,当然跟取样点的准确性也有很大关系,但是rom的值是通过MATLAB 产生的,准确性很高。
为了验证这个结论,决定每个信号周期取256个点(8为DA转换最大取样点256个)再进行实验,观察实验结果。
输出波形质量明显提高。
实验结果波形图如下:1)正弦波2)方波3)三角波4)锯齿波说明:由于觉得正三角波和反三角波只是相位上相差180度,显示出来的波形没有区别,这是由于采用取值法决定的,取值是包括了DA输出负值的点,所以没有正三角波和负三角波在显示上占有180度相位差的区别。
所以把反三角波改成输出锯齿波。
(这只是取样点不同,没有本质其别)当然,这些输出信号也是可以调节频率和幅度的。
五、实验结论:经过不断的试验,最终完成了该实验设计的基本要求,输出四种不同的波形实现信号频率可调,并且在此基础上调用了锁相环技术,增加了输出信号幅度可调。
经过测量显示输出波形信号稳定。
通过该信号发生器的设计,学习和掌握了DA转换,更加熟练地使用Verilog 语言描述硬件电路和信号的输出,也更加熟练地掌语言编写过程中的握数据的控制、运用quartusII仿真和调用modelsim仿真。
熟悉软件在编译过程中出现的错误和排除这些错误。
在搭建实验平台的过程中,由于没有使用过DVCC实验箱,所以遇到麻烦,开始没有使DE2板和DVCC试验箱共地,所以输不出波形,但是有些同学没有共地也能输出波形,而我试验之后发现我的实验平台只有共地才能输出完整波形,理论上也是需要所有的实验系统共地才不会影响信号完整性输出的。
编写代码时应该细分代码实现的功能,从很小的一个功能部分开始编写,不能全部一起编写,要先编写一小部分进行仿真。
测试成功之后再编写下一个功能模块,最好能使用模块化设计,以功能分开编写,分别测试。