关注分享主机优惠活动
国内外VPS云服务器

【守时原子FPGA连载】第三十六章双向高速DA实验-摘自【守时原子】在新起点上的FPGA开发指南_V2

摘要:本章我们将利用高速芯片实现数模转换,产生正弦波模拟电压信号。实验任务本节的实验任务是利用新起点开发板和双向高速扩展模块实现数模转换。下载并验证双通道高速模块插入新起点开发板的扩展端口。连接时注意扩展口的电源引脚方向和开发板的电源引脚方向。

1)实验平台:准时原子V2开发板新起点2)平台购买地址:https://detail.tmall.com/item.htm?. Id = 609758951113 2)全套实验源代码+手册+视频下载地址:http://www.openedv.com/thread-300792-1-1.html 3)对准时原子FPGA感兴趣的同学可以加入一个群讨论:994244016 4)关注准时原子微信官方账号,获取最新资讯更新。

第三十六章双通道高速DA实验DAC(数模转换器)是大多数系统中不可缺少的元件,用于将离散的数字信号转换为连续的模拟信号。它们是连接模拟电路和数字电路不可或缺的桥梁。在很多情况下,DAC的转换速度甚至直接决定了整个系统的运行速度。本章将使用高速DA芯片实现数模转换,产生正弦波模拟电压信号。本章包括以下几个部分:3535.1简介35.2实验任务35.3硬件设计35.4编程35.5下载验证36.1简介本章我们使用的双通道DA模块是punctual atom推出的双通道高速数模转换模块(ATK_DUAL_HS_DA),高速DA转换芯片是Siripu公司生产的3PD5651E芯片。ATK_HS_AD_DA模块的硬件结构图如下图所示。

图36 . 1 . 1 ATK _ dual _ HS _ DA模块硬件结构图从上面可以看出,3PD5651E芯片输出一对差分电流信号。为了防止噪声干扰,在电路中接入低通滤波器,然后通过高性能、高带宽的运算放大器电路实现差分单端和幅度调节功能,使整个电路的性能最大化,最终输出模拟电压范围为-5V。下面介绍一下这款芯片。3PD5651E是3PEAK公司(赛利普微电子技术有限公司)生产的一系列DAC数模转换器,具有高性能、低功耗的特点。3PD5651E具有10个数模转换位,最大转换速度为125MSPS(每秒百万样本)。3PD5651E的内部功能框图如下图所示:

图36.1.2内部功能框图3PD5651E在时钟的驱动下工作,内部集成+1.1V基准电压(+1.10V REF)、运算放大器、电流源阵列和锁存器。两个电流输出端IOUTA和IOUTB是一对差分电流。当输入数据为0(DB9DB0=10'h000)时,IOUTA的输出电流为0,而IOUTB的输出电流达到最大,最大值与基准电压有关。当输入数据全为高电平且平坦时(DB9DB0=10'h3ff),IOUTA的输出电流达到最大,最大值与基准电压有关,而IOUTB的输出电流为0。3PD5651E必须由时钟驱动才能将数据写入片内锁存器,触发模式为上升沿触发。3PD5651E的时序图如下图所示:

图36.1.3芯片时序图

图36 . 1 . 4 FPGA的内部时序如图36.1.3所示。DBO-DB9和CLOCK是3PD5651E的10位输入数据和输入时钟,IOOUTA和IOUTB是3PD5651E输出的电流信号。从图36.1.3可以看出,数据是在时钟的上升沿锁存的,所以我们可以在时钟的下降沿发送数据,这样DA芯片在数据的中心采样,保证数据采样的准确性,如图36.1.4所示。需要注意的是,时钟频率越快,3PD5651E的数模转换速度越快,3PD5651E最快的时钟频率为125Mhz。IOUTA和IOUTB是3PD5651E输出的一对差分电流信号,通过外部电路低通滤波器和运算放大器电路输出模拟电压信号,电压范围在-5V到+5V之间。当输入数据等于0时,3PD5651E的输出电压值为5v;当输入数据等于10'h3ff时,3PD5651E的输出电压为-5V。3PD5651E是一种将数字信号转换成模拟信号的器件。没有集成DDS(直接数字频率合成器)的功能,但是可以通过控制3PD5651E的输入数据来模拟DDS的功能。比如我们用3PD5651E输出一个正弦波的模拟电压信号,那么我们只需要根据正弦波的波形来改变3PD5651E的输入数据。下图是3PD5651E根据正弦波输入数据和输出电压值的波形图。

图36 . 1 . 5 3pd 5651 e的正弦波数据(左)和电压值(右)从上图可以看出,数据在0到1023之间按照正弦波形变化,最终的电压也会按照正弦波形变化。当输入数据根据正弦波波形数据反复变化时,3pd5651e可以连续输出正弦波的模拟电压波形。需要注意的是,3PD5651E的最终输出电压范围由其外部电路决定。当输入数据为0时,3PD5651E输出+5V的电压;当输入数据为1023时,3PD5651E输出-5V的电压。可以看出,只要输入数据控制得当,3PD5651E可以输出任意波形的模拟电压信号,包括正弦波、方波、锯齿波和三角波。36.2实验任务本节实验任务是利用新起点开发板和双通道高速d a扩展模块(ATK_DUAL_HS_DA模块)实现数模转换。先用FPGA产生正弦波变化的数字信号,经过DA芯片转换成模拟信号,再用示波器观察模拟信号的波形是否按正弦波形变化。36.3硬件设计ATK_DUAL_HS_DA模块由两个型号为3PD5651E的DA转换芯片组成。3PD5651E的原理图如下图所示。图36.3.1芯片原理图从上图可以看出,3PD5651E输出的一对差分电流信号先经过滤波器,再经过运算放大器电路,得到单端模拟电压信号。图中右边的RP1是滑动变阻器,可以调节输出电压范围。建议调整滑动变阻器,使输出电压范围在-5V到+5V之间,以达到DA转换芯片的最大转换范围。ATK_DUAL_HS_DA模块的物理框图如下图所示。图36 . 3 . 2 ATK _ DUAL _ HS _ DA模块物理图本实验中,各端口信号的管脚分布如下表所示。表36.3.1双通道高速DA转换实验的引脚分配36.4程序设计根据本章的实验任务,FPGA需要连续输出正弦波形的数据,这样3PD5651E才能连续输出正弦波形的模拟电压。如果用三角函数运算的公式来编写代码输出正弦波数据,程序设计会变得非常复杂。在工程应用中,正弦波波形数据一般存储在RAM或ROM中。由于本实验不需要将数据写入RAM,我们将正弦波波形数据存储在只读rom中,直接从ROM中读取数据并发送给DA转换芯片。图36.4.1是根据本章实验任务绘制的系统框图。正弦波形的数据预先存储在rom中,DA数据发送模块从ROM中读取数据,并将数据和时钟发送到3PD5651E芯片的输入数据端口和输入时钟端口。双通道高速DA实验的系统框图如图36.4.1所示:

图36.4.1双通道高速DA系统框图顶层模块的原理图如下图所示:

图36.4.2顶层模块原理图FPGA顶层模块(hs_dual_DA)以下面三个模块为例:DA数据发送模块(da_wave_send)、ROM波形存储模块(rom_1024x10b)和时钟模块(clk_wiz_0)。DA数据发送模块(DA _ WAVE _ SEND):DA数据发送模块输出读取的ROM地址,并将输入的ROM数据发送到DA转换芯片的数据端口。ROM波形存储模块(ROM _ 1024 X10 b):ROM波形存储模块由Vivado软件的块存储发生器IP核实现,使用波形转换成存储文件的上位机可以将存储的波形数据生成为. coe文件。顶层模块的代码如下:

1模块hs _ dual _ da (2Inputsys _ clk,//系统时钟3输入sys_rst_n,//系统复位,低电平有效4 //DA芯片接口5输出da_clk,//DA驱动时钟,最多支持125Mhz时钟6输出[9:0] da_data。//数据输出到DA 7 8 //DA芯片接口9输出da_clk1,//DA驱动时钟,最多支持125Mhz时钟10输出[9:0] da_data1 //数据输出到DA 11);12 13 //wire定义14 wire[9:0]rd _ addr;//ROM读取地址15 wire[9:0]rd _ data;//读取的数据//ROM 16/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 19 20 assign da _ clk 1 = da _ clk;21赋值da _ data1 = da _ data22 23 pll u_pll(24 .inclk0 (sys_clk),25 . c0(clk));26 27 //DA数据传输28 DA _ wave _ send u _ DA _ wave _ send(29 . clk(clk),30.rst _ n (sys _ rst _ n),31.rd _ data (rd _ data),32 .rd_addr (rd_addr),33。da_clk (da_clk),34。da _ data(da _ data)35);36 37 //ROM存储波形38 ROM _ 1024 X10 b u _ ROM _ 1024 X10 b(39。地址(rd _ addr),40。时钟(clk),41。q(rd _ data)42);43 44 endmodule在代码的第23行到第25行实例化时钟模块,将125M时钟乘以DA芯片进行采样。DA数据发送模块输出的read ROM地址(rd_addr)连接到ROM模块的地址输入端,ROM模块输出的data (rd_data)连接到DA数据发送模块的数据输入端,从而完成从ROM中读取数据的功能。在代码的第38到42行,ROM模块由ROM IP内核配置实例化和生成。rom的初始化在“高速ADDA测试”中已经解释过,这里不再解释。DA数据发送模块的代码如下:

1模块da _ wave _ send (2输入clk,//clock 3输入rst_n,// reset信号,低电平有效4 5输入[9:0] rd_data,//ROM读取数据6输出reg [9:0] rd_addr,//读取ROM地址7 //DA芯片接口8输出da_clk,//DA驱动时钟,支持125Mhz时钟9输出[9:0] da_data // Data 10最多输出到DA);11 12//参数13 //频率调节控制14参数FREQ _ ADJ = 10 " d0;//频率调整,FREQ_ADJ越大,最终输出频率越低,范围0-2551516//reg define 17 reg[9:0]freq _ CNT;//频率调整计数器18 19/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 20/。* * * * * * * * * * * * * * * * 22 23//数据rd_data在clk的上升沿更新,所以DA芯片在数据稳定在clk的下降沿时锁存数据24 //而DA实际上是在da_clk的上升沿锁存数据,所以时钟反相,所以clk的下降沿相当于da_clk。26赋值da _ data = rd _ data//将读取的ROM数据分配给DA数据端口27 28 //频率调整计数器29 always @ (Posedge clk或neg edge rst _ n)begin 30 if(rst _ n = = 1 " B0)31 freq _ CNT。

未经允许不得转载:主机频道 » 【守时原子FPGA连载】第三十六章双向高速DA实验-摘自【守时原子】在新起点上的FPGA开发指南_V2

评论 抢沙发

评论前必须登录!