0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在FPGA上实现多路正弦波信号发生器芯片的设计

电子设计 来源:郭婷 作者:电子设计 2018-12-30 09:03 次阅读

目前,正弦波信号发生器技术正逐渐成熟,各种直接数字频率合成器(DDS)集成电路AD9850等已得到广泛应用;FPGA方面也已经有相关的DDS设计。但DDS专用芯片还很少见。本文介绍了一种工作频率为25 MHz、可进行异步串行通信、频率相位可调的3路正弦波信号发生器专用芯片的设计方法。

本设计采用OR1200处理器作为主控制器,通过Wishbone总线将3个DDS模块、UART控制器模块、片内RAM模块连接到系统中,构建出一个硬件平台;然后对OR1200进行软件编程,使UART控制器接收专用芯片外部异步串口传送的数据,将这些数据进行处理后传送到DDS模块相应寄存器,从而产生特定频率相位的正弦波信号;最后将程序固化到片内RAM中,在FPGA上实现多路正弦波信号发生器专用芯片的设计。

1 理论分析

直接数字频率合成技术是20世纪60年代末出现的第三代频率合成技术。该技术从相位概念出发,以Nyquist时域采样定理为基础,在时域中进行频率合成。DDS频率转换速度快、频率分辨率高,并在频率转换时可保持相位的连续,因而易于实现多种调制功能。DDS是全数字化技术,其幅度、相位、频率均可实现程控,并可通过更换波形数据灵活实现任意波形。本设计实现频率相位可控的正弦波输出。所用DDS IP软核原理框图如图1所示(未给出时钟和复位信号)。

在FPGA上实现多路正弦波信号发生器芯片的设计



图1中,ftw_i为频率控制字,phase_i为相位控制字,ampl_o为正弦波信号幅度输出,phase_o为正弦波信号相位输出。本设计中频率控制字的位宽为32位,选用的ROM波形数据为10×10结构,因此相位控制字的位宽为10位,正弦波幅度输出位宽也为10位。

图1中第1个加法器和第1个单位延时电路构成相位累加器。它在时钟的控制下以步长ftw_i做累加,输出的N位二进制码与M位相位控制字phase_i相加作为波形ROM的地址。由于在ROM中存取的是1/4周期的正弦波形数据,因此,根据正弦波不同的象限,由相位控制字的2个最高有效位(MSB)来控制是否对波形ROM地址进行移位或者对幅度输出进行反相,最终输出10位的正弦波数字信号

在FPGA上实现多路正弦波信号发生器芯片的设计

频率相位值从UART串口输入,OR1200处理器根据式(1)和式(2)对数据进行处理得出频率相位控制字,赋给相应DDS模块的频率相位寄存器,从而输出特定频率相位的正弦波信号[1]。

2 专用芯片硬件设计

2.1 专用芯片总体结构设计

正弦波信号发生器专用芯片的结构框图如图2所示。Wishbone总线是整个硬件平台的系统总线,OR1200处理器的数据BIU(Bus Interface Unit)和指令BIU作为Wishbone总线的主设备,UART控制器、3个DDS模块以及FPGA片上RAM作为Wishbone总线的从设备,它们通过Wishbone总线连接到系统中。OR1200是整个硬件平台的主控制器,控制该专用芯片配置数据的读入与转换。UART控制器模块主要实现该专用芯片与外部异步串口的通信,负责读入配置数据。3个DDS模块是产生正弦波信号的核心模块,根据频率控制字和相位控制字产生特定频率相位的正弦波信号。FPGA片上RAM作为该专用芯片的片内RAM,系统软件要固化在RAM中。OR1200处理器、Wishbone总线、UART控制器模块及片内RAM模块的时钟直接连到外部时钟源上,3个DDS模块的时钟由外部时钟源通过PLL倍频得到。本专用芯片为低电平复位。

在FPGA上实现多路正弦波信号发生器芯片的设计

2.2 OR1200处理器

OpenRISC1200处理器(简称OR1200)是Opencores组织发布维护的基于GPL并属于OpenRISC1000序列的一款RISC处理器。OR1200是32位RISC,它具有哈佛结构、5级整数流水线,支持虚拟内存(MMU),带有基本的DSP功能,并且外部数据和地址总线接口符合Wishbone标准[2]。

OR1200通用框架由CPU/DSP核心、直接映射的数据Cache、直接映射的指令Cache、基于DTLB的Hash表的数据MMU和指令MMU、电源管理单元及接口Tick定时器,调试单元及开发接口、中断控制器和中断接口、指令及数据Wishbone主机接口[3]组成。

2.3 片内RAM设计

片内RAM由Altera公司EDA工具QuartusII中MegaWizard Plug-In Manager…生成。它为单端口RAM,数据总线32位,大小为8 KB。编写的固化软件程序编译链接后转换为hex格式,在RAM初始化时固化到其中。由QuartusII生成的片内RAM模块不具有Wishbone接口,本设计为其添加了1个Wishbone总线接口。

2.4 DDS模块

DDS模块也是Opencores上的开源IP软核,没有标准的Wishbone接口模块,本设计为DDS模块添加了1个Wishbone总线接口。该DDS模块主要有两类配置数据:频率控制字和相位控制字。给DDS模块加入2个硬件寄存器DDS_FTW和DDS_PHASE,利用这2个寄存器来控制连接到Wishbone总线接口上的输出数据是频率控制字还是相位控制字。

2.5 UART控制器模块

UART控制器模块是Opencores上符合工业标准16550A的开源IP核。该IP核的设计采用Wishbone总线接口规范,支持可选择的32位数据模式和8位数据模式;使用FIFO操作实现,寄存器及所实现的具体功能符合NS16550A标准[4]。在本设计中,UART控制器的波特率默认值为9 600 b/s,UART控制器模块用于与专用芯片外部UART串口通信,通过URXD引脚接收外部串口数据,通过UTXD向外部串口发送数据。

2.6 Wishbone总线主从设备分配

Wishbone总线仲裁采用Opencores上开源软核wb_conmax,为8×16结构,即在该Wishbone总线模块中可以使用8个主设备和16个从设备[5]。本系统中,OR1200的指令和数据单元为Wishbone总线的主设备;片内RAM模块、URAT控制器模块以及3个DDS模块为Wishbone总线的从设备。

根据各子模块在Wishbone总线上的位置和wb_conmax的逻辑实现,相应从设备的地址分配如下:

片内RAM : 0x00000000

DDS1 : 0x10000000

DDS2 : 0x20000000

DDS3 : 0x30000000

UART : 0x90000000

2.7 顶层模块设计

本系统顶层模块例化各子模块,采用Wishbone总线接口技术将各个子模块集成在一起,为每个子模块分配时钟和复位信号,实现硬件平台的总体设计。设计中所用FPGA开发板的时钟为50 MHz,OR1200处理器时钟为25 MHz,Wishbone总线时钟为25 MHz,3个DDS模块时钟为100 MHz。其他模块的时钟都为25 MHz,设计中所用时钟都是通过FPGA芯片中的PLL分频及倍频实现的。正弦波专用芯片的时钟设为各模块时钟的最小值(25 MHz),3个DDS模块的100 MHz时钟通过PLL倍频实现。各模块的复位信号由顶层模块统一分配。

3 专用芯片固化程序设计

正弦波信号发生器专用芯片的固化程序主要包括UART控制器初始化程序和串口数据处理程序两部分:UART控制器初始化程序初始化UART控制器中的各个寄存器,使该控制器能够正常工作。串口数据处理程序采用查询方式接收串口数据,将接收到的数据赋给相应寄存器变量,根据式(1)和式(2)进行计算,得到3路DDS模块的频率控制字和相位控制字,其固化程序流程图如图3所示。固化程序首先初始化OR1200处理器的各个寄存器,然后对UART控制器进行初始化,最后循环处理串口数据。

在FPGA上实现多路正弦波信号发生器芯片的设计

3.1 UART控制器初始化程序

UART控制器中的寄存器都是8位或16位,通过对UART控制器的寄存器赋值来初始化UART控制器。上电复位后UART控制器的初始化工作包括:

(1)清空接收和发送FIFO。

(2)清零接收和发送移位寄存器。

(3)关闭中断。

(4)设置Line控制寄存器为8个数据位、1个停止位、无奇偶校验的通信模式。

(5)读取Line控制寄存器的值,将其最高位置1,允许Divisor锁存器存取;通过设置Divisor锁存器的值设置波特率为9 600 b/s;将LCR赋回原值。

3.2 串口数据处理程序

正弦波信号发生器专用芯片从外部串口接收到的数据分为3类:相位、频率选择信号,相位或频率值,3路正弦波选择信号。固化程序定义了1个32位的数据寄存器变量和1个8位状态寄存器变量。串口数据处理程序采用查询方式接收串口数据,接收到的前4个数据进行相应转换后赋给数据寄存器变量,第5个数据放入状态寄存器变量中,作为相位信号、频率选择信号和3路正弦波选择信号。若为相位信号,则将数据寄存器变量中的数据与0x3ff相“与”,然后根据式(2)得到相位控制字;若为频率信号,则根据式(1)得到频率控制字。最后根据这个信号将数据寄存器变量中的值送入相应的DDS模块硬件寄存器中(DDS_FTW和DDS_PHASE)。

在FPGA上实现了一个多路正弦波信号发生器专用芯片的设计。本设计在友晶公司的DE2-70开发板上进行了验证,使用开发板上3路10位视频数字信号转模拟信号的控制芯片ADV7123作为D/A转换芯片,最后得到3路频率相位可调的正弦波信号。该正弦波信号发生器专用芯片通过串口控制,而未来的设计中可以扩展数字按键控制或者触摸屏控制,不使用外部主控MCU也可以产生特定频率相位的正弦波信号。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1602

    文章

    21302

    浏览量

    593104
  • 芯片
    +关注

    关注

    446

    文章

    47746

    浏览量

    409033
  • 寄存器
    +关注

    关注

    30

    文章

    5025

    浏览量

    117705
  • 信号发生器
    +关注

    关注

    28

    文章

    1274

    浏览量

    107752
收藏 人收藏

    评论

    相关推荐

    多路信号发生器设计

    大侠们,帮助一下啊,需要一个.vi程序多路信号发生器l 可输出双路正弦波(方波、三角信号,其
    发表于 06-01 22:50

    求学 基于DDS芯片正弦波发生器

    ,主要由DDS正弦信号发生器及增益匹配电路、调制信号发生器、调幅电路、调频电路键盘与显示电路等组成。主要性能指标(1)
    发表于 07-17 09:44

    有谁用FPGA做过扫频正弦波发生器,产生信号频率精度最高能到多少

    本帖最后由 elecfans跑堂 于 2015-9-6 13:44 编辑 有谁用FPGA做过扫频正弦波发生器,产生信号频率精度最高能到多少
    发表于 09-06 11:08

    基于FPGA+PWM的多通道信号发生器

    脉冲,经二阶低通滤波和放大电路后即可得到所需波形信号。3.该多路信号发生器幅值分辨率高,频率精度高,且具有良好的直流性能,各通道可独立产
    发表于 12-08 18:07

    正弦波信号发生器的阻抗测量设计

    阻抗测量通常是向被测对象注入微小的正弦电流信号,同时通过测量电压信号,以获取相关的电阻抗信息。系统不仅要求正弦波信号波形失真小、幅值稳定,而
    发表于 07-19 07:36

    如何利用AD7008构成可程控正弦波信号发生器

    可程控正弦波信号发生器的系统组成可程控正弦波信号发生器的设计方案
    发表于 04-07 06:29

    如何采用OR1200实现多路正弦波信号发生器专用芯片的设计

    本文介绍了一种工作频率为25 MHz、可进行异步串行通信、频率相位可调的3路正弦波信号发生器专用芯片的设计方法。
    发表于 05-06 08:41

    基于DSP的正弦波信号发生器源程序

    基于DSP的正弦波信号发生器源程序(汇编语言)正弦波信号发生器源程序D.1用泰勒级数开展开法计算
    发表于 08-17 07:15

    dsp正弦波发生器

    dsp正弦波发生器,在C5000系列DSP上实现正弦波发生器
    发表于 01-02 19:29 85次下载

    正弦波信号发生器的设计及电路图

    正弦波信号发生器的设计结构上看,正弦波振荡电路就是一个没有输入信号的带选频网络的正反馈放大电路。分析RC串并联选频网络的特性,根据
    发表于 10-22 21:24 1297次下载
    <b class='flag-5'>正弦波</b><b class='flag-5'>信号</b><b class='flag-5'>发生器</b>的设计及电路图

    正弦波发生器

    正弦波发生器
    发表于 10-07 11:46 897次阅读
    <b class='flag-5'>正弦波</b><b class='flag-5'>发生器</b>

    基于FPGA正弦信号发生器

    基于FPGA正弦信号发生器的 技术论文
    发表于 10-30 10:39 20次下载

    正弦波信号发生器的设计

    正弦波信号发生器的设计 需要的可以拿去参考一下
    发表于 08-29 15:02 53次下载

    正弦波信号发生器基本原理与设计

    本文主要介绍了一种正弦波信号发生器基本原理与设计,正弦信号发生器主要由两部分组成:
    发表于 01-14 13:11 7.8w次阅读
    <b class='flag-5'>正弦波</b><b class='flag-5'>信号</b><b class='flag-5'>发生器</b>基本原理与设计

    FPGA实现基于ROM的正弦波发生器

    FPGA实现基于ROM的正弦波发生器(嵌入式开发系统)-该文档为FPGA实现基于ROM的
    发表于 07-30 11:45 32次下载
    <b class='flag-5'>FPGA</b><b class='flag-5'>实现</b>基于ROM的<b class='flag-5'>正弦波</b><b class='flag-5'>发生器</b>