2)实验平台:正点原子领航者ZYNQ开拓板3)平台购买地址:https://item.taobao.com/item.htm?&id=6061601087614)全套实验源码+手册+视频下载:http://www.openedv.com/docs/boards/fpga/zdyz_linhanz.html5)对正点原子FPGA感兴趣的同学可以加群谈论:8767449006)正点原子资料更新和新品发布,请加正点原子公众号:正点原子关注方法:微信→添加好友→"大众年夜众号→输入:正点原子
第二十三章高速AD/DA实验
ADC/DAC(Analog to Digital Converter/ Digital to Analog Converter,即模数转换器/数模转换器)是大多数系统中必不可少的组成部件,用于将连续的仿照旗子暗记转换成离散的数字旗子暗记,或者将离散的数字旗子暗记转换成连续的仿照旗子暗记,它们是连接模电电路和数字电路必不可少的桥梁。在很多场合下,ADC/DAC的转换速率乃至直接决定了全体系统的运行速率。本章我们将利用高速DA芯片实现数模转换,产生正弦波仿照电压旗子暗记,并通过高速AD芯片将仿照旗子暗记转换成数字旗子暗记。本章包括以下几个部分:2323.1高速AD-DA简介23.2实验任务23.3硬件设计23.4程序设计23.5下载验证23.1高速AD/DA简介本章我们利用的AD-DA模块是正点原子推出的一款高速模数-数模转换模块(ATK_HS_AD_DA),高速AD转换芯片和高速DA转换芯片都是由ADI公司生产的,分别是AD9280和AD9708。ATK_HS_AD_DA模块的硬件构造图如下图所示。

图 23.1.1 ATK_HS_AD_DA模块硬件构造图
由上可知,AD9708芯片输出的是一对差分电流旗子暗记,为了防止受到噪声滋扰,电路中接入了低通滤波器,然后通过高性能和高带宽的运放电路,实现差分变单端以及幅度调节等功能,使全体电路性能得到了最大限度的提升,终极输出的仿照电压范围是-5V~+5V。AD9280芯片的输入仿照电压转换范围是0V~2V,以是电压输入端须要先经由电压衰减电路,使输入的-5V~+5V之间的电压衰减到0V~2V之间,然后经由AD9280芯片将仿照电压旗子暗记转换成数字旗子暗记。下面我们分别先容下这两个芯片。AD9708芯片AD9708是ADI公司(Analog Devices,Inc.,亚德诺半导体技能有限公司)生产的TxDAC系列数模转换器,具有高性能、低功耗的特点。AD9708的数模转换位数为8位,最大转换速率为125MSPS(每秒采样百万次Million Samples per Second)。AD9708的内部功能框图如下图所示:
图 23.1.2 AD9708内部功能框图
AD9708在时钟(CLOCK)的驱动下事情,内部集成了+1.2V参考电压(+1.20V REF)、运算放大器、电流源(CURRENT SOURCE ARRAY)和锁存器(LATCHES)。两个电流输出端IOUTA和IOUTB为一对差分电流,当输入数据为0(DB7~DB0=8’h00)时,IOUTA的输出电流为0,而IOUTB的输出电流达到最大,最大值的大小跟参考电压有关;当输入数据全为高点平(DB7~DB0=8’hff)时,IOUTA的输出电流达到最大,最大值的大小跟参考电压有关,而IOUTB的输出电流为0。AD9708必须在时钟的驱动下才能把数据写入片内的锁存器中,其触发办法为上升沿触发,AD9708的时序图如下图所示:
图 23.1.3 AD9708时序图
上图中的DBO-DB7和CLOCK是AD9708的8位输入数据和为输入时钟,IOUTA和IOUTB为AD9708输出的电流旗子暗记。由上图可知,数据在时钟的上升沿锁存,因此我们可以在时钟的低落沿发送数据。须要把稳的是,CLOCK的时钟频率越快,AD9708的数模转换速率越快,AD9708的时钟频率最快为125Mhz。IOUTA和IOUTB为AD9708输出的一对差分电流旗子暗记,通过外部电路低通滤波器与运放电路输出仿照电压旗子暗记,电压范围是-5V至+5V之间。当输入数据即是0时,AD9708输出的电压值为5V;当输入数据即是255(8’hff)时,AD9708输出的电压值为-5V。AD9708是一款数字旗子暗记转仿照旗子暗记的器件,内部没有集成DDS(Direct Digital Synthesizer,直接数字式频率合成器)的功能,但是可以通过掌握AD9708的输入数据,使其仿照DDS的功能。例如,我们利用AD9708输出一个正弦波仿照电压旗子暗记,那么我们只须要将AD9708的输入数据按照正弦波的波形变革即可,下图为AD9708的输入数据和输出电压值按照正弦波变革的波形图。
图 23.1.4 AD9708正弦波数据(左)、电压值(右)
由上图可知,数据在0至255之间按照正弦波的波形变革,终极得到的电压也会按照正弦波波形变革,当输入数据重复按照正弦波的波形数据变革时,那么AD9708就可以持续不断的输出正弦波的仿照电压波形。须要把稳的是,终极得到的AD9708的输出电压变革范围由其外部电路决定的,当输入数据为0时,AD9708输出+5V的电压;当输入数据为255时,AD9708输出-5V的电压。由此可以看出,只要输入的数据掌握的得当,AD9708可以输出任意波形的仿照电压旗子暗记,包括正弦波、方波、锯齿波、三角波等波形。在理解完高速DA转换芯片后,接下来我们先容下高速AD转换芯片AD9280。AD9280芯片AD9280是ADI公司生产的一款单芯片、8位、32MSPS(Million Samples Per Second,每秒采样百万次)模数转换器,具有高性能、低功耗的特点。AD9280的内部功能框图如下图所示:
图 23.1.5 AD9280内部功能框图
AD9280在时钟(CLK)的驱动下事情,用于掌握所有内部转换的周期;AD9280内置片内采样保持放大器(SHA),同时采取多级差分流水线架构,担保了32MSPS的数据转换速率下全温度范围内无失落码;AD9280内部集成了可编程的基准源,根据系统须要也可以选择外部高精度基准知足系统的哀求。AD9280输出的数据以二进制格式表示,当输入的仿照电压超出量程时,会拉高OTR(out-of-range)旗子暗记;当输入的仿照电压在量程范围内时,OTR旗子暗记为低电平,因此可以通过OTR旗子暗记来判断输入的仿照电压是否在丈量范围内。AD9280的时序图如下图所示:
图 23.1.6 AD9280时序图
仿照旗子暗记转换成数字旗子暗记并不是当前周期就能转换完成,从采集仿照旗子暗记开始到输出数据须要经由3个时钟周期。比如上图中在时钟CLK的上升沿沿采集的仿照电压旗子暗记S1,经由3个时钟周期后(实际上再加上25ns的韶光延时),输出转换后的数据DATA1。须要把稳的是,AD9280芯片的最大转换速率是32MSPS,即输入的时钟最大频率为32MHz。AD9280支持输入的仿照电压范围是0V至2V,0V对应输出的数字旗子暗记为0,2V对应输出的数字旗子暗记为255。而AD9708经外部电路后,输出的电压范围是-5V~+5V,因此在AD9280的仿照输入端增加电压衰减电路,使-5V~+5V之间的电压转换成0V至2V之间。那么实际上对我们用户利用来说,当AD9280的仿照输入接口连接-5V电压时,AD输出的数据为0;当AD9280的仿照输入接口连接+5V电压时,AD输出的数据为255。当AD9280仿照输入端接-5V至+5V之间变革的正弦波电压旗子暗记时,其转换后的数据也是成正弦波波形变革,转换波形如下图所示:
图 23.1.7 AD9280正弦波仿照电压值(左)、数据(右)
由上图可知,输入的仿照电压范围在-5V至5V之间,按照正弦波波形变革,终极得到的数据也是按照正弦波波形变革。23.2实验任务本节实验任务是利用领航者ZYNQ开拓板及高速AD-DA扩展模块(ATK_HS_AD_DA模块)实现数模及模数的转换。首先ZYNQ PL产生正弦波变革的数字旗子暗记,经由DA芯片后转换成仿照旗子暗记,将DA的仿照电压输出端连接至AD的仿照电压输入端,AD芯片将仿照旗子暗记转换成数字旗子暗记,然后通过ILA不雅观察数字旗子暗记的波形是否按照正弦波波形变革。23.3硬件设计ATK_HS_AD_DA模块由DA转换芯片(AD9708)和AD转换芯片(AD9280)组成。AD9708的事理图如下图所示。
图 23.3.1 AD9708事理图
由上图可知,AD9708输出的一对差分电流旗子暗记先经由滤波器,再经由运放电路得到一个单真个仿照电压旗子暗记。图中右侧的W1为滑动变阻器,可以调节输出的电压范围,推举通过调节滑动变阻器,使输出的电压范围在-5V至+5V之间,从而达到AD转换芯片的最大转换范围。AD9280的事理图如下图所示。
图 23.3.2 AD9280事理图
上图中输入的仿照旗子暗记SMA_IN(VI)经由衰减电路后得到AD_IN2(VO)旗子暗记,两个仿照电压旗子暗记之间的关系是VO=VI/5+1,即当VI=5V时,VO=2V;VI=-5V时,VO=0V。ATK_HS_AD_DA模块的实物图如下图所示。
图 23.3.3 ATK-HS-AD-DA模块实物图
本实验中,各端口旗子暗记的管脚分配如下表所示。 表 23.3.1 高速AD-DA转换实验管脚分配旗子暗记名 方向 管脚 端口解释 电平标准sys_clk input U18 系统时钟,50Mhz LVCMOS33sys_rst_n input J15 系统复位,低有效 LVCMOS33da_clk output K18 DA(AD9708)驱动时钟 LVCMOS33da_data[0] output P15 输出给DA的数据 LVCMOS33da_data[1] output P16 输出给DA的数据 LVCMOS33da_data[2] output T17 输出给DA的数据 LVCMOS33da_data[3] output N17 输出给DA的数据 LVCMOS33da_data[4] output R18 输出给DA的数据 LVCMOS33da_data[5] output P18 输出给DA的数据 LVCMOS33da_data[6] output R19 输出给DA的数据 LVCMOS33da_data[7] output T19 输出给DA的数据 LVCMOS33ad_data[0] input R17 AD输入数据 LVCMOS33ad_data[1] input N18 AD输入数据 LVCMOS33ad_data[2] input R16 AD输入数据 LVCMOS33ad_data[3] input P19 AD输入数据 LVCMOS33ad_data[4] input H20 AD输入数据 LVCMOS33ad_data[5] input C20 AD输入数据 LVCMOS33ad_data[6] input B20 AD输入数据 LVCMOS33ad_data[7] input B19 AD输入数据 LVCMOS33ad_otr input K16 仿照电压超出量程标志 LVCMOS33ad_clk output U19 AD(AD9280)驱动时钟 LVCMOS33对应的XDC约束语句如下所示:
create_clock -period 20.000 -name sys_clk [get_ports sys_clk]set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN U18} [get_ports sys_clk]set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN J15} [get_ports sys_rst_n]set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN T19} [get_ports {da_data[7]}]set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN R19} [get_ports {da_data[6]}]set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN P18} [get_ports {da_data[5]}]set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN R18} [get_ports {da_data[4]}]set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN N17} [get_ports {da_data[3]}]set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN T17} [get_ports {da_data[2]}]set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN P16} [get_ports {da_data[1]}]set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN P15} [get_ports {da_data[0]}]set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN K18} [get_ports da_clk]set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN B19} [get_ports {ad_data[7]}]set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN B20} [get_ports {ad_data[6]}]set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN C20} [get_ports {ad_data[5]}]set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN H20} [get_ports {ad_data[4]}]set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN P19} [get_ports {ad_data[3]}]set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN R16} [get_ports {ad_data[2]}]set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN N18} [get_ports {ad_data[1]}]set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN R17} [get_ports {ad_data[0]}]set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN U19} [get_ports ad_clk]set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN K16} [get_ports ad_otr]23.4程序设计根据本章的实验任务,ZYNQ须要连续输出正弦波波形的数据,才能使AD9708连续输出正弦波波形的仿照电压,如果通过编写代码利用三角函数公式运算的办法输出正弦波数据,那么程序设计会变得非常繁芜。在工程运用中,一样平常将正弦波波形数据存储在RAM或者ROM中,由于本次实验并不须要写数据到RAM中,因此我们将正弦波波形数据存储在只读的ROM中,直接读取ROM中的数据发送给DA转换芯片即可。图 23.4.1是根据本章实验任务画出的系统框图。ROM里面事先存储好了正弦波波形的数据,DA数据发送模块从ROM中读取数据,将数据和时钟送到AD9708的输入数据端口和输入时钟端口;AD数据吸收模块给AD9280输出驱动时钟旗子暗记和使能旗子暗记,并采集AD9280输出模数转换完成的数据。高速AD/DA实验的系统框图如图 23.4.1所示:
图 23.4.1 高速AD/DA系统框图
顶层模块的事理图如下图所示:
图 23.4.2 顶层模块事理图
FPGA顶层模块(hs_ad_da)例化了以下三个模块:DA数据发送模块(da_wave_send)、ROM波形存储模块(rom_256x8b)和AD数据吸收模块(ad_wave_rec)。DA数据发送模块(da_wave_send):DA数据发送模块输出读ROM地址,将输入的ROM数据发送至DA转换芯片的数据端口。ROM波形存储模块(rom_256x8b):ROM波形存储模块由Vivado软件自带的Block Memory Generator IP核实现,其存储的波形数据可以利用波形转存储文件的上位机来天生.coe文件。AD数据吸收模块(ad_wave_rec):AD数据吸收模块输出AD转换芯片的驱动时钟和使能旗子暗记,随后吸收AD转换完成的数据。顶层模块的代码如下:
1 module hs_ad_da(2 input sys_clk , //系统时钟3 input sys_rst_n , //系统复位,低电平有效4 //DA芯片接口5 output da_clk , //DA(AD9708)驱动时钟,最大支持125Mhz时钟6 output [7:0] da_data , //输出给DA的数据7 //AD芯片接口8 input [7:0] ad_data , //AD输入数据9 //仿照输入电压超出量程标志(本次试验未用到)10 input ad_otr , //0:在量程范围 1:超出量程11 output ad_clk //AD(AD9280)驱动时钟,最大支持32Mhz时钟 12 );13 14 //wire define 15 wire [7:0] rd_addr; //ROM读地址16 wire [7:0] rd_data; //ROM读出的数据17 //18 // main code19 //20 21 //DA数据发送22 da_wave_send u_da_wave_send(23 .clk (sys_clk), 24 .rst_n (sys_rst_n),25 .rd_data (rd_data),26 .rd_addr (rd_addr),27 .da_clk (da_clk), 28 .da_data (da_data)29 );30 31 //ROM存储波形32 rom_256x8b u_rom_256x8b (33 .clka (sys_clk), // input wire clka34 .addra (rd_addr), // input wire [7 : 0] addra35 .douta (rd_data) // output wire [7 : 0] douta36 );37 38 //AD数据吸收39 ad_wave_rec u_ad_wave_rec(40 .clk (sys_clk),41 .rst_n (sys_rst_n),42 .ad_data (ad_data),43 .ad_otr (ad_otr),44 .ad_clk (ad_clk)45 ); 46 47 //ILA采集AD数据48 ila_0 ila_0 (49 .clk (ad_clk ), // input wire clk50 .probe0 (ad_otr ), // input wire [0:0] probe0 51 .probe1 (ad_data) // input wire [7:0] probe0 52 );53 54 endmoduleDA数据发送模块输出的读ROM地址(rd_addr)连接至ROM模块的地址输入端,ROM模块输出的数据(rd_data)连接至DA数据发送模块的数据输入端,从而完成了从ROM中读取数据的功能。在代码的第32至36行例化了ROM模块,由Block Memory Generator IP核配置天生。代码的第48行例化了一个ILA的IP核,用于捕获ad_otr和ad_data的数据。须要把稳的是,ILA的采样时钟必须利用ad_clk,否则数据可能采集缺点。ILA IP核的配置如下图所示:
图 23.4.3 ILA IP核的Genaral Options配置
我们把探针数量设置为2,并且把采样深度设置为4096。探针宽度的设置如下图所示:
图 23.4.4 ILA IP核的Probe_Ports配置
我们将两个探针的位宽设置成1和8,分别对应ad_otr和ad_data的位宽,设置完成后点击“OK”按钮即可。我们在前面说过,ROM中存储的波形数据可以利用上位机波形转COE软件天生,在这里我们先容一个大略易用的波形转COE工具的利用方法,该工具位于开拓板所随附的资料“6_软件资料/1_软件/WaveToMem”目录下,双击“WaveToMem_V1.2.exe”运行软件。接下来我们对软件进行设置,如图 23.4.5所示,这里对软件界面做个大略的先容。位宽:波形数据的位宽。由于ATK_HS_AD_DA模块的DA芯片数据位宽为8位,因此这里保持默认,即设置成8位。深度:一个波形周期包含了多少个数据量。这里保持默认,即设置成256。须要解释的是,在用Block Memory Generator IP核天生ROM时,配置ROM的宽度和深度和上位机设置的位宽和深度保持同等。波形频率设置:对波形倍频,倍数值越大,最终生成的波形频率越快(频率太高,可能导致波形失落真),这里保持默认,即设置成1位。波形类型:软件支持将正弦波、方波、锯齿波和三角波的波形转换成存储波形格式的文件。天生文件:软件支持将波形转换成COE(Vivado软件支持的存储格式)和MIF(Quartus软件支持的存储格式)格式文件,这里保持默认,即选中COE文件格式。然后点击“一键天生”按钮,在弹出的界面中选择COE文件的存放路径并输入文件名,这里将COE文件保存在工程的doc文件夹下。WaveToMem转换过程中的软件界面如下图所示:
图 23.4.5 WaveToMem软件界面
利用Notepad++代码编辑器打开天生的COE文件后如下图所示:
图 23.4.6 COE文件打开界面
工程中创建了一个单端口ROM,并命名为“rom_256x8b”,在调用Block Memory Generator IP核时,“Basic”选项也配置如下图所示:
图 23.4.7 Block Memory Generator IP核的Basic配置页面
我们将其接口类型设置为“Native”、Memory Type设置为“Single Port ROM”,即单端口ROM。“Port A Options”选项页的配置页面如下图所示:
图 23.4.8 Block Memory Generator IP核的PortA Options配置页面
我们将PortA的位宽设置为8,深度设置为256,以存储上位机天生的256个数据。此外,将使能引脚的类型设置为“Always Enabled”,即ROM一贯处于使能的状态。接下来配置“Other Options”选项页,加载刚才天生的.coe文件,如下图所示:
图 23.4.9 Block Memory Generator IP核的Other Options配置页面
末了点击“OK”按钮完成IP核的配置。DA数据发送模块的代码如下:
1 module da_wave_send(2 input clk , //时钟3 input rst_n , //复位旗子暗记,低电平有效4 5 input [7:0] rd_data, //ROM读出的数据6 output reg [7:0] rd_addr, //读ROM地址7 //DA芯片接口8 output da_clk , //DA(AD9708)驱动时钟,最大支持125Mhz时钟9 output [7:0] da_data //输出给DA的数据 10 );11 12 //parameter13 //频率调节掌握14 parameter FREQ_ADJ = 8'd5; //频率调节,FREQ_ADJ的越大,终极输出的频率越低,范围0~25515 16 //reg define17 reg [7:0] freq_cnt ; //频率调节计数器18 19 //20 // main code21 //22 23 //数据rd_data是在clk的上升沿更新的,以是DA芯片在clk的低落沿锁存数据是稳定的时候24 //而DA实际上在da_clk的上升沿锁存数据,以是时钟取反,这样clk的低落沿相称于da_clk的上升沿25 assign da_clk = ~clk; 26 assign da_data = rd_data; //将读到的ROM数据赋值给DA数据端口27 28 //频率调节计数器29 always @(posedge clk or negedge rst_n) begin30 if(rst_n == 1'b0)31 freq_cnt <= 8'd0;32 else if(freq_cnt == FREQ_ADJ) 33 freq_cnt <= 8'd0;34 else 35 freq_cnt <= freq_cnt + 8'd1;36 end37 38 //读ROM地址39 always @(posedge clk or negedge rst_n) begin40 if(rst_n == 1'b0)41 rd_addr <= 8'd0;42 else begin43 if(freq_cnt == FREQ_ADJ) begin44 rd_addr <= rd_addr + 8'd1;45 end 46 end 47 end48 49 endmodule在代码的第14行定义了一个参数FREQ_ADJ(频率调节),可以通过掌握频率调节参数的大小来掌握终极输出正弦波的频率大小,频率调节参数的值越小,正弦波频率越大。频率调节参数调节正弦波频率的方法是通过掌握读ROM的速率实现的,频率调节参数越小,freq_cnt计数到频率调节参数值的韶光越短,读ROM数据的速率越快,那么正弦波输出频率也就越高;反过来,频率调节参数越大,freq_cnt计数到频率调节参数值的韶光越长,读ROM数据的速率越慢,那么正弦波输出频率也就越低。由于freq_cnt计数器的位宽为8位,计数范围是0~255,以是频率调节参数FREQ_ADJ支持的调节范围是0~255,可通过修正freq_cnt计数器的位宽来修正FREQ_ADJ支持的调节范围。WaveToMem软件设置ROM深度为256,倍频系数为1,而输入时钟为50Mhz,那么一个完全的正弦波周期长度为25620ns = 5120ns,当FREQ_ADJ的值为0时,即正弦波的最快输出频率为1s/5120ns(1s = 1000000000ns) ≈ 195.3Khz。当我们把FREQ_ADJ的值设置为5时,一个完全的正弦波周期长度为5120ns(5+1) = 30720ns,频率约为32.55KHz。也可以在WaveToMem软件设置中增加倍频系数或者增加AD的驱动时钟来提高正弦波输出频率。AD数据吸收模块的代码如下:
1 module ad_wave_rec(2 input clk , //时钟3 input rst_n , //复位旗子暗记,低电平有效4 5 input [7:0] ad_data , //AD输入数据6 //仿照输入电压超出量程标志(本次试验未用到)7 input ad_otr , //0:在量程范围 1:超出量程8 output reg ad_clk //AD(TLC5510)驱动时钟,最大支持20Mhz时钟9 );10 11 //12 // main code 13 //14 15 //时钟分频(2分频,时钟频率为25Mhz),产生AD时钟16 always @(posedge clk or negedge rst_n) begin17 if(rst_n == 1'b0)18 ad_clk <= 1'b0;19 else 20 ad_clk <= ~ad_clk; 21 end 22 23 endmodule由于AD转换芯片支持的最大时钟频率为32Mhz,而ZYNQ PL的系统时钟频率为50Mhz,以是须要先对时钟进行分频,将分频后的时钟作为AD转换芯片的驱动时钟(分频计数见代码的第16行至第21行)。须要解释的是,AD数据吸收模块没有对输入的ad_otr(输入的仿照电压超出量程指示)和ad_data(AD输入的数据)做任何处理,这两个旗子暗记是在ILA中不雅观察旗子暗记的变革的。23.5下载验证 将高速AD-DA模块插入ZYNQ领航者开拓板的扩展口(靠近ATK-Module的位置),连接时把稳扩展口电源引脚方向和开拓板电源引脚方向同等,然后将下载器一端连接电脑,另一端与开拓板上对应端口连接,末了连接电源线并打开电源开关。领航者开拓板硬件连接实物图如下图所示:
图 23.5.1 领航者开拓板硬件连接实物图
将工程天生的比特流文件下载到ZYNQ中后,然后利用示波器丈量DA输出通道的波形。首先将示波器带夹子的一端连接到开拓板的GND位置(可利用杜邦线连接至开拓板上的任一的GND管脚),然后将另一端探针插入高速AD-DA模块的DA通道中间的金属圆圈内(把稳将赤色的保护套拿掉),如图 23.5.2所示。或者也可以直接测试高速AD-DA模块的TP引脚,如图 23.5.3所示。
图 23.5.2 DA仿照电压丈量孔位
图 23.5.3 DA仿照电压丈量点(TP)
此时不雅观察示波器可以看到正弦波的波形,如果不雅观察不到波形,可查看示波器设置是否精确,可以考试测验按下示波器的“AUTO”,再次不雅观察示波器波形。示波器的显示界面如下图所示:
图 23.5.4 示波器显示界面
不雅观察到正弦波波形后,解释DA已经精确输出仿照电压波形了,接下来我们来验证AD的功能,首先利用两头都是公头的杜邦线,将DA输出通道和AD输入通道连接起来,杜邦线连接图下图所示。
图 23.5.5 AD-DA通道杜邦线连接图
连接后在ILA中不雅观察ad_data数据的变革,不雅观察到的波形如下图所示。
图 23.5.5 AD数据吸收模块采集到的ILA波形图
由上图可知,输入的ad_data数据为正弦波变革的波形,解释AD-DA实验验证成功。其余,在这里先容一下如何将数据设置成波形图显示。首先选中ILA波形图中的ad_data,右键选择Waveform Style,然后选择Analog即可。如果要切换成数据显示的话,同样选中ad_data,右键选择Waveform Style,然后选择Digital就可以了,如下图所示:
图 23.5.6 ILA波形显示设置界面