您的位置: 嵌入式在线 > 解决方案 > 工业控制 > 基于SOPC的函数信号发生器的设计

基于SOPC的函数信号发生器的设计

2008-05-13      嵌入式在线      收藏 | 打印

       信号发生器在电子测量和自动控制领域应用十分广泛,常用的信号发生器大多由模拟电路构成,由于电路复杂、调试麻烦且精度低等缺点,一些复杂模拟电路已被数字电路所代替。

       随着计算机软、硬件的发展,计算机与外设之间的数据通信越来越频繁,也越来越便利,虚拟仪器应运而生。本文介绍基于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以上时,波形几乎没有失真,且正弦波和三角波所要求的频率与方波要求的频率不完全相同,必须通过按键控制频率输出,为不同的波形提供不同的频率,使其波形更完美。


 

本文来源:电子开发网     作者:孙沉芳

隐藏原文↑


查看原文↓

解决方案悬赏

如果您是正在寻求此类产品解决方案的整机制造商,请点击”我要悬赏”按钮提交您所需要的特定解决方案。

我要悬赏
解决方案揭榜

如果您是此类产品解决方案的提供商、组织或个人,请点击“我要揭榜”按钮揭榜悬赏区里您所拥有的解决方案。

我要揭榜

验证码:  看不清?