任意波形信号
EDA课程设计
任
意
波
形
信
号
发
生
器
姓名: 陈冲
班级: 07通信工程
指导老师:孙惠章
目录
一.简述 (3)
二.设计性能要求 (3)
三.系统框图 (3)
四.系统电路图 (3)
五.基本工作原理 (4)
六. 单元电路模块源程序及功能 (5)
七.系统仿真波形 (10)
八.引脚锁定 (11)
九.实验结果及硬件验证 (11)
十.实验心得 (13)
任意波形信号发生器的设计
一.简述
随着信息科技的发展,波形发生器在科技社会等多个领域发挥着越来越重要作用。采用eda技术利用quartus60软件平台,基于大规模可编程逻辑器件 fpga设计的多功能波形发生器系统,大大简化其结构 , 降低成本 , 提高了系统的可靠性和灵活性。设计中运用计数器,数据选择器,对所需的频率进行选择和同步。使用宏功能模块存储波形。然后多波形进行幅度的选择。产生满足需要的不用频率和幅度的波形。
二.设计性能要求
1.能输出正弦波,锯齿波,阶梯波,三角波,方波,矩形脉冲等八种波形。
2.具有幅度和频率的调整。
3.单元电路模块使用VHDL语言编写。
三.系统框图
图1.任意波形信号发生器系统框图
四.系统电路图
图2.任意波形信号发生器系统电路图
五.基本工作原理
将要产生的波形数据存入波形存储器中, 然后在参考脉冲的作用下, 对输入的频率数据进行累加, 并将累加器输出的一部分作为读取波形存储器的地址, 将读出的波形数据经D/A 转换为相应的电压信号,D/A 转换器输出的一系列的阶梯电压信号经低通滤波器滤波后便输出了光滑的合成波形的信号。
选择八种基础波形为设计与实现的对象,而八个波形作为同一个任意波形发生器里的四个部分,是有着同一个输入与输出,因此在设计上还需要对波形进行选择与控制的部分,通过对时钟脉冲输入的选择,使得八个波形模块只有一个输入为时钟脉冲,其他三个模块则输入始终为0。在波形输出时,设计一个模块控制输出的波形是所要求输出的波形,在时钟脉冲选择与输出波形选择两模块之间。
对于频率的选择可以选择分频器,同时也可以选择计数器,本实验采用的是计数器以实现分频的效果,输出分别为二分频,四分频,八分频,十六分频用以实现不同
的频率。幅度调节可以使用lpm_divide,可以实现八种不同的幅度调节。
六.单元电路模块源程序及功能
1.分频模块
以下为分频模块(CT74161)的VHDL语言编程源程序LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CT74161 IS
PORT(clk : IN STD_LOGIC;
clk_div2 : OUT STD_LOGIC;
clk_div4 : OUT STD_LOGIC;
clk_div8 : OUT STD_LOGIC;
clk_div16 : OUT STD_LOGIC);
END CT74161;
ARCHITECTURE rtl OF CT74161 IS
SIGNAL count : STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
PROCESS(clk)
BEGIN
IF (clk'EVENT AND clk='1') THEN
IF(count="1111") THEN
Count <= (OTHERS =>'0');
ELSE
Count <= count +1;
END IF ;
END IF ;
END PROCESS;
clk_div2 <= count(0);
clk_div4 <= count(1);
clk_div8 <= count(2);
clk_div16 <= count(3);
END rtl;
在Quartus II 6.0下得到的电路模块图形和软件仿真数据:
2.频率选择模块
以下为频率选择模块(tiaopin)的VHDL语言编程源程序library ieee;
use ieee.std_logic_1164.all;
entity tiaopin is
port(s1,s0: in std_logic;
a,b,c,d: in std_logic;
y: out std_logic);
end tiaopin;
architecture one of tiaopin is
signal s: std_logic_vector(1 downto 0);
signal y_temp: std_logic;
begin
s<=s1&s0;
process(s1,s0,a,b,c,d)
begin
case s is
when "00"=>y_temp<=a;
when "01"=>y_temp<=b;
when "10"=>y_temp<=c;
when "11"=>y_temp<=d;
when others=>y<='X';
end case;
end process;
y<=y_temp;
end one;
在Quartus II 6.0下得到的电路模块图形:
3.波形选择模块
以下为波形选择模块(decoder)的VHDL语言编程源程序library ieee;
use ieee.std_logic_1164.all;
entity DECODER is
port(a0,a1,a2,s0,s1,s2:in std_logic;
y0,y1,y2,y3,y4,y5,y6,y7:out std_logic); end DECODER;
architecture ymq of DECODER is
signal a:std_logic_vector(2 downto 0);
begin
a<=a2&a1&a0;
process(a,s0,s1,s2)
variable y:std_logic_vector(7 downto 0);
begin
if(s2='0' and s1='0' and s0='1')then
case a is
when"000"=>y:="11111110";
when"001"=>y:="11111101";
when"010"=>y:="11111011";
when"011"=>y:="11110111";
when"100"=>y:="11101111";
when"101"=>y:="11011111";
when"110"=>y:="10111111";
when"111"=>y:="01111111";
when others=>y:="XXXXXXXX";
end case;
else
y:="11111111";
end if;
y0<=y(0);
y1<=y(1);
y2<=y(2);
y3<=y(3);
y4<=y(4);
y5<=y(5);
y6<=y(6);
y7<=y(7);
end process;
end ymq;
在Quartus II 6.0下得到的电路模块图形和软件仿真数据:
4.输出波形选择模块
以下为输出波形模块(lpm)的VHDL语言编程源程序
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity lpm is
port (s1,s2,s3:in std_logic;
a,b,c,d,e,f,g,h:in std_logic_vector(7 downto 0); z:out std_logic_vector(7 downto 0));
end lpm;
architecture one of lpm is
signal s:std_logic_vector(2 downto 0);
begin
s<=s3&s2&s1;
process (s1,s2,s3,a,b,c,d,e,f,g,h)
begin
case s is
when "000"=>z<=a;
when "001"=>z<=b;
when "010"=>z<=c;
when "011"=>z<=d;
when "100"=>z<=e;
when "101"=>z<=f;
when "110"=>z<=g;
when "111"=>z<=h;
when others=>null ;
end case;
end process;
end one;
在Quartus II 6.0下得到的电路模块图形和软件仿真数据:
5.幅度控制模块
以下为幅度控制模块(tiaofu)的VHDL语言编程源程序library ieee;
use ieee.std_logic_1164.all;
entity tiaofu is
port(a,b,c: in std_logic;
sel: out std_logic_vector(2 downto 0)); end tiaofu;
architecture three of tiaofu is
begin
sel<=a&b&c;
end three;
在Quartus II 6.0下得到的电路模块图形
七.系统仿真波形
注:以正弦波为例
八.引脚锁定
试验中将脉冲输入选择和波形输出选择的输入端接在一起,以实现同步。接实验箱的开关,实现数字信号对模拟波形的控制。将八位输出端接数模转换模块。其引脚锁定图如下:
图3:实验引脚锁定图
九.实验结果及硬件验证
用导线连接各引脚,并将实验设计下载到试验箱。用示波器观察输出波形。。软件模拟数据和示波器显示波形相吻合,能产生八种稳定的波形,具有八种幅度调节和四种频率选择。
图4:实验硬件验证图
十.实验心得
分配到这个设计的时候,班里同学都说我幸运,这个设计相对简单,孙老师在上
课的时候把大部分的模块都已经给出。但是想做一个非常好的任意波形信号发生器,
很多地方需要改进。通过上网查阅资料和自己的整理有了大致的思路后,我便开始在
电脑上设计。在调试和运行中遇到的有些错误无法通过,通过向老师请教和同学之间
的讨论一一克服,完成设计。
通过这次课程设计,一方面学到了不少知识,并且对以前学的有关知识有了更深一步的理解。通过在网上查找资料,才感觉自己的专业知识积累太少,以后应该注意知识的积累。另一方面,这次实验要求独立完成,锻炼了自己的实际操作能力,懂得了实践的重要性。最后就是做事情要有耐心,仔细,要虚心请教。另外,对实现中存储波形的宏功能模块可以做些改进,同样适用VHDL语言编写。代码如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity sina is
port(clk4:in std_logic;
dd4:out integer range 255 downto 0);
end;
architecture dacc of sina is
signal q: integer range 63 downto 0; begin
process(clk4)
begin
if (clk4'event and clk4='1') then
q<=q+1;
end if;
end process;
process(q)
begin
case q is
when 00=>dd4<=255;
when 01=>dd4<=254;
when 02=>dd4<=253;
when 03=>dd4<=250;
when 04=>dd4<=245;
when 05=>dd4<=240;
when 06=>dd4<=234;
when 07=>dd4<=226;
when 08=>dd4<=218;
when 09=>dd4<=208;
when 10=>dd4<=198;
when 11=>dd4<=188;
when 12=>dd4<=176;
when 13=>dd4<=165;
when 14=>dd4<=152;
when 15=>dd4<=140;
when 16=>dd4<=128;
when 17=>dd4<=115;
when 18=>dd4<=103;
when 19=>dd4<=90;
when 20=>dd4<=79;
when 21=>dd4<=67;
when 22=>dd4<=57;
when 23=>dd4<=47;
when 24=>dd4<=37;
when 25=>dd4<=29;
when 26=>dd4<=21;
when 27=>dd4<=15;
when 28=>dd4<=10;
when 29=>dd4<=5;
when 30=>dd4<=2;
when 31=>dd4<=1;
when 32=>dd4<=0;
when 33=>dd4<=1;
when 34=>dd4<=2;
when 35=>dd4<=5;
when 36=>dd4<=10;
when 37=>dd4<=15;
when 38=>dd4<=21;
when 39=>dd4<=29;
when 40=>dd4<=37;
when 41=>dd4<=47;
when 42=>dd4<=57;
when 43=>dd4<=67;
when 44=>dd4<=79;
when 45=>dd4<=90;
when 46=>dd4<=103;
when 47=>dd4<=115;
when 48=>dd4<=128;
when 49=>dd4<=140;
when 50=>dd4<=165;
when 51=>dd4<=176;
when 52=>dd4<=188;
when 53=>dd4<=198;
when 54=>dd4<=208;
when 55=>dd4<=218;
when 56=>dd4<=226;
when 57=>dd4<=234;
when 58=>dd4<=240;
when 59=>dd4<=245;
when 60=>dd4<=250;
when 61=>dd4<=253;
when 62=>dd4<=254;
when 63=>dd4<=255;
when others=>null;
end case;
end process;
end architecture;
在Quartus II 6.0下得到的电路模块图形