ZCU106的FMC接口AD/DA(全网唯一、全网最详)

这篇具有很好参考价值的文章主要介绍了ZCU106的FMC接口AD/DA(全网唯一、全网最详)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

马上就要毕业啦,好久没写文章了,今天给大家带来硕士期间的最后一次AD/DA实验的实验记录,废话少说,先看连接与视频。

  1. 连接

ZCU106的FMC接口AD/DA(全网唯一、全网最详)
  1. 视频

我做的实验是AN108+FL9613的DA与AD回环测试,可能和本节教程有点出入,不过没关系,能成功就行。

实验视频

一、实验任务

采用xilinx的dds波形生成器通过DA输出模拟信号,AD采集这个模拟信号并转为数字信号。实验听起来很简单,毕竟这个属于大部分fpga厂商自带课程。但是如果没有开发经验或出现调试问题的,请耐心看完这篇文中。支持ZCU/VCU/K7等一系列xilinx官方板卡。

二、实验平台

  1. 软件:Vivado 2019.1

  1. 硬件:ZCU106(Xilinx)、FL1010(ALINX)、AN108(ALINX)

  1. FL1010介绍

ZCU106的FMC接口AD/DA(全网唯一、全网最详)

FL1010可将HPC/LPC接口转为40针接口,用以连接AN108(AN108只有32针,因此有8根空闲)。连接的时候看好GND端口,对齐连接即可。

ZCU106的FMC接口AD/DA(全网唯一、全网最详)

上图为FL1010的引脚图,我们只用J2端口(标黄的部分),记住VADJ(红框)这个电平,后面debug会用到。下面两图为ZCU106的FMC的HPC端口,写XDC文件时需要将J2的管脚与HPC管脚配对。

ZCU106的FMC接口AD/DA(全网唯一、全网最详)
ZCU106的FMC接口AD/DA(全网唯一、全网最详)
  1. AN108介绍

ZCU106的FMC接口AD/DA(全网唯一、全网最详)

AN108,一个DA端口一个AD端口,现在买的都是黑色的,图中绿色的是老早以前的了,我用的黑色的。买AN108的时候会给一条两端为BNC口的连接线,将AD与DA连起来即可。

AD最大时钟频率为32MHz。DA最大时钟频率为125MHz。

ZCU106的FMC接口AD/DA(全网唯一、全网最详)

上图为AN108的引脚图,共34针,与FL1010对其,接上即可。因此,实际上,写XDC文件时,只需要将用到的这18个管脚和HPC引脚配对即可。

三、实验内容

  1. 建立项目(不说)

  1. 配置时钟IP

ZCU106的FMC接口AD/DA(全网唯一、全网最详)

一个50MHz用于DA,一个25MHz用于AD。

  1. ddsIP配置

参考文献:

https://blog.csdn.net/keilzc/article/details/104146629
此文讲的配置方式为system parameter,即系统配置方法

本文主要hardware parameter,即硬件配置方法

ZCU106的FMC接口AD/DA(全网唯一、全网最详)

因为AN108只支持8位宽,因此这里设置8位宽。相位的化主要根据需求来定啦,16位不行就32位,这个相位决定了控制字的位宽。

ZCU106的FMC接口AD/DA(全网唯一、全网最详)
ZCU106的FMC接口AD/DA(全网唯一、全网最详)

比如要生成1 HMz的sin波形,则

x=1*10^6*2^16/50=1310.72≈1311=10100011111(将此值写入)。

ZCU106的FMC接口AD/DA(全网唯一、全网最详)

即可。

  1. 代码

ZCU106的FMC接口AD/DA(全网唯一、全网最详)

①顶层文件

`timescale 1ns / 1ps
//
// Company: 东北电力大学
// Engineer: Yang Zheng
// 
// Create Date: 2023/02/06 21:40:02
// Design Name: 
// Module Name: Main
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module Main(
    //reference clock
    input                     sys_clk_p,
    input                     sys_clk_n,
    //AD
    input   [7:0]             AD_IN,        //AD输入数据
    output                    AD_CLK,       //AD(AD9280)驱动时钟,最大支持32Mhz时钟
    //DA
    output                    DA_CLK,       //DA(AD9708)驱动时钟,最大支持125Mhz时钟
    output  [7:0]             DA_A          //输出给DA的数据
    );

wire                             clk_da_50m;
wire                             clk_ad_25m;
wire                             locked;

clk_wiz_0 uut_clk_wiz_0(
    .clk_out1(clk_da_50m),
    .clk_out2(clk_ad_25m),
    .reset(1'b0),
    .locked(locked),//信号平稳后置1
    .clk_in1_p(sys_clk_p),
    .clk_in1_n(sys_clk_n)
);

//DDS IP核例化  
//output
wire [0:0]   m_axis_data_tvalid    ;
wire [7:0]   m_axis_data_tdata     ;
wire [0:0]   m_axis_phase_tvalid   ;
wire [15:0]  m_axis_phase_tdata    ;

dds_compiler_0 dds_compiler_0_inst (
  .aclk(clk_da_50m),                             // input wire aclk
  .m_axis_data_tvalid(m_axis_data_tvalid),      // output wire m_axis_data_tvalid
  .m_axis_data_tdata(m_axis_data_tdata),        // output wire [7 : 0] m_axis_data_tdata
  .m_axis_phase_tvalid(m_axis_phase_tvalid),    // output wire m_axis_phase_tvalid
  .m_axis_phase_tdata(m_axis_phase_tdata)      // output wire [15 : 0] m_axis_phase_tdata
);

reg rst_n = 1'b1;
// -----------2、AD9708-----------// 
wire da_clk;
wire [7:0] da_data;
AD9708 AD9708_inst(
    .clk         (clk_da_50m), 
    .rst_n       (rst_n),
    .data_in     (m_axis_data_tdata),
    .da_clk      (da_clk),  
    .da_data     (da_data)
);
assign DA_CLK = da_clk;
assign DA_A = da_data;
// -----------3、AD9708-----------// 
wire ad_clk;
wire [7:0] ad_data;
AD9280 AD9280_inst(
    .clk         (clk_ad_25m), 
    .rst_n       (rst_n),
    .ad_clk      (ad_clk),  
    .ad_data     (ad_data)
);
assign AD_CLK = ad_clk;
assign ad_data = AD_IN;
endmodule

②AD9708

`timescale 1ns / 1ps
//
// Company: 东北电力大学
// Engineer: Yang Zheng
// 
// Create Date: 2023/02/06 23:48:13
// Design Name: 
// Module Name: AD9708
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module AD9708(
     input                 clk    ,  //时钟
     input                 rst_n  ,  //复位信号,低电平有效
     
     input        [7:0]    data_in,  //DDS读出的数据
     //DA芯片接口
     output                da_clk ,  //DA(AD9708)驱动时钟,最大支持125Mhz时钟
    (* MARK_DEBUG="true" *) output       [7:0]    da_data   //输出给DA的数据
    );
    //*****************************************************
    //**                    main code
    //*****************************************************
    
     //数据data_in是在clk的上升沿更新的,所以DA芯片在clk的下降沿
     //而DA实际上在da_clk的上升沿锁存数据,所以时钟取反,这样clk的下降沿相当于da_clk的上升沿
    assign  da_clk = ~clk;       
    assign  da_data = data_in;   //将读到的DDS数据
    
endmodule

③AD9280

`timescale 1ns / 1ps
//
// Company: 东北电力大学
// Engineer: Yang Zheng
// 
// Create Date: 2023/02/06 23:49:33
// Design Name: 
// Module Name: AD9280
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module AD9280(
     input                 clk         ,  //时钟
     input                 rst_n       ,  //复位信号,低电平有效
     
     input         [7:0]   ad_data     ,  //AD输入数据
     output                ad_clk         //AD(AD9280)驱动时钟,最大支持32Mhz时钟
    );
    (* MARK_DEBUG="true" *)reg [7:0] AD_IN_d0 = 'd0;
    assign ad_clk = ~clk;

    always @(posedge ad_clk or negedge rst_n) begin
        if (~rst_n) begin
            
        end
        else begin
            AD_IN_d0 <= ad_data;
        end
    end
endmodule

由于每个器件引脚不一致,XDC就不给出了,自己查引脚图即可,需要ZCU106的请联系我。

④testbench

`timescale 1ns / 1ps
//
// Company: 东北电力大学
// Engineer: Yang Zheng
// 
// Create Date: 2023/02/06 22:45:31
// Design Name: 
// Module Name: testbench
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// dds设置:控制字=输出频率*2^(相位宽度)/输入频率
//


module testbench(

    );
parameter PERIOD  = 8;


// Main Inputs
reg   clk                            = 0 ;
reg   [7:0]  AD_IN                         = 0 ;

// Main Outputs
wire  AD_CLK                               ;
wire  DA_CLK                               ;
wire  [7:0]  DA_A                          ;


initial
begin
    forever #(PERIOD/2)  clk=~clk;
end


Main  u_Main (
    .sys_clk_p               ( clk        ),
    .sys_clk_n               ( ~clk        ),
    .AD_IN                   ( AD_IN      [7:0] ),

    .AD_CLK                  ( AD_CLK           ),
    .DA_CLK                  ( DA_CLK           ),
    .DA_A                    ( DA_A       [7:0] )
);

always @(posedge clk)begin
    AD_IN <= AD_IN + 1'b1;
end

endmodule
  1. 仿真测试

ZCU106的FMC接口AD/DA(全网唯一、全网最详)

这里需要注意,看波形的时候需要进行两个设置

①设置有符号整数

ZCU106的FMC接口AD/DA(全网唯一、全网最详)

②选择模拟量输出

ZCU106的FMC接口AD/DA(全网唯一、全网最详)
  1. 硬件实验

①综合

②点击set up debug,将两个dubug信号自动写入xdc约束文件中,然后ctrl+s保存

ZCU106的FMC接口AD/DA(全网唯一、全网最详)
ZCU106的FMC接口AD/DA(全网唯一、全网最详)
ZCU106的FMC接口AD/DA(全网唯一、全网最详)

③生成bit

④查看ILA图像,如果AD_IN_d0信号为-1或ff没有输入,那么恭喜你,需要看第四部分了的debug内容了。

ZCU106的FMC接口AD/DA(全网唯一、全网最详)

上面是一些教程或者书籍中的正常的硬件实验。他们可能调试的DA比较稳定,而我的就很不稳定哈哈哈哈(不过没关系,我的研究所用数据都是RT-lab输出的,不会存在波形这么失真的情况)。下面是我做的:

ZCU106的FMC接口AD/DA(全网唯一、全网最详)
ZCU106的FMC接口AD/DA(全网唯一、全网最详)

四、调试bug

  1. 如果出现上述错误,大致因为前文提到的VADJ电压不正常,采用万用表测试VADJ电压即可。

①FL1010保留3个电位测试

ZCU106的FMC接口AD/DA(全网唯一、全网最详)

②ZCU106的J94为VADJ点位,J33为GND点位

ZCU106的FMC接口AD/DA(全网唯一、全网最详)
  1. 安装CP210x串口驱动

ZCU106的FMC接口AD/DA(全网唯一、全网最详)
  1. 安装并打开SCUI。

①ZCU106的SCUI下载地址:https://china.xilinx.com/member/forms/download/design-license.html?cid=f9c3f796-9b83-4261-bda7-7f56b9210428&filename=rdf0450-zcu106-system-controller-c-2019-1.zip

其余的,自行去xilinx官网搜索即可。

②解压,打开config.json,滑倒最下面,将CP210x改为你的驱动即可,我的是CP2108

ZCU106的FMC接口AD/DA(全网唯一、全网最详)

写的接口是3,所以连接的时候用的是COM6连接的。

  1. 点击电压获取。等10s左右没有反应,则代表CP210x串口驱动没有安装好。

ZCU106的FMC接口AD/DA(全网唯一、全网最详)
  1. 修正VADJ电压,两个都点一下,以后再出错,重新弄就好啦!

ZCU106的FMC接口AD/DA(全网唯一、全网最详)
ZCU106的FMC接口AD/DA(全网唯一、全网最详)

//---------------------------------------------23/2/9更新

可能是我使用的dds信号发生,致使DA输出口的数据不稳定。我目前做的ADDA回环实验

  1. AN108输出1 MHz的sin,FL9613可以采集到接近离谱的数据。

ZCU106的FMC接口AD/DA(全网唯一、全网最详)
ZCU106的FMC接口AD/DA(全网唯一、全网最详)
  1. AN108输出10 MHz的sin,FL9613可以采集到较为正弦的数据。

ZCU106的FMC接口AD/DA(全网唯一、全网最详)

这个DA波形已经失真了。

ZCU106的FMC接口AD/DA(全网唯一、全网最详)
  1. AN108输出45 MHz的sin,FL9613可以采集到接近离谱的数据。

ZCU106的FMC接口AD/DA(全网唯一、全网最详)

这是DA输出的数据,看到已经失真了。

ZCU106的FMC接口AD/DA(全网唯一、全网最详)

综上所述,主要看板子的时钟还有实验条件的干扰!!!想要调试成网上的波形,挺难的。。。。文章来源地址https://www.toymoban.com/news/detail-433267.html

到了这里,关于ZCU106的FMC接口AD/DA(全网唯一、全网最详)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [FMC149】基于VITA57.1标准的16通道65MSPS 14位直流耦合AD采集FMC子卡

    板卡概述 FMC149是一款16通道65MHz采样率14位直流耦合AD采集FMC子卡,符合VITA57.1规范,可以作为一个理想的IO模块耦合至FPGA前端,16通道AD通过FMC连接器(HPC)连接至FPGA从而大大降低了系统信号延迟。 该板卡支持板上可编程采样时钟和外部参考时钟以及采样时钟,多片板卡还可

    2024年02月05日
    浏览(41)
  • 51单片机(十六)AD/DA

    ❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋

    2024年02月05日
    浏览(50)
  • 51单片机学习笔记AD/DA

    AD(Analog to Digital):模拟-数字转换,将模拟信号转换为计算机可操作的数字信号。比如单片机只能识别0与5V数字信号,当输入为2.5V——模拟信号时,就需要转化为单片机所能读取的数字信号。 DA(Digital to Analog):数字-模拟转换,将计算机输出的数字信号转换为模拟信号。

    2024年02月09日
    浏览(53)
  • 【单片机】15-AD和DA转换

    1.什么是AD转换? A(A,analog,模拟的,D,digital,数字的) 现实世界是模拟的,连续分布的,无法被分成有限份; 计算机世界是数字的,离散分布的,可以被分成有限份的 AD转换就是把一个物理量从模拟的转换成数字的。 2.AD转换的意义 想要计算机来实现现实世界 3.什么情

    2024年02月07日
    浏览(56)
  • 【【51单片机AD/DA的分析】】

    模数转换 与 数模转换 运算放大器 DA的转换就是利用运算放大器实现的 输出电压v0=-(D7~D0)/256 x (VrefxRfb)/R D7~D0 就是我们控制的按键看输入多少 然后再划分256份 Vref是我们设置的一个基准电压 PWM 这种类型的方波 完全可以看成是一个交流和直流叠加而成的 回忆一下数电的东西

    2024年02月15日
    浏览(47)
  • AD(DA)芯片PCF8591使用介绍

    AD (DA)芯片PCF8591简介       PCF8591是具有I2C 总线接口的8 位A/D 及D/A 转换器。PCF8591有4个模拟输入、1个模拟输出和1个I²C 总线接口 。PCF8591有3个地址 引脚 A0, A1和A2,用于硬件地址设定,这允许在一条I2C总线上接入8个PCF8591器件。       PCF8591 实物如下图所示: AD (DA)芯片P

    2024年02月01日
    浏览(37)
  • FPGA模块——DA转换模块(AD9708类)

    由于电路接了反相器,所以对应就不一样了。 电路图: 在ROM中存入要输出的波形数据: 用软件生成各个对应的点。 给DA转换器一个时钟,这个时钟是对clk时序时钟的取反。由于DA也是上升沿锁存数据,这样就保证DA模块读到的数据都是稳定了的数据。这样只是为了保证系统的

    2024年02月02日
    浏览(94)
  • 9.8日fpga之DA/AD的学习

     一、DAC 权电阻DA           具体参考数字电路。我们输入数字量,这里以4位为例,比如D3-D0=1001,对应得到一个 ,通过Rf,得到输出电压U0。 二、ADC         主要就是采样定理和编码。取样、保持、量化、编码。    量化后就可以进行编码然后输出数字信号了。比如输入

    2024年02月01日
    浏览(38)
  • 华为OD机考B卷 | 100分】阿里巴巴找黄金宝箱(JAVA题解——也许是全网最详)

    本人是算法小白,甚至也没有做过Leetcode。所以,我相信【同为菜鸡的我更能理解作为菜鸡的你们的痛点】。 一贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,藏宝地有编号从0~N的箱子,每个箱子上面贴有一个数字,箱子中可能有一个黄金宝箱。黄

    2024年02月07日
    浏览(54)
  • 单片机学习笔记---AD模数转换&DA数模转换

    目录 AD模数转换 XPT2046.c XPT2046.h main.c DA数模转换 main.c 上一篇博客讲了AD/DA转换的工作原理,也介绍了运算放大器的工作原理,这节开始代码演示! 新创建一个工程:AD模数转换 第一个工程将用到LCD1602和Delay函数,所以首先将我们之前讲过的代码模块添加进来 然后创建主程序

    2024年02月19日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包