基于SOPC的函数信号发生器的设计
扫描二维码
随时随地手机看文章
信号发生器在电子测量和自动控制领域应用十分广泛,常用的信号发生器大多由模拟电路构成,由于电路复杂、调试麻烦且精度低等缺点,一些复杂模拟电路已被数字电路所代替。
随着计算机软、硬件的发展,计算机与外设之间的数据通信越来越频繁,也越来越便利,虚拟仪器应运而生。本文介绍基于SOPC实现的函数信号发生器部分原理。
1 SOPC的简介
SOPC技术是美国Altrea公司于2000年最早提出的,并同时推出了相应的开发软件Quartus II。SOPC是基于FPGA解决方案的SOC, SOPC的设计是以IP为基础的,以硬件描述语言VHDL为主要设计手段,借助于以计算机为平台的EDA工具进行的。与传统的专用集成电路设计技术相比, SOPC的设计全程,包括电路系统描述、硬件设计、仿真测试、综合、调试、系统软件设计,直至整个系统的完成,都由计算机完成。其设计技术直接面向用户,使系统级专用集成电路的实现有了更多的途径,即除传统的ASIC器件外,还能通过大规模FPGA等可编程器件来实现。
SOPC设计包括以32位Nios软核处理器为核心的嵌入式系统的硬件配置、硬件设计、硬件仿真、软件设计、软件调试等。SOPC系统设计的基本软件工具主要有: Quartus II,用于完成Nios系统的综合、硬件优化、适配、编程下载和硬件系统测试; SOPCbuilder是Altera Nios嵌入式处理器开发软件包,用于实现Nios系统的配置、生成、Nios系统相关的监控和软件调试平台的生成; ModelSim用于对SOPCBuilder生成的Nios的HDL描述进行系统功能仿真;Matlab/DSP Builder,可借助于生成Nios系统的硬件加速器,进而为其定制新的指令; GNU Pro用于进行软件调试。
2 函数信号发生器的设计步骤与实现
(1)设计步骤
用VHDL语言结合原理图设计实现一个函数信号发生器,输出正弦波、方波和三角波三种波形。将频率控制、分频、三角波、正弦波、方波发生各个模块分别用VHDL语言编程为一个子程序,并把每一个模块转换成图形文件,然后在原理图编辑框调用这些图形模块,连接电路如图1所示。通过按键1到按键4控制频率调节f〔3...0〕,用按键6、按键7、按键8控制dlt、sin、sqr波形选通,最后把八位输出接DAC0832通过D/A转换,从示波器上就能看到波形输出。按下不同的按键输出不同的波形及频率。
(2)原理实现
frqload.vhd:把四位频率控制字f〔3...0〕转换为相对应的整数输出q,用于分频计数使用; frq_div.vhd:把输入的时钟CLK进行分频,对分频计数a逐次减一,当分频计数a被减到零时,给出一个输出q;作为三角波模块(delta_gen)、方波模块(square_gen)、正弦波模块(sin_gen)的时钟clk,实现了对输入时钟CLK的a分频。delta_gen.vhd:设定一个变量num,定义其范围为“00000111”到“11111000”,每到一个脉冲,分别对它进行+8或-8,然后把改变后的num送到输出q,生成了三角波信号。
square_gen.vhd:设定一个变量num,每到一个脉冲,检测它是否小于512,若小于512,则把高电平送到输出,并对num+1,否则就输出低电平,并赋值num为0,生成了方波信号。
sin_gen.vhd:通过定义正弦数据表,每到一个脉冲,逐次查找并输出相应的正弦数据,生成了正弦波形。
mkgrp.vhd:用于控制输出波形的选通,若只有sin输入高电平,则输出正弦波,以此类推,假若同时有dlt和sin都输出高电平,则输出波形时三角波和正弦波的叠加,依此类推。
下面是用VHDL语言编程的三角波信号的程序。
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity delta_gen is
port (clk, reset: in std_logic;
q: out std_logic_vector (7 downto 0));
end delta_gen;
architecture a of delta_gen is
begin
process (clk, reset)
variable num: std_logic_vector (7 downto 0);
variable ff: std_logic;
begin
if reset=‘0‘ then
num: =" 00000000";
elsif clk‘event and clk=‘1‘ then
if ff=‘0‘ then
if num=" 11111000" then
num: =" 11111111";
ff: =‘1‘;
else
num: =num+8;
end if;
else
if num=" 00000111" then
num: =" 00000000";
ff: =‘0‘;
else
num: =num-8;
end if;
end if;
end if;
q<=num;
end process;
end a;
图1 连接电路
3)具体实现过程
编译程序,通过编译进入仿真阶段。设CLK为1ns,只有sin为高电平,输出是用逻辑八位表示的正弦波的波形数据。
引脚锁定,选用GW48-SOPC系统,目标芯片为ACEX1K系列EP1K30TC144-3,用模式5,并对八位的逻辑输出进行D/A转换,图2为D/A扩展板原理图(图中R1= 10kΩ, R2= 50kΩ, Rp=15kΩ)。
在Quartus II中,通过菜单Assignments Editor项进入引脚锁定编辑器,主时钟CLK接Clock0 (第126引脚),用键1、键2、键3、键4控制四位频率,接PIO0-PIO3,相应的引脚为8、9、10、12。用键6、键7、键8控制波形输出的选通dlt、sin、sqr,对应的引脚为18、19、20。把输出逻辑八位接系统板上的D/A转换,即PIO24-PIO31,对应的引脚为41、42、65、67、68、69、70、72。将这些信息输入引脚编辑器存储后,必须再编译一次才能将引脚锁定信息编译进编程下载文件中。将编译产生的SOF格式下载文件配置进FPGA中,下载成功后即可进行硬件测试。通过GW48-SOPC系统上的模式选择键进行模式选择,连接示波器观察输出波形。
图3为函数信号发生器输出的三角波。
图3 函数信号发生器输出的三角波
3 总结
(1)输出信号频率的高低由频率字和参考频率等决定外,另一个因素是D/A的转换速度。FPGA的速度与D/A相比要快得多,所以真正决定输出信号频率的因素是D/A的速度。
(2)上面提供的程序在GW48—SOPC实验开发系统中测试通过,产生的信号稳定,频率连续可调。输入频率接实验板上CLKO的50MHz以上时,波形几乎没有失真,且正弦波和三角波所要求的频率与方波要求的频率不完全相同,必须通过按键控制频率输出,为不同的波形提供不同的频率,使其波形更完美。