波形发生器(VHDL)

华南理工大学广州学院

数字系统设计(VHDL)课程报告

题目:波形发生器

姓名:

学号:

序号:

学院:

班级:

指导老师:

完成时间: 2014-1-1 __

题目:波形发生器

一、 功能及原理介绍

1、功能介绍

此波形发生器,通过选择“00”、“01”、“10”、“11”,这四种模式来选择相应的

波形输出,除此之外,它还可以产生一些其它的波形,利用MIF 文件生成器产生波形的MIF 文件,由此产生各种波形。这个波形发生器可以用作信号发生器,产生一些自己所需要的信号。

2、原理介绍

正弦信号发生器的结构由 3 部分组成:数据计数器或地址发生器、数据 ROM 和 D/A 。性能良好的正弦信 号发生器的设计要求此 3 部分具有高速性能,且数据 ROM 在高速条件下,占用最少的逻辑资源,设计流程最便捷,波 形数据获最方便。顶层文件any_bo.VHD 在FPGA 中实现,包含2 个部分:ROM 的地址 信号发生器由7 位计数器担任,和正弦数据ROM ,拒此,ROM 由LPM_ROM 模块构成能达到最优设计,LPM_ROM 底层是FPGA 中的EAB 或ESB 等。地址发生器的时钟CLK 的输入频率 f0 与每周期的波形数据点数(在此选择 128 点)。

2.1.MIF 文件生成器的使用方法

mif 文件就是存储器初始化文件,即memory initialization file ,用来配置RAM 或ROM 中的数据。而产生MIF 文件的在这里有三种方法:(1)利用Quartus 自带的mif 编辑器、(2)利用mif 软件来生成、(3)用C 语言或者matlab 语言等来生成,而我就利用MIF 文件生成器MIF_Maker 2010来产生MIF 文件。

① 双击打开MIF_Maker 2010,如图

选择模式

00 01

10 11

7位计数器

(地址发生器)

7位计数器

(地址发生器)

7位计数器

(地址发生器)

7位计数器

(地址发生器)

正弦波数据 存储ROM

三角波数据 存储ROM

方波数据 存储ROM

锯齿波数据 存储ROM

正弦波输出 三角波输出 方波输出 锯齿波输出

首先我们对所需要的MIF文件对应的波形参数进行设置,如上图,在“查看”,并于此下拉菜单中选择“全局参数设置”,如选择波形参数:数据长度128,输出数据位宽8,数据格式十六进制(有的情况下需要选择符号类型),初始相位0度,按“确定”后,将会出现一波形编辑窗。

②然后选择波形类型。选择“设定波形”,再选择“正弦波”,如下图

③若要选择其它的波形也可以,如果要编辑任意波形,可以选择“手绘波形”项,在下拉菜单中选择“线条”,如图,表示可以手工绘制线条。

④最后选择“文件”中的“保存”,将此编辑好的波形文件以MIF格式保存即可。

⑤产生的MIF文件像如下图一样,每对应一个地址就有一个采样数据

2.2.利用LPM_ROM的定制和使用

FPGA中的ROM除了作为数据和程序存储单元外,ROM还有其它的用处,如数字信号发生器的波形数据存储器、查表式计算器的核心工作单元等等。

(1)单击Tools下的MegaWizard Plug-in Mannager管理器按钮,进入如图的LPM模块

(2)选择Memory Compliler中的ROM:1-PORT项,FPGA是CycloneII系列,文本表达选择VHDL,文件名为fang_bo等等,如下图

(3)定制调用此ROM模块的参数设置和初始化条件的配置如下两图

2.3.利用嵌入式逻辑分析仪SignalTapII对输出波形进行显示

利用FPGA片上资源实现逻辑分析仪的功能。signaltap和你自己的逻辑设计一起被quartus 编译,生成的sof文件中会包含signaltap。使用时在quartus中打开当前工程,打开stp文件(signaltap的定义文件),把sof下载到器件中就可以开始抓取波形了。

①SignalTap II嵌入逻辑分析仪集成到Quartus II设计软件中,能够捕获和显示可编程单芯片系统(SOPC)设计中实时信号的状态,这样开发者就可以在整个设计过程中以系统级

的速度观察硬件和软件的交互作用。它支持多达1024个通道,采样深度高达128Kb,每个分析仪均有10级触发输入/输出,从而增加了采样的精度。SignalTap II为设计者提供了业界领先的SOPC设计的实时可视性,能够大大减少验证过程中所花费的时间。目前SignalTap II 逻辑分析仪支持的器件系列包括:APEXT II, APEX20KE, APEX20KC, APEX20K, Cyclone, Excalibur, Mercury, Stratix GX, Stratix。

②SignalTap II将逻辑分析模块嵌入到FPGA中,逻辑分析模块对待测节点的数据进行捕获,数据通过JTAG接口从FPGA传送到Quartus II软件中显示。使用SignalTap II无需额外的逻辑分析设备,只需将一根JTAG接口的下载电缆连接到要调试的FPGA器件。SignalTap II 对FPGA的引脚和内部的连线信号进行捕获后,将数据存储在一定的RAM块中。因此,需要用于捕获的采样时钟信号和保存被测信号的一定点数的RAM块。

③使用SignalTap II的一般流程是:设计人员在完成设计并编译工程后,建立SignalTap II (.stp)文件并加入工程、配置STP文件、编译并下载设计到FPGA、在Quartus II软件中显示被测信号的波形、在测试完毕后将该逻辑分析仪从项目中删除。以下描述设置SignalTap II 文件的基本流程:

A.设置采样时钟。采样时钟决定了显示信号波形的分辨率,它的频率要大于被测信号的最高频率,否则无法正确反映被测信号波形的变化。SignalTap II在时钟上升沿将被测信号存储到缓存。

B.设置被测信号。可以使用Node Finder 中的SignalTap II 滤波器查找所有预综合和布局布线后的SignalTap II 节点,添加要观察的信号。逻辑分析器不可测试的信号包括:逻辑单元的进位信号、PLL的时钟输出、JTAG引脚信号、LVDS(低压差分)信号。

C.配置采样深度、确定RAM的大小。SignalTap II所能显示的被测信号波形的时间长度为Tx,计算公式如下:

--- Tx="N"×Ts

--- N为缓存中存储的采样点数,Ts为采样时钟的周期。

D.设置buffer acquisition mode。buffer acquisition mode包括循环采样存储、连续存储两种模式。循环采样存储也就是分段存储,将整个缓存分成多个片段(segment),每当触发条件满足时就捕获一段数据。该功能可以去掉无关的数据,使采样缓存的使用更加灵活。

E.触发级别。SignalTap II支持多触发级的触发方式,最多可支持10级触发。

F.触发条件。可以设定复杂的触发条件用来捕获相应的数据,以协助调试设计。当触发条件满足时,在signalTap时钟的上升沿采样被测信号。

G. 完成STP设置螅玈TP文件同原有的设计下载到FPGA中,在Quartus II中SignalTap II 窗口下查看逻辑分析仪捕获结果。SignalTap II可将数据通过多余的I/O引脚输出,以供外设的逻辑分析器使用;或输出为csv、tbl、vcd、vwf文件格式以供第三方仿真工具使用。

二、VHDL编程实现

LIBRARY IEEE; --信号发生器源文件

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;--运算符的重载

USE IEEE.STD_LOGIC_ARITH.ALL;

ENTITY any_bo IS

generic(divide_to_100k:integer:=100000;--类属

cnt1_value:integer:=5);

PORT ( RST,EN,CLK: IN STD_LOGIC;--复位信号,时钟信号,计数使能

rw,rs,e:out std_logic;

lcd_data:out std_logic_vector(7 downto 0);

AR1 : OUT STD_LOGIC_VECTOR (6 DOWNTO 0);--正弦波地址测试输出

AR2 : OUT STD_LOGIC_VECTOR (6 DOWNTO 0);--三角波地址测试输出

AR3 : OUT STD_LOGIC_VECTOR (6 DOWNTO 0);--方波地址测试输出

AR4 : OUT STD_LOGIC_VECTOR (6 DOWNTO 0);--锯齿波地址测试输出

cnt : IN STD_LOGIC_VECTOR (0 TO 1) ;--正弦波、三角波、方波、锯齿波的选择模式,00--正弦波,01--三角波,10--方波,11--锯齿波

result : OUT STD_LOGIC_VECTOR (7 DOWNTO 0));--8位波形数据输出

END any_bo;

ARCHITECTURE ONE OF any_bo IS

COMPONENT zheng_xian --调用正弦波形数据存储器LPM_ROM 文件:zheng_xian.vhd 声明

PORT(address1 : IN STD_LOGIC_VECTOR (6 DOWNTO 0);--7 位地址信号

inclock1 : IN STD_LOGIC ;--地址锁存时钟

q1 : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) );

END COMPONENT;

COMPONENT san_jiao --调用三角波形数据存储器LPM_ROM 文件:san_jiao.vhd 声明

PORT(address2 : IN STD_LOGIC_VECTOR (6 DOWNTO 0);--7 位地址信号

inclock2 : IN STD_LOGIC ;--地址锁存时钟

q2 : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) );

END COMPONENT;

COMPONENT fang_bo --调用方波形数据存储器LPM_ROM 文件:fang_bo.vhd 声明

PORT(address3 : IN STD_LOGIC_VECTOR (6 DOWNTO 0);--7 位地址信号

inclock3 : IN STD_LOGIC ;--地址锁存时钟

q3 : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) );

END COMPONENT;

COMPONENT ju_chi --调用锯齿波形数据存储器LPM_ROM 文件:ju_chi.vhd 声明

PORT(address4 : IN STD_LOGIC_VECTOR (6 DOWNTO 0);--7 位地址信号

inclock4 : IN STD_LOGIC ;--地址锁存时钟

q4 : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) );

END COMPONENT;

SIGNAL Q1 : STD_LOGIC_VECTOR (6 DOWNTO 0); --设定内部节点作为地址计数器

SIGNAL Q2 : STD_LOGIC_VECTOR (6 DOWNTO 0); --设定内部节点作为地址计数器

SIGNAL Q3 : STD_LOGIC_VECTOR (6 DOWNTO 0); --设定内部节点作为地址计数器

SIGNAL Q4 : STD_LOGIC_VECTOR (6 DOWNTO 0); --设定内部节点作为地址计数器

SIGNAL out11 : STD_LOGIC_VECTOR (7 DOWNTO 0);--寄存8位正弦波的数据

SIGNAL out22 : STD_LOGIC_VECTOR (7 DOWNTO 0);--寄存8位三角波的数据

SIGNAL out33 : STD_LOGIC_VECTOR (7 DOWNTO 0);--寄存8位方波的数据

SIGNAL out44 : STD_LOGIC_VECTOR (7 DOWNTO 0);--寄存8位锯齿波的数据

signal clk_100k:std_logic;

type state is(s0,s1,s2,s3,s4,s5,s6,S7,S8,S9,s10,s11,s12,s13);

signal current_s:state; --状态机,用来驱动12864显示

type data_buffer_1 is array(0 to 11)of std_logic_vector(7 downto 0);--8位LCD12864数据type data_buffer_2 is array(0 to 11)of std_logic_vector(7 downto 0);-- 8位LCD12864数据type data_buffer_3 is array(0 to 9)of std_logic_vector(7 downto 0); --8位LCD12864数据type data_buffer_4 is array(0 to 11)of std_logic_vector(7 downto 0); --8位LCD12864数据constant

data_buf_1:data_buffer_1:=(x"a3",x"b0",x"a3",x"b0",x"a1",x"c3",x"d5",x"fd",x"cf",x"d2",x"b2",x" a8");---表示”00:正弦波”的字符

constant

data_buf_2:data_buffer_2:=(x"a3",x"b0",x"a3",x"b1",x"a1",x"c3",x"c8",x"fd",x"bd",x"c7",x"b2",x "a8");---表示”01:三角波”的字符

constant

data_buf_3:data_buffer_3:=(x"a3",x"b1",x"a3",x"b0",x"a1",x"c3",x"b7",x"bd",x"b2",x"a8");

---表示”10:方波”的字符

constant

data_buf_4:data_buffer_4:=(x"a3",x"b1",x"a3",x"b1",x"a1",x"c3",x"be",x"e2",x"b3",x"dd",x"b2", x"a8");---表示”11:锯齿波”的字符

--signal FIG:STD_LOGIC_VECTOR (2 DOWNTO 0);

BEGIN

P1:PROCESS(CLK,RST,EN ) --LPM_ROM 地址发生器进程

variable cint:integer range 0 to divide_to_100k;

BEGIN

IF (RST='0') THEN Q1<="0000000";Q2<="0000000";Q3<="0000000";Q4<="0000000";

ELSIF CLK'EVENT AND CLK = '1' THEN cint:=cint+1; --Q1、Q2、Q3、Q4 作为地址发生器计数器

if(cint=divide_to_100k)then cint:=0;

end if;

if(cint

else clk_100k<='1';

end if;

IF (EN='1') THEN Q1<=Q1+1;Q2<=Q2+1;Q3<=Q3+1;Q4<=Q4+1; END IF; END IF;

END PROCESS P1;

AR1<=Q1;

AR2<=Q2;

AR3<=Q3;

AR4<=Q4;

u1 : zheng_xian PORT MAP(address1=>Q1, q1 => out11,inclock1=>CLK);--正弦波的例化

u2 : san_jiao PORT MAP(address2=>Q2, q2 => out22,inclock2=>CLK);--三角波例化

u3 : fang_bo PORT MAP(address3=>Q3, q3 => out33,inclock3=>CLK);--方波例化

u4 : ju_chi PORT MAP(address4=>Q4, q4 => out44,inclock4=>CLK);--锯齿例化

P2:PROCESS(cnt)

BEGIN

CASE cnt IS

WHEN "00" => result<=out11;--输出正弦波数据

WHEN "01" => result<=out22;--输出三角波数据

WHEN "10" => result<=out33;--输出方波波数据

WHEN "11" => result<=out44;--输出锯齿波数据

END CASE;

END PROCESS P2;

P3:process(clk_100k,current_s)

variable cnt1:integer range 0 to 10000;

variable cnt2:integer range 0 to 400;

begin

if(clk_100k'event and clk_100k='1')then

case current_s is

when s0=>

cnt1:=cnt1+1;

if(cnt1

e<='0';--使能先低后高接着再低电平表写完数据

rs<='0';

rw<='0';

elsif(cnt1<2*cnt1_value) then

lcd_data<="00110000";--选择12864的基本模式:

elsif(cnt1<20*cnt1_value) then

e<='1';

elsif(cnt1=20*cnt1_value) then

e<='0';

cnt1:=0;

current_s<=s1;

end if;

when s1=>

cnt1:=cnt1+1;

if(cnt1

e<='0';

rs<='0';

rw<='0';

elsif(cnt1<2*cnt1_value) then

lcd_data<="00110000";

elsif(cnt1<20*cnt1_value) then

e<='1';

elsif(cnt1=20*cnt1_value) then

e<='0';

cnt1:=0;

current_s<=s2;

end if;

when s2=>

cnt1:=cnt1+1;

if(cnt1

e<='0';

rs<='0';

rw<='0';

elsif(cnt1<2*cnt1_value) then

lcd_data<="00001100";--此处用了3次的0x30,起到延时的作用

elsif(cnt1<20*cnt1_value) then

e<='1';

elsif(cnt1=20*cnt1_value) then

e<='0';

cnt1:=0;

current_s<=s3;

end if;

when s3=>

cnt1:=cnt1+1;

if(cnt1

e<='0';

rs<='0';

rw<='0';

elsif(cnt1<2*cnt1_value) then

lcd_data<="00000001"; --12864清零0x01

elsif(cnt1<20*cnt1_value) then

e<='1';

elsif(cnt1=20*cnt1_value) then

e<='0';

cnt1:=0;

current_s<=s4;

end if;

when s4=>

cnt1:=cnt1+1;

if(cnt1

e<='0';

rs<='0';

rw<='0';

elsif(cnt1<2*cnt1_value) then

lcd_data<=x"80"; --显示第一行坐标的地址,从左一位开始

elsif(cnt1<20*cnt1_value) then

e<='1';

elsif(cnt1=20*cnt1_value) then

e<='0';

cnt1:=0;

current_s<=s5;

end if;

when s5=>

cnt1:=cnt1+1;

if cnt1<1*cnt1_value then

e<='0';

rs<='1';

rw<='0';

elsif cnt1<2*cnt1_value then

lcd_data<=data_buf_1(cnt2);--LCD12864写数据

elsif cnt1<20*cnt1_value then

e<='1';

elsif cnt1=20*cnt1_value then

e<='0';

cnt1:=0;

cnt2:=cnt2+1;

if cnt2=12 then---有多少个字符,此cnt2的值也不同

current_s<=s6;

cnt2:=0;

end if;

end if;

when s6=>

cnt1:=cnt1+1;

if(cnt1

e<='0';

rs<='0';

rw<='0';

elsif(cnt1<2*cnt1_value) then

lcd_data<=x"90";显示第二行坐标的地址,从左一位开始

elsif(cnt1<20*cnt1_value) then

e<='1';

elsif(cnt1=20*cnt1_value) then

e<='0';

cnt1:=0;

current_s<=s7;

end if;

when s7=>

cnt1:=cnt1+1;

if cnt1<1*cnt1_value then

e<='0';

rs<='1';

rw<='0';

elsif cnt1<2*cnt1_value then

lcd_data<=data_buf_2(cnt2); --LCD12864写数据

elsif cnt1<20*cnt1_value then

e<='1';

elsif cnt1=20*cnt1_value then

e<='0';

cnt1:=0;

cnt2:=cnt2+1;

if cnt2=12 then---有多少个字符,此cnt2的值也不同

current_s<=s8;

cnt2:=0;

end if;

end if;

when s8=>

cnt1:=cnt1+1;

if(cnt1

e<='0';

rs<='0';

rw<='0';

elsif(cnt1<2*cnt1_value) then

lcd_data<=x"88";显示第三行坐标的地址,从左一位开始

elsif(cnt1<20*cnt1_value) then

e<='1';

elsif(cnt1=20*cnt1_value) then

e<='0';

cnt1:=0;

current_s<=s9;

end if;

when s9=>

cnt1:=cnt1+1;

if cnt1<1*cnt1_value then

e<='0';

rs<='1';

rw<='0';

elsif cnt1<2*cnt1_value then

lcd_data<=data_buf_3(cnt2); --LCD12864写数据

elsif cnt1<20*cnt1_value then

e<='1';

elsif cnt1=20*cnt1_value then

e<='0';

cnt1:=0;

cnt2:=cnt2+1;

if cnt2=10 then---有多少个字符,此cnt2的值也不同

current_s<=s10;

cnt2:=0;

end if;

end if;

when s10=>

cnt1:=cnt1+1;

if(cnt1

e<='0';

rs<='0';

rw<='0';

elsif(cnt1<2*cnt1_value) then

lcd_data<=x"98";显示第四行坐标的地址,从左一位开始

elsif(cnt1<20*cnt1_value) then

e<='1';

elsif(cnt1=20*cnt1_value) then

e<='0';

cnt1:=0;

current_s<=s11;

end if;

when s11=>

cnt1:=cnt1+1;

if cnt1<1*cnt1_value then

e<='0';

rs<='1';

rw<='0';

elsif cnt1<2*cnt1_value then

lcd_data<=data_buf_4(cnt2); --LCD12864写数据

elsif cnt1<20*cnt1_value then

e<='1';

elsif cnt1=20*cnt1_value then

e<='0';

cnt1:=0;

cnt2:=cnt2+1;

if cnt2=12 then---有多少个字符,此cnt2的值也不同

current_s<=s12;

cnt2:=0;

end if;

end if;

when s12=>null;

when s13=>

e<='Z';

rs<='Z';

rw<='Z';

LCD_data<=(others=>'Z');

cnt1:=0;

cnt2:=0;

end case;end if;

END PROCESS P3;

END ONE;

三、仿真波形图

四、引脚设置图

五、下载测试结果分析

五、下载测试结果分析

(1)当cnt=00时—正弦波

分析:

当选择模式为”00”时,每个地址都会对应着一个采样数据,例如:如上图:当地址为0x43时,输出的0x6D,当地址为0x45时,输出为0x67等等,由下表的部分值可知,输出的数据延时了一个周期,不过这也是正确的,这个正弦波形,是ROM的数据线宽8位,地址宽为7位,每个周期采样128个点,即放置128个8位数据,故由输出波形图可知,这个波形是我们所需要的波形,因而正确。

地址43 44 45 46 47 48 49 4A ……

采样值0x6D 0x 67 0x 61 0x 5A 0x 55 0x 4F 0x 49 0x 43

地址53 54 55 56 57 58 59 5A ……

采样值0x 19 0x 15 0x 12 0x 0F 0x 0C 0x 0A 0x 07 0x 05

(2)当cnt=10时--方波

分析:

当选择模式为”10”时,每个地址都会对应着一个采样数据,例如:如上图:当地址为0x73时,输出的0xFF,当地址为0x74时,输出为0xFF等等,由下表的部分值可知,输出的数据延时了一个周期,不过这也是正确的,这个方波形,是ROM的数据线宽8位,地址宽为7位,每个周期采样128个点,即放置128个8位数据,故由输出波形图可知,这个波形也是我们所需要的波形,因而正确。

地址01 02 03 04 05 06 07 08 ……

采样值0x00 0x 00 0x 00 0x 00 0x 00 0x 00 0x 00 0x 00

地址73 74 75 76 77 78 79 7A ……

采样值0x FF 0x FF 0x FF 0x FF 0x FF 0x FF 0x FF 0x FF

(3)当cnt=01时--三角波

分析:

当选择模式为”01”时,每个地址都会对应着一个采样数据,例如:如上图:当地址为0x59时,输出的0x9B,当地址为0x5A时,输出为0x97等等,由下表的部分值可知,输出的数据延时了一个周期,不过这也是正确的,这个三角波形,是ROM的数据线宽8位,地址宽为7位,每个周期采样128个点,即放置128个8位数据,故由输出波形图可知,这个波形也是我们所需要的波形,因而正确。

地址59 5A 5B 5C 5D 5E 5F 60 ……

采样值0x 9B 0x 97 0x 93 0x 8F 0x 8B 0x 87 0x 83 0x 80

地址70 71 72 73 74 75 76 77 ……

采样值0x 40 0x 3C 0x 38 0x 34 0x 30 0x 2C 0x 28 0x 24

(4)当cnt=11时—锯齿波

分析:

当选择模式为”00”时,每个地址都会对应着一个采样数据,例如:如上图:当地址为0x43时,输出的0x6D,当地址为0x45时,输出为0x67等等,由下表的部分值可知,输出的数据延时了一个周期,不过这也是正确的,这个正弦波形,是ROM的数据线宽8位,地址宽为7位,每个周期采样128个点,即放置128个8位数据,故由输出波形图可知,这个波形是我们所需要的波形。

地址30 31 32 33 34 35 36 37 ……

采样值0x5F 0x 61 0x 63 0x 65 0x 67 0x 69 0x 6B 0x 6D

地址40 41 42 43 44 45 46 47 ……

采样值0x 7F 0x 81 0x 83 0x 85 0x 87 0x 89 0x 8B 0x 8D

FPGA VHDL 简易波形发生器 简易信号发生器 EDA课设

简易信号发生器 1引言 信号发生器又称信号源或振荡器,在生产实践和科技领域中有着广泛的应用。它能够产生多种波形,如三角波、锯齿波、矩形波(含方波)、正弦波等,在电路实验和设备检测中具有十分广泛的用途。例如在通信、广播、电视系统中,都需要射频(高频)发射,这里的射频波就是载波,把音频(低频)、视频信号或脉冲信号运载出去,就需要能够产生高频的振荡器。在工业、农业、生物医学等领域内,如高频感应加热、熔炼、淬火、超声诊断、核磁共振成像等,都需要功率或大或小、频率或高或低的信号发生器。 本设计采用FPGA来设计制作多功能信号发生器。该信号发生器可以产生锯齿波、三角波、方波等波形。 2 FPGA简介 FPGA(Field-Programmable Gate Array)即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。 与传统们阵列和掩模可编程门阵列(MPGA)相比,FPGA具有很多的优点,传统门阵列可以用来设计任何电路,但是只能在工厂中一次性编程,而且还需要针对该电路的特定的掩模。FPGA是标准通用器件。使用其代替MPGA,可以将设计时间由几个月缩短至几小时,并且使设计更加简单,从而减少了错误修改和设计指标变更的花费。 FPGA器件在结构上,由逻辑功能块排列为阵列,它的结构可以分为三个部分:可编程快CLB(Configurable Logic Blocks)、可编程I/O模块IOB(Input Block)和可编程内部连线PI(Programmable Interconnect)。CL B在器件中排列为阵列,周围有环形内部连线,IOB 分布在四周的管脚上。 FPGA也存在缺点,FPGA中,每个可编程的点都有电阻和电容。电阻和电容的使用减慢了信号的传输速度,所以FPGA的速度比传统门阵列要低,而且,FPGA中互联延迟是

vhdl语言多功能信号发生器

河南机电高等专科学校《职业技能培训》结课大作业 多功能信号发生器设计 姓名: 专业班级: 学号:0 任课教师: 时间: 成绩:

多功能信号发生器设计 医电08级1班刘登臣任课老师:石新峰 摘要:信号发生器是一种常用的信号源,广泛应用于电子电路,自动控制系统和教学实验等领域。目前使用的信号发生器大部分是函数发生器,且特殊发生器的价格昂贵,所以本设计使用的是AT89c51单片机构成的发生器,可产生三角波方波正弦波等多种特殊波形和任意波形,波形的频率可用程序控制改变。在单片机上加外围器件矩阵式键盘,通过键盘控制波形频率的增减以及波形的选择,并用了LED显示频率的大小。在单片机的输入端口进行D/A转换,再通过运放进行波形调整。本设计具有线路简单、结构紧凑、价格低廉、性能优越等优点。 关键词:信号发生器;单片机;波形调整

目录 1. 概述 (4) 2. 设计要求 (4) 3. 总体构思 (4) 4. 各单元电路的设计和实现 (6) 5. 功能仿真及其结果 (8) 6. 编译,现在及调试 (17) 7. 总结与展望 (22) 参考文献 (22)

1.概述 近年来,正弦脉宽调制技术(简称为SPWM技术)以其优良的传输特性成为电力电子装置中调制技术的基本方式。SPWM法就是以正弦波作为基准波(调制波),用一列等幅的三角波(载波)与基准正弦波相交,由交点来确定逆变器的开关模式。这样产生的脉冲系列可以使负载电流中的高次谐波成分大为减小。电力电子技术和微机控制技术的发展使得正弦波脉宽调制技术(SPWM在电气传动、ups电源等领域得到广泛的应用,如何产生标准的、精确的和可控的SPWM信号是实现这种技术的关键。 2.设计要求 1.学习MSP430F169单片机等器件的工作原理及各引脚的说明,掌握MSP430F169单片机系统的工作原理和设计方法。利用MSP430F169等元器件完成单片机系统设计和焊装、调试。 2.使用MAX038芯片实现正弦、三角波信号产生器和单片机测频电路、程序设计。 3.完成基于MSP430F169单片机的SPWM程序设计和SPWM驱动电路硬件焊装、调试 3.总体构思 3.1总体设计框图 总体设计框图如图1-1所示。

任意波形发生器

1绪论 1.1任意波形发生器的发展历程 任意波形发生器(Arbitrary Wave Generator)是在1975年开发成功的,从此,信号发生器产品增加了一个新品种。在任意波形发生器作为测量用信号激励源进入市场之前,为了产生非正弦波信号,已使用函数发生器提供三角波、斜波、方波和余弦波等几种特殊波形。声音和振动分析需要复杂调制的信号源,以便仿真真实的信号,只有借助任意波形发生器,例如医疗仪器测试往往需要心电波形,任意波形发生器很容易产生各种非标准的振动信号。 早期的任意波形发生器主要着重音频频段,现在的任意波形发生器已扩展到射频频段,它与数字示波器(DSO)密切配合,只要数字示波器捕获的信号,任意波形发生器就能复制出同样的波形。在电路构成上,数字示波器是模拟/数字转换,任意波形发生器是数字/模拟的逆转换,目前任意波形发生器的带宽达到2GHz,足够仿真许多移动通信、卫星电视的复杂信号。 生产数字示波器的仪器公司一般都供应任意波形发生器,如安捷伦、力科、泰克公司,也有只生产任意波形发生器的公司,如雷科、斯坦福公司。仪器有台式、PC机虚拟、VXI总线、PXI总线等多种方式,大部分产品只有1路输出,有的高达16路输出。仪器采样率从最低的100KS/s到4GS/s,相当实时带宽50kHz到最高的2GHz。产生任意波形的方法主要有两种:即存储器和直接数字合成(DDS),前者电路比较简单,分两种形式:相位累加器式与计数器式,但需要较深的存储容量。任意波形发生器的波形定义主要有面板设定、方程式设定、波形下载、软件设定、数字示波器下载、内置编辑器等多种。 1.2任意波形发生器的发展趋势及应用 任意波形发生器的应用非常广泛,在原理上可仿真任意波形,只要数字示波器或其它记录仪捕捉到的波形,任意波形发生器都可复制出,特别有用的是仿真单次偶发的信号,例如地震波形、汽车碰撞波形等等。 任意波形发生器的发展趋势是更高取样率,更高分辨率和更大存储量,目前实时带宽超过1GHz的产品比较少,而且分辨率只有8位,不能满足快速发展的移动通信和高速网络的测量要求。与数字存储示波器相比,任意波形发生器的全面指标存在明显差距,前者的取样率达到20GS/s和带宽6GHz,后者的取样率是4.8GS/s 和带宽2GHz。任意波形发生器首先要赶上数字存储示波器,然后再往前发展,因为在电路构成方面,任意波形发生器的核心部件是高速数/模转换器,它的工艺潜力还很大,显然缺少的是市场需求。 任意波形发生器在通信系统、测试系统等方面得到广泛应用。任意波形发生器的另一重要应用领域是低频,例如心电图、汽车点火、防撞气囊、医疗仪器等。

基于FPGA的波形发生器的设计

基于FPGA的波形发生器的设计 摘要:利用FPGA完成波形发生器的设计,可以产生频率和幅值都可调的正弦波和三角波。首先对标准波形进行采样,然后经过DA转换和滤波输出平滑的波形。采用VHDL硬件描述语言完成波形发生和存储程序编写,并下载到Xilinx公司的SpartanⅡ系列目标芯片XC2S2005PQ-208上调试通过,得到的波形好,可达到技术指标。 关键词:FPGA,VHDL,采样,正弦波,三角波 Design of Wave-Generator Based on FPGA Cao Xueke Tian Dandan Tan Xianfeng (Nanhua University HengYang Hunan 421001) Teacher:Wang Yan Abstact:Design the Wave-Generator based on FPGA. It can generate sine wave and triangle wave. First, it samples the standard wave, then generates a smooth wave after DA converter and filter. Using hardware design language VHDL to finish the wave generation and storage and downloading it into the object chip of XC2S2005PQ-208 SpartanⅡ,Series, Xilinx, Co. The waves are well done and can reach the technique index. Keywords:FPGA, VHDL, sampleing, sine wave, triangle wave

DDS波形发生器设计实验报告1

DDS 信号发生器设计 一、设计要求 利用FPGA+DAC,设计一个DDS 信号发生器。 1) 分辨率优于1Hz ; 2) ROM 表长度8位、位宽10位; 3) 输出频率优于100kHz (每周期大于50个点); 4) 显示信号频率/频率控制字(可切换); 5) 直接输入频率控制字或输出频率。 二、DDS 设计原理 相位累加器 DDS 基本结构框图 DDS 系统的核心是相位累加器,它由一个加法器和一个相位寄存器组成;每来一个时钟,相位寄存器以步长增加,相位寄存器的输出与频率控制字(M )相加,然后输入到正弦查询表地址上。 正弦查询表包含一个周期正弦波的数字幅度信息,每个地址对应正弦波中0 0~360范围的一个相位点。查询表把输入的地址相位信息映射成正弦波幅度的数字量信号,驱动DAC ,输出模拟量。 三、DDS 参数计算 相位寄存器每经过N 2/M 个C f 时钟后回到初始状态,相应地正弦查询表经过一个循环回到初始位置,整个DDS 系统输出一个正弦波。 1)输出正弦波周期 02N C T T M = (1) 2)输出正弦波频率 2c out N f f M =? (2) 3)M 与输出out f 和C f 之间的关系 (2)N out c M f f =? 021 N M <≤- (3)

4)DDS 的最小分辨率 通常用频率增量来表示频率合成器的分辨率 2c out N f f M =? m i n m i n 2 c N f f f ?== (4) 根据以上公式,给定输入时钟频率10MHz ,相位累加器位宽24位时,计算得到输入频率控 制字位宽为20位时可满足设计要求,最小分辨率为0.6Hz 。 四、VHDL 程序 变量说明:clk ,输入时钟,10MHz ; count ,控制输入频率控制字; rset ,系统复位; en ,频率控制字输入; sselect ,频率控制字/频率切换显示; ctwo ,数码管双行显示; 顶层设计实体 图一 DDS 信号发生器顶层设计原理图 控制频率控制字外部输入VHDL library ieee; use ieee.std_logic_1164.all; entity M_creat is port(count,rset,en:in std_logic; M_out:out std_logic_vector(19 downto 0); M_F:out std_logic_vector(7 downto 0)); end entity M_creat; architecture behv of M_creat is component counter5 is port(count:in std_logic; dout:out std_logic_vector(4 downto 0)); end component; component counter4 is

波形发生器(VHDL)

华南理工大学广州学院 数字系统设计(VHDL)课程报告 题目:波形发生器 姓名: 学号: 序号: 学院: 班级: 指导老师: 完成时间: 2014-1-1 __

题目:波形发生器 一、 功能及原理介绍 1、功能介绍 此波形发生器,通过选择“00”、“01”、“10”、“11”,这四种模式来选择相应的 波形输出,除此之外,它还可以产生一些其它的波形,利用MIF 文件生成器产生波形的MIF 文件,由此产生各种波形。这个波形发生器可以用作信号发生器,产生一些自己所需要的信号。 2、原理介绍 正弦信号发生器的结构由 3 部分组成:数据计数器或地址发生器、数据 ROM 和 D/A 。性能良好的正弦信 号发生器的设计要求此 3 部分具有高速性能,且数据 ROM 在高速条件下,占用最少的逻辑资源,设计流程最便捷,波 形数据获最方便。顶层文件any_bo.VHD 在FPGA 中实现,包含2 个部分:ROM 的地址 信号发生器由7 位计数器担任,和正弦数据ROM ,拒此,ROM 由LPM_ROM 模块构成能达到最优设计,LPM_ROM 底层是FPGA 中的EAB 或ESB 等。地址发生器的时钟CLK 的输入频率 f0 与每周期的波形数据点数(在此选择 128 点)。 2.1.MIF 文件生成器的使用方法 mif 文件就是存储器初始化文件,即memory initialization file ,用来配置RAM 或ROM 中的数据。而产生MIF 文件的在这里有三种方法:(1)利用Quartus 自带的mif 编辑器、(2)利用mif 软件来生成、(3)用C 语言或者matlab 语言等来生成,而我就利用MIF 文件生成器MIF_Maker 2010来产生MIF 文件。 ① 双击打开MIF_Maker 2010,如图 选择模式 00 01 10 11 7位计数器 (地址发生器) 7位计数器 (地址发生器) 7位计数器 (地址发生器) 7位计数器 (地址发生器) 正弦波数据 存储ROM 三角波数据 存储ROM 方波数据 存储ROM 锯齿波数据 存储ROM 正弦波输出 三角波输出 方波输出 锯齿波输出

波形发生器(课程设计)

波形发生器的设计 1.设计目的 (1)掌握用集成运算放大器构成正弦波、方波和三角波函数发生器的设计方法。 (2)学会安装与调试由分立器件与集成电路组成的多级电子电路小系统。 2.设计任务 设计一台波形信号发生器,具体要求如下: (1)输出波形:正弦波、方波、三角波。 (2)频率范围:3Hz -30Hz ,30Hz -300Hz ,300Hz -3KHz ,3KHz -30KHz 等4个波段。 (3)频率控制方式:通过改变RC 时间常数手控信号频率。 (4)输出电压:方波峰—峰值V U pp 24≤;三角波峰-峰值V 8U pp =,正弦波峰 -峰V 1U pp >。 3.设计要求 (1)完成全电路的理论设计 (2)参数的计算和有关器件的选择 (3)PCB 电路的设计 (4)撰写设计报告书一份;A3 图纸2张。报告书要求写明以下主要内容:总体方案的选择和设计 ;各个单元电路的选择和设计;PCB 电路的设计 4、参考资料 (l )李立主编. 电工学实验指导. 北京:高等教育出版社,2005 (2)高吉祥主编. 电子技术基础实验与课程设计. 北京:电子工业出版社,2004 (3)谢云,等编著.现代电子技术实践课程指导.北京:机械工业出版社,2003

目录 一. 设计的方案的选择与论证 (3) 1.1 设计方案 (3) 1.1.1 设计方案1 (3) 1.1.2 设计方案2 (4) 1.1.3 设计方案3 (5) 1.2 方案选择 (6) 二. 单元电路的设计 (6) 2.1 方案设计 (6) 2.1.1 正弦波电路 (6) 2.1.2 方波电路 (11) 2.1.3 三角波电路 (12) 2.2 参数的选择 (13) 三、仿真 (14) 3.1 软件介绍 (14) 3.2 仿真的过程与结果 (15) 四、PCB制版 (15) 4.1 软件简介 (15) 4.2 PCB电路板设计步骤 (20) 五、总结与心得 (21) 六、附录 (22) 6.1 材料清单 (22) 6.2 原理图 (23) 6.3 PCB板图 (24) 七、参考文献 (25)

任意波形信号发生器

一、题目要求及分析 1.1题目要求 任意波形信号发生器 利用FPGA器件产生控制信号及数据信号,经DAC0832和TL082转换产生以下波形: 1)正斜率斜波; 2)正弦波; 3)锯齿波; 4)任意波形。 用示波器观察输出波形。 硬件电路内容和要求:用DAC0832实现数模转换电路,用TLC082实现电流-电压转换电路,画出电路原理图。 软件设计内容和要求:VHDL编程实现任意波形的信号控制器。要求可以用开关切换不同的波形数据输出。 1.2题目分析 VHDL语言是随着集成电路系统化和高度集成化的发展而逐步发展起来的,是一种用于数字系统的设计和测试的硬件描述语言。相比传统的电路系统的设计方法,VHDL具有多层次描述系统硬件功能的能力,支持自顶向下和基于库的设计的特点,因此设计者可以不必了解硬件结构。从系统设计入手,在顶层进行系统方框图的划分和结构设计,在方框图一级用VHDL对电路的行为进行描述,并进行仿真和纠错,然后在系统一级进行验证,最后再用逻辑综合优化工具生成具体的门级逻辑电路的网表,下载到具体的CPLD器件中去,从而实现可编程的专用集成电路(ASIC)的设计。 在本次课程设计中,函数发生器的设计采用自顶向下的系统设计的方法,通过MAX+plusⅡ开发环境进行编辑、综合、波形仿真,并下载到CPLD器件中,采用模块化的设计,对功能的修改和增加,只要修改VHDL源程序,而不必更改硬件电路。实现数字系统硬件的软件化。 任意信号发生器体现在它能选择输出四个波形,即正斜率斜波、正弦波、锯齿波、任意波形; 还可以改变波形的某些表征参量,从而控制输出的波形。其主要问题是波形的选择和准备与输出的模拟信号波形相对应的数字信号,前者可以通过外接开关从而选择输出什么样的波形,后者可以通

基于VHDL语言的多功能波形发生器设计与仿真

基于VHDL语言的多功能波形发生器设计与仿真 尹海涛 102081101163 电信学院控制理论与控制工程 摘要:本文简要介绍了VHDL(超高速集成电路硬件描述语言)的情况和应用前景,并利用VHDL语言设计出多功能波形发生器,并进行仿真研究,采用VHDL编程实现,基于可编程逻辑器件CPLD设计多波形发生器的设计方案。整个系统除晶体振荡器和D /A转换外,全部集成在一片芯片上。它可输出频率可调的正弦波、三角波、锯齿波、方波和两种或三种波形线性组合的10种波形。任意波形模块可由用户自行编辑所需波形数据,经下载在不改变整个系统硬件连接的情况下,输出用户所需的特殊波形,实现了传统的波形发生器不具有的一些波形的产生。整个设计采用VHDL编程实现,其设计过程简单,极易修改,可移植性强。 关键词:VHDL语言;程序设计;多功能波形发生器;线性组合; Based on VHDL Language Multifunctional Waveform Generator Design And Simulation Abstract:This article briefly introduced the VHDL (integrated circuit hardware ultra-high speed description language) the situation and the application prospect of VHDL language, and design a multi-function waveform generator, and simulation research, the programming, based on the VHDL programmable logic devices CPLD design many waveform generator design scheme. The whole system in addition to crystal oscillator and D/A transformation otherwise, all in A integrated chip. It can output frequency adjustable sine wave, triangle wave, the sawtooth wave, square wave and two or three waveform of linear combination of 10 waveform. Arbitrary waveform module can be required by the user to edit the data in the download, wave does not change the system hardware connection, the output of the customer need special waveform, realize the traditional waveform generator is not some of the waveform production. The whole design by the programming, and its design VHDL process simple and easy to modify, portability is strong. keywords:wavegenerator; linear combination;VHDL;CPLD

DDS任意波形发生器的设计与实现

DDS任意波形发生器的设计与实现 近年来,随着电子技术的飞速进步,任意波形发生器在信号发生、测试、测量等领域扮演着重要的角色。而Direct Digital Synthesis(DDS)任意波形发生器作为一种数字信号处理技术,由于其高精度、低失真、灵活性强等优点,成为了目前最为常用的任意波形发生器技术之一。 DDS任意波形发生器工作原理基于数字信号处理与相位累 加器。其主要组成部分包括振荡器、相位累加器、数字控制模块和DAC(数模转换器)模块。其中,相位累加器用于产生一 个累加的相位值,该相位值会被数字控制模块处理后再输入DAC模块进行数模转换,并输出到外部电路。而该外部电路毗 连到输出端口,可以控制输出的幅值以及频率,从而生成所需的任意波形。 在过程中,需要思量多个关键因素。起首,选择合适的振荡器型号以及参考时钟。振荡器的质量和稳定性直接影响到输出信号的频率稳定性。而参考时钟的准确性则决定了相位累加器的性能。其次,在相位累加器的设计中,需要合理选择累加的相位步进值以及相位累加位数。过大的步进值可能导致相位区分率降低,而过小的步进值会增加累加器的位数,增加系统的复杂度。另外,数字控制模块的设计需要思量到输入的频率、相位和幅度的变化。最后,需要合理选择DAC模块以及输出电路,以确保输出信号的质量和稳定性。 在实际实现过程中,可以使用FPGA(Field-Programmable Gate Array)作为主要硬件实现平台,并利用VHDL(VHSIC Hardware Description Language)进行硬件描

述,从而构建DDS任意波形发生器。FPGA的高度灵活性使得 其适用于DDS任意波形发生器的实现,并且其可重构的特点使得系统可以依据需要进行扩展和改进。在软件方面,可以使用 C语言编写相应的控制程序,以实现对DDS任意波形发生器的 控制和调整。 是一个综合性的工程项目,需要对电路设计、硬件描述语言、数字信号处理等方面有深度的了解和精通。同时,需要重视对系统整体性能的思量,通过合理的参数选择和适当的技术手段,确保最终的任意波形发生器能够满足实际应用需求。在设计过程中,还需要进行充分的测试和验证,以保证系统的正确性和稳定性。 综上所述,需要综合应用电子技术、数字信号处理、硬件描述语言等多个领域的知识。通过合理的方案设计和工程实践,可以得到高精度、低失真、灵活性强的任意波形发生器,为信号处理、测试、测量等领域提供强有力的支持。在将来,随着科技的不息进步,将继续迎接新的挑战,并不息创新与进步 综合应用电子技术、数字信号处理和硬件描述语言等多个领域的知识,是一个综合性的工程项目。通过使用FPGA和VHDL进行硬件描述,结合C语言编写控制程序,可以实现对DDS任意波形发生器的灵活控制和调整。在设计过程中,需要 充分思量系统整体性能,进行合理的参数选择和技术手段应用,以满足实际应用需求。测试和验证也是不行轻忽的步骤,以确保系统的正确性和稳定性。通过合理的方案设计和工程实践,可以得到高精度、低失真、灵活性强的任意波形发生器,为信号处理、测试和测量等领域提供强有力的支持。随着科技的不息进步,将继续面临新的挑战,并不息创新和进步

(完整word版)VHDL语言正弦波信号发生器设计

AS正弦波信号发生器设计 一、实验内容 1。设计一正弦信号发生器,采用ROM进行一个周期数据存储,并通过地址发生器产生正弦信号。(ROM:6位地址8位数据;要求使用两种方法:VHDL编程和LPM)2。正弦信号六位地址数据 128,140,153,165,177,188,199,209,219,227, 235,241,246,250,253,255,255,254,252,248,244, 238,231,223,214,204,194,183,171,159,147,134, 121,109,96,84,72,61,51,41,32,24,17,11,7, 3,1,0,0,2, 5,9,1420,28,36,46,56,67,78,90,102,115,127。 二、实验原理 正弦波信号发生器是由地址发生器和正弦波数据存储器ROM两块构成,输入为时钟脉冲,输出为8位二进制。 1.地址发生器的原理 地址发生器实质上就是计数器,ROM的地址是6位数据,相当于64位循环计数器. 2.只读存储器ROM的设计 (1)、VHDL编程的实现 ①基本原理:为每一个存储单元编写一个地址,只有地址指定的存储单元才能与公共的I/O相连,然后进行存储数据的读写操作。 ②逻辑功能:地址信号的选择下,从指定存储单元中读取相应数据。

(2)、基于LPM宏功能模块的存储器的设计 ①LPM:Library of Parameterized Modules,可参数化的宏功能模块库。 ②Quartus II提供了丰富的LPM库,这些LPM函数均基于Altera器件的结构做了优化处理。 ③在实际的工程中,设计者可以根据实际电路的设计需要,选择LPM库中适当的模块,并为其设置参数,以满足设计的要求,从而在设计中十分方便的调用优秀的电子工程技术人员的硬件设计成果。 三、设计方案 1.基于VHDL编程的设计 在地址信号的选择下,从指定存储单元中读取相应数据 系统框图如下: 2.基于LPM宏功能模块的设计

「基于FPGA的SPWM型波形发生器的设计」

「基于FPGA的SPWM型波形发生器的设计」随着电力电子技术的快速发展,波形发生器在各种电力电子应用中的 重要性越来越大。传统的基于微控制器或单片机的波形发生器由于其运算 速度慢和运算能力有限,已经无法满足现代电力电子设备对高精度和高速 波形的要求。因此,许多研究者开始探索基于FPGA(现场可编程门阵列)的SPWM(正弦脉宽调制)型波形发生器的设计。 基于FPGA的SPWM型波形发生器是一种利用FPGA芯片的并行计算能 力和高集成度来实现高速、高精度波形发生的设备。FPGA芯片具有可编 程逻辑单元和存储单元,可以通过对逻辑单元和存储单元的编程,实现不 同的电路功能。因此,基于FPGA的波形发生器可以通过对FPGA芯片的编程,实现复杂的计算和控制功能,从而实现高速、高精度的波形发生。 基于FPGA的SPWM型波形发生器的设计主要包括以下几个方面: 1.硬件设计:基于FPGA的波形发生器的硬件设计包括FPGA芯片的选 择和外围电路的设计。FPGA芯片的选择需要考虑其计算和存储能力,以 及所需的输入输出接口等。外围电路的设计包括时钟电路、电源电路、输 入输出接口电路等。 2. 软件设计:基于FPGA的波形发生器的软件设计主要包括对FPGA 芯片的编程和波形生成算法的实现。对FPGA芯片的编程可以使用HDL (硬件描述语言)如Verilog或VHDL实现,通过对逻辑单元和存储单元 的编程,实现波形生成算法的功能。 3.系统集成:基于FPGA的波形发生器的系统集成包括硬件和软件的 集成。在硬件方面,需要将FPGA芯片和外围电路进行连接和调试,确保

其工作正常。在软件方面,需要将波形生成算法与FPGA芯片的编程进行集成,以实现高速、高精度的波形发生。 基于FPGA的SPWM型波形发生器相比传统的微控制器或单片机的波形发生器具有以下优点: 1.高速:FPGA芯片具有并行计算能力,可以同时进行多个任务的计算和控制,因此可以实现高速波形的生成。 2.高精度:FPGA芯片具有高集成度和复杂的运算能力,可以实现复杂的算法和控制功能,因此可以实现高精度波形的生成。 3.可编程性:FPGA芯片可以通过对逻辑单元和存储单元的编程,实现不同的电路功能,因此可以灵活地适应不同的波形生成需求。 综上所述,基于FPGA的SPWM型波形发生器是一种利用FPGA芯片的并行计算能力和高集成度来实现高速、高精度波形发生的设备。通过对FPGA芯片的硬件设计、软件设计和系统集成,可以实现高速、高精度的波形发生,并满足现代电力电子设备对波形发生的要求。

周期可调多波形发生器

EDA技术实用教程实验报告 实验名称:周期可调的多波形发生器 系别:X X X 专业:电子信息工程 姓名:X X X 学号:XXXXXXX 2010.12.2

周期可调的多波形发生器 1、实验目的 熟悉MAX+plu sⅡ的VHDL文本设计流程的全过程,学会用可编程逻辑器件设计制作一个波形发生器,该波形发生器能产生正弦波、方波、三角波等波形。 2、实验要求 (1)具有产生正弦波、方波、三角波3种周期性波形的功能。 (2)用开关输入编辑生成上述3中波形的线性组合波形。 (3)输出波形的频率范围100—1KHz,频率可调。 3、分析: (1)产生正弦波,是通过预先计算出正弦波表,然后查表输出实现的(此处一个周期正弦波取64点)。 (2)产生方波,是通过交替送出全0和全1,给以适当的延时实现的。 (3)产生三角波,是通过由全0不断加同一个数,到全1之后再不断减同一个数来实现的。 4、所用器件:EP1K30QC208-3和EPC2LC20以及D/A转换芯片。 5、流程图 6、各模块功能 模块CHUZHI提供初值,供下一个模块FANA分频时用,通过不同的初值,是由输入a决定的。 library ieee; use ieee.std_logic_1164.all; entity chuzhi is port(a:in std_logic_vector(3 downto 0); q:out integer range 0 to 312); end chuzhi; architecture chu_arc of chuzhi is begin process(a) begin case a is when "0001" =>q<=313; when "0010" =>q<=156; when "0011" =>q<=104; when "0100" =>q<=78;

DDS波形发生器VHDL源码

DDS波形发生器VHDL源码 下面是一个DDS(Direct Digital Synthesis,数字直接合成)波形发生器的VHDL源码示例。该波形生成器可以产生由时钟频率和相位累加器控制的正弦波。注意,以下的源码仅仅是一个简单的示例,实际的DDS 波形发生器可能有更复杂的实现。 ```vhdl library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity DDS is generic N : integer := 10; LOG2_N : integer := 4 port clk : in std_logic; reset : in std_logic; sin_wave : out std_logic_vector (N-1 downto 0) end entity DDS; architecture behavioral of DDS is

signal accumulator : unsigned (N-1 downto 0); signal phase : unsigned (N-1 downto 0); signal phase_inc : unsigned (N-1 downto 0); begin process (clk, reset) begin if reset = '1' then accumulator <= (others => '0'); phase <= (others => '0'); elsif rising_edge(clk) then accumulator <= accumulator + phase_inc; phase <= phase + phase_inc; end if; end process; process (phase) begin end process; phase_inc <= unsigned(resize(unsigned(2**LOG2_N), N)); end architecture behavioral;

自-基于VHDL的波形发生器的设计与仿真

基于VHDL的波形发生器的设计与仿真 王会萍 ( 安庆师范学院物理与电气工程学院安徽安庆246011) 指导教师:张杰 摘要:直接数字频率合成(DDS)是七十年代初提出的一种新的频率合成技术,能够满足现代电子系统设计的需求,因而得到了迅速的发展。而现场可编程门阵列器件(FPGA)的出现,改变了现代电子数字系统的设计方法,提供了一种全新的设计模式。本文将利用DDS和 FPGA技术,提出多种波形信号发生器设计解决方案。文章首先根据各种波形产生的基本原理,建立其数学模型,给出了多波信号发生器的顶层原理图及系统结构图,然后利用ALTERA公司提供的Singacompler工具对其进行编译,产生QUARTUSII能够识别的VHDL源程序,最后对设计方案进行了波形仿真,仿真结果表明设计方案正确,达到了设计要求。利用DDS和FPGA进行多种波形信号发生器的设计,其具有设计简单,修改灵活,输出波形信号稳定等优点。 关键词:波形发生器,DDS,现场可编程门阵列,单片机。 1 引言 20世纪90年代,国际上电子和计算机技术较先进的国家,一直在积极探索新的电子电路设计方法。电子设计自动化(EDA)工具给电子设计带来了巨大的变革,特别是可编程逻辑器件和硬件描述语言的出现和发展,解决了用传统的方法设计较大系统工程时的诸多不便,成为电子电路设计人员最得力的助手。随着计算机和EDA技术的发展,基于FPGA的电子设计则是目前发展较为迅速的一个领域,而且广泛应用于计算机、通信等各个领域。因此,本文主要利用VHDL,设计制作一个多功能波形发生器。 本文共分5大部分,第1部分介绍波形发生器的研究现状、研究波形发生器的目的和意义以及研究的主要内容,并且就研究现状指出了其中存在的问题。 接着第2部分则是介绍了DDS技术的基本原理,并分析DDS技术的特点。直接频率合成(DDS)技术因有突出的特点,如输出波形灵活且相位连续(这是其最大优势)、频率稳定度高、输出频率分辨率高、频率转换速度快、输出相位噪声低、集成度高、功耗低、体积小等,使其在频率合成源技术中被广泛应用,但DDS合成频率比较低且输出频谱杂散较大,又限制了其应用。本段将介绍直接频率合成(DDS)的一些基础知识及常见问答。 本文第3部分主要确定设计方案,硬件、软件等方面的确定,进而得出软件的流程图,并确定主要器件选型。波形发生器各个模块 紧接着第4部分将会给出测试结果。 下部分给出的是相应的仿真结果以及心得体会。 2 绪论 2.1 波形发生器的发展现状 采用传统的模拟振荡电路构成的波形发生器产生的信号频率精度低,不仅成本高,外围电路复杂,易受外界干扰,而且调试困难,不便于调控,实现的性能指标也不理想。对此采用具有良好性能的专用集成芯片就能达到本题的目的要求。但采用该方法所需的外围电路模块多且较为复杂,不利于控制和问题的检查。而纯单片机的方法虽便于控制但又难以达到题目的要求。

基于FPGA的DDS波形发生器

基于FPGA 的DDS 波形发生器

设 计 班级:08电子信息姓名: 焦春焕学号:080230159

基于FPGA的DDS波形发生器设计 摘要】详细阐述了直接数字频率合成器的原理与设计,利用Verilog HD语言实现了DD功能。 概述】将现场可编程逻辑器件FPGA和DDS技术相结合,具体的体现了基于VHDL 语言的灵活设计和修改方式是对传统频率合成实现方法的一次重要改进oFPGA器件作为系统控制的核心,其灵活的现场可更改性,可再配置能力,对系统的各种改进非常方便,在不更改硬件设计部分电路的基础上还可以进一步提高系统的性能。文章给出仿真结果,经过验证本设计能够达到其预期性能指标。 系统设计部分】 1整个设计组织结构 DDS基本原理 DDS建立在采样定理基础上,首先对需要产生的波形进行采样,将采样值数字化后存入存储器作为查找表,然后通过查表读取数据,再经D/A转换器转换为模拟量,将保存的波形重新合成出来。DDS基本原理框图如图1所示。 1 DDS基本工作原理框图 除了滤波器(LPF)之外,DDS系统都是通过数字集成电路实现的,易于集成和小型化。系统的参考时钟源通常是一个具有高稳定性的晶体振荡器,为各组成部分提供同步时钟。频塞址吋忡换丰 率控制字(FSW)实际上是相位增量值(二进制编码)作为相位累加器的累加值。相位累加器在每一个参考时钟脉冲输入时,累加一次频率字,其输出相应增加一个步长的相位增量。由于相位累加器的输出连接在波形存储器(ROM)的地址线上,因此其输出的改变就相当于查表。这样就可以通过查表把存储在波形存储器内的波形抽样值(二进制编码)查找出来。ROM的输出送到D/A 转换器,经D/A转换器转换成模拟量输出。

任意波形发生器

湖北轻工职业技术学院电子设计自动化 实训报告 题目基于CPLD的任意波形发生器 系部信息工程系 专业电子信息工程技术 班级 09 电信 姓名朱丽丝 学号 0903021141 指导教师赵欣 2011年06月25日

目录 引言 (2) 第一章概述 (2) 第二章设计说明 (3) 2.1 设计要求 (3) 2.2 设计思路 (3) 第三章波形发生器的硬件结构 (4) 第四章系统设计 (5) 4.1 正弦波发生器的设计 (5) 4.2 三角波发生器的设计 (6) 4.3 方波发生器的设计 (6) 4.4 波形选择器的设计 (7) 4.5 D/A转换器 (7) 第五章设计结果 (8) 5.1 软件仿真结果 (8) 5.2 硬件测试结果 (9) 第六章总结 (11) 第七章致谢 (12) 第八章参考文献 (13) 第九章附录 (13) 7.1相关芯片资料 (13) 7.2相关程序; (15)

引言 任意波形发生器(AWG)是信号源的一种,它具有信号源所有的特点和要领。我们传统都认为信号源主要给被测电路提供所需的被测信号(各种波形),然后用其他仪表测量感兴趣的参数。可见信号源在电子实验和测试处理中,并不测量任何参数,而是根据使用者的要求,仿真各种测试信号,提供给被测电路,已达到测试的需要。 任意波形发生器是一种特殊的信号源,具有综合其他信号源波形生成能力,因而适合各种仿真实验的需要。 为近一步了解波形信号发生器的工作原理,我们设计了一种较简单任意波形发生器。要求电路至少可以产生正弦波、三角波、方波,并通过键盘切换三种波形的输出。电路设计中充分利用EDA-V硬件平台实现该波形发生器,并使用示波器测量输出结果。 第一章概述 硬件描述语言HDL是EDA技术中的重要组成部分,VHDL是当前最流行的硬件描述语言之一,此语言具有良好的可靠性、可移植性等特点。本设计主要是利用VHDL语言设计一个多功能信号发生器,根据输入信号的选择可以输出正弦波、三角波、方波3种信号,主要使用了Altera公司的MAX+plusII软件。 本设计利用VHDL语言使用文本输入法,新建工程,通过设计输入、编译、仿真完成各种信号的设计,然后生成元器件,再使用原理图输入法完成各部分的整合,从而形成一个完整的多波形信号发生器,而后经过锁定引进下载数模转换可以在示波器观察到波形。

基于verilog hdl语言的多功能波形发生器设计

《基于Verilog HDL语言的多功能波形发生器设计》第1页共22页 基于Verilog HDL语言的多功能波形发生器设计 学生姓名:指导老师: 摘要:本文主要探索了应用EDA灵活可重复编程和方便在系统重构的特性,以Verilog HDL为设计语言,将硬件功能以软件设计来描述,提高了产品的集成度,缩短开发周期。所设计的波形发生器可产生正弦波(sina_wave)、锯齿波(swat_wave)、矩形波(squr_wave)、三角波(trig_wave)四种信号,能够实现信号的转换并且频率可调;设计的频率计以1Hz为基准信号,测量的范围是1Hz—9999Hz,测量的结果以四位十进制的形式输出。能实现任意波形的输出并且能够测量外来信号的频率,这也是本文的设计思路。 关键词: DDS;;Verilog HDL;EDA;Max+PlusⅡ;波形发生器 Abstract:This article explores the application of EDA to facilitate flexible and reprogrammable and reconstruction in the system features to Verilog HDL design language, the hardware functions to software design to describe and improve product integration, 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; designed to 1Hz frequency counter For the reference signal, measured in the range 1Hz-9999Hz, the measurement results in the form of four decimal output. which is the design idea of this article . Key words: DDS; Verilog HDL;EDA; Max+PlusⅡ; a rbitrary waveform generator

相关主题
相关文档
最新文档