[米联客-安路飞龙DR1-FPSOC] FPGA基础篇连载-25 ADC模块FEP-DAQ9248采集显示波形方案

news/2024/11/13 14:10:05/文章来源:https://www.cnblogs.com/milianke/p/18335288

软件版本:Anlogic -TD5.9.1-DR1_ES1.1

操作系统:WIN10 64bit

硬件平台:适用安路(Anlogic)FPGA

实验平台:米联客-MLK-L1-CZ06-DR1M90G开发板

板卡获取平台:https://milianke.tmall.com/

登录"米联客"FPGA社区 http://www.uisrc.com 视频课程、答疑解惑!

 

1 概述

本方案通过把DAQ9248采集到的数据,通过前面已经完成的示波器显示驱动进行在屏幕上显示ADC采集的波形数据。

2 系统框图

本方案中,把前面测试程序中的数据改为从ADC采集的数据

3 AD9248产品介绍

DAQ_FMC3002是一款14bits双通道20/65MSPS ADC采集模块,该方案采用了ADIAD9248芯片。

3.1 硬件参数概述

硬件参数

ADC 芯片

AD9248

DAC芯片

AD9767

采样精度

14bit

采样精度

14bit

IO 电平

1.83.3V可调

IO 电平

1.83.3V可调

模拟通道

2路

更新速率

0~125M

数字通道

2

模拟通道

2路

输入电平

-5V~+5V

输出电平

-5V~+5V

采样频率

AD9248-65 0~65M

数字输出范围

0~16383

数据格式

偏移二进制(0~16383)

功耗

500MW

信噪比(SNR)

71.6 dBc

占用 IO 数量

33GPIO

无杂散动态范围(SFDR)

80 dBc(至 Nyquist 频率,AD9248-65

  

功耗

800MW

  

占用 IO 数量

35GPIO

  

 

3.2 引脚定义

3.2.1 SMA 引脚定义

引脚号

引脚名称

描述

PA

DAI

模拟输入通道 1

PB

DBI

模拟输入通道 2

TA

TriA

双向触发输入/输出 1

TB

TriB

双向触发输入/输出 2

3.2.2 AD9248芯片功能引脚定义

AD9248 工作于LVCMOS 模式,数据接口简单,下图为芯片引脚定义以及采样时序。。

非符合复合模式,一个数据通道采样1个模拟通道,采用LVCMOS SDR数据时序

复合模式,一个数据通道采样2个模拟通道,采用LVCMOS DDR数据时序,这种工作模式下当MUX_SELECT 为逻辑高时,通道A数据被定向到通道A 输出总线,通道B数据被定向到通道B输出总线。当MUX_SELECT为逻辑低电平时,通道数据取反,即通道A数据导向通道B输出总线,通道B数据导向通道A输出总线。通过切换MUX_SELECT位,复用数据可在任一输出数据端口上使用。

3.3 数据模式设置

AD9248 可以通过配置DFS 实现数据格式的设置

DFS 脚电平

数据模式

低电平

偏移二进制和并行 LVCMOS SDR

高电平

二进制补码和并行 LVCMOS SDR

4 硬件电路分析

硬件接口和子卡模块请阅读"附录1"

配套工程的 FPGA PIN 脚定义路径为fpga_prj/uisrc/04_pin/ fpga_pin.xdc

5 程序源码

关于HDMI输出IP的部分这里不再介绍,VTC时序设计部分这里也不详细介绍。如果读者这些基础知识不清楚的,请阅读前面的实验。

5.1 AD9248采集驱动

AD9248为并行ADC,每一个时钟输出一个采样点,因此驱动不需要编写,直接通过时钟同步过来的数据。

5.2 顶层模块调用程序

`timescale 1ns / 1ns//仿真时间刻度/精度

 

modulewave_test

(

input           I_sysclk,         //系统时钟输入  

output          O_ad9248_clka,      //A通道时钟输出  

input           I_ad9248_ora,      

input  [13:0]   I_ad9248_da,        //A通道数据输入

 

output          O_ad9248_clkb,      //B通道时钟输出  

input           I_ad9248_orb,

input  [13:0]   I_ad9248_db,        //B通道数据输入

output          O_card_power_en,    //子卡电源使能

 

output          O_hdmi_clk_p,       //HDMI时钟输出 P

output          O_hdmi_clk_n,       //HDMI时钟输出 N

output [2:0]    O_hdmi_tx_p,        //HDMI数据输出 P

output [2:0]    O_hdmi_tx_n         //HDMI数据输出 N

);

 

assign O_card_power_en = 1'b1; //子卡上电

 

//上电延迟复位

reg [7:0]    rst_cnt=0; //复位计数器

wire  rstn = rst_cnt[7];//用高位复位

wire pclkx1,pclkx5,adc_clk,locked; //MMCM/PLL时钟信号    

 

wire vtc_rstn,vtc_clk,vtc_vs,vtc_hs,vtc_de,vtc2_grid_de_o,vtc2_de_o;

wire [23:0] rgb_o; //RGB颜色寄存器

 

assign vtc_clk  = pclkx1;//像素时钟

assign vtc_rstn = locked;

assign S_rst = ~locked;

 

//PLL时钟管理IP 输出 pclkx1pclkx5以及locked信号

pllU_pll(

.refclk   ( I_sysclk    ),//系统时钟输入

.reset    ( !rst_cnt[7] ),

.lock     ( locked      ),//PLL LOCKED

.clk0_out ( pclkx1      ),//像素时钟

.clk1_out ( pclkx5      ),//HDMI IOserdes 时钟 5倍的像素时钟

.clk2_out ( adc_clk     )//100M时钟,给ADC采集用

);

 

always @(posedge I_sysclk)begin

    if (rst_cnt[7])

        rst_cnt <=  rst_cnt;

    else

        rst_cnt <= rst_cnt+1'b1;

end

 

//ad9248 ip相关信号

assign O_ad9248_clka = adc_clk;

assign O_ad9248_clkb = adc_clk;

 

//hdmi 输出IP

hdmi_tx#(

 //HDMI视频参数设置      

.H_ActiveSize       (1280), //视频时间参数,行视频信号,一行有效(需要显示的部分)像素所占的时钟数,一个时钟对应一个有效像素

.H_SyncStart        (1280+88), //视频时间参数,行同步开始,即多少时钟数后开始产生行同步信号

.H_SyncEnd          (1280+88+44),//视频时间参数,行同步结束,即多少时钟数后停止产生行同步信号,之后就是行有效数据部分

.H_FrameSize        (1280+88+44+239), //视频时间参数,行视频信号,一行视频信号总计占用的时钟数

 

.V_ActiveSize       (720),//视频时间参数,场视频信号,一帧图像所占用的有效(需要显示的部分)行数量,通常说的视频分辨率即H_ActiveSize*V_ActiveSize

.V_SyncStart        (720+4),//视频时间参数,场同步开始,即多少行数后开始产生场同步信号

.V_SyncEnd          (720+4+5), //视频时间参数,场同步结束,多少行后停止产生长同步信号  

.V_FrameSize        (720+4+5+28),  //视频时间参数,场视频信号,一帧视频信号总计占用的行数量              

       

.VIDEO_VIC          ( 16       ),

.VIDEO_TPG          ( "Disable"),//设置disable,用户数据驱动HDMI接口,否则设置eable产生内部测试图形

.VIDEO_FORMAT       ( "RGB444" )//设置输入数据格式为RGB格式

)u_hdmi_tx

(

.I_pixel_clk        ( pclkx1           ),//像素时钟

.I_serial_clk       ( pclkx5           ),//串行发送时钟

.I_rst              ( S_rst              ),//异步复位信号,高电平有效

 

//.I_video_in_user    ( vtc_user         ),//视频输入帧起始信号

//.I_video_in_valid   ( vtc_de_valid     ),//视频输入有效信号

//.I_video_in_last    ( vtc_last         ),//视频输入行结束信号

//.I_video_in_data    ( video_hdmi_data  ),//视频输入数据

 

.I_video_rgb_enable (1'b1               ),//是否使能RGB输入接口,设置1使能,否则采用stream video时序接口  

.I_video_in_vs      (vtc_vs            ),//RGB 输入VS 帧同步

.I_video_in_de      (vtc_de       ),//RGB 输入de有效

.I_video_in_data    (rgb_o), //视频输入数据    

 

.O_hdmi_clk_p       ( O_hdmi_clk_p       ),//HDMI时钟通道

.O_hdmi_tx_p        ( O_hdmi_tx_p        )//HDMI数据通道

);

 

//VTC IP 用于产生绘制波形的有效区域,波形绘制区域大小未1024*600

uivtc#

(

.H_ActiveSize(1280),          //视频时间参数,行视频信号,一行有效(需要显示的部分)像素所占的时钟数,一个时钟对应一个有效像素

.H_FrameSize(1280+88+44+239), //视频时间参数,行视频信号,一行视频信号总计占用的时钟数

.H_SyncStart(1280+88),        //视频时间参数,行同步开始,即多少时钟数后开始产生行同步信号

.H_SyncEnd(1280+88+44),       //视频时间参数,行同步结束,即多少时钟数后停止产生行同步信号,之后就是行有效数据部分

.V_ActiveSize(720),           //视频时间参数,场视频信号,一帧图像所占用的有效(需要显示的部分)行数量,通常说的视频分辨率即H_ActiveSize*V_ActiveSize

.V_FrameSize(720+4+5+28),     //视频时间参数,场视频信号,一帧视频信号总计占用的行数量

.V_SyncStart(720+4),          //视频时间参数,场同步开始,即多少行数后开始产生场同步信号

.V_SyncEnd (720+4+5),         //视频时间参数,场同步结束,即多少场数后停止产生场同步信号,之后就是场有效数据部分

.H2_ActiveSize(1024),         //波形绘制区域行像素大小        

.V2_ActiveSize(256)           //波形绘制区域场像素大小

)

uivtc_inst

(

.I_vtc_clk(vtc_clk),         //系统时钟

.I_vtc_rstn(vtc_rstn),       //系统复位

.I_vtc2_offset_x(128),         //X坐标相对屏幕的原始坐标的偏移

.I_vtc2_offset_y(200),         //Y坐标相对屏幕的原始坐标的偏移

.O_vtc_vs(vtc_vs),//场同步输出

.O_vtc_hs(vtc_hs),//行同步输出

.O_vtc_de(vtc_de),//视频数据有效

.O_vtc2_de(vtc2_de_o)//绘制波形显示区域的有效区域

);

 

//例化波形显示器 IP,默认支持2个通道数据,可以扩展支持更多通道

uiwaveuiwave_inst

(

//波形1

.I_wave1_clk(O_ad9248_clka),//系统时钟输入

.I_wave1_data(I_ad9248_da[13:6]),//ADC只显示高8bits 数据

.I_wave1_data_de(1'b1),//ADC数据有效信号

 

//波形2

.I_wave2_clk(O_ad9248_clkb),//系统时钟输入

.I_wave2_data(I_ad9248_db[13:6]),//ADC只显示高8bits 数据

.I_wave2_data_de(1'b1),//ADC数据有效信号

 

.I_vtc_rstn(vtc_rstn),//时序发生复位

.I_vtc_clk (vtc_clk), //像素时钟

.I_vtc_vs  (vtc_vs),  //场同步输出

.I_vtc_de  (vtc2_de_o),//同步,绘制波形显示区域的有效区域

.O_vtc_rgb(rgb_o)//同步RGB数据 绘制数据输出    

     

);

 

endmodule

6 测试结果

6.1 硬件接线

(该教程为通用型教程,教程中仅展示一款示例开发板的连接方式,具体连接方式以所购买的开发板型号以及结合配套代码管脚约束为准。)

请确保下载器和开发板已经正确连接,并且开发板已经上电。(注意JTAG端子不支持热插拔,而USB接口支持,所以在不通电的情况下接通好JTAG后,再插入USB到电脑,之后再上电,以免造成JTAG IO损坏)

6.2 测试结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/775746.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UE4 C++ 多人游戏中的简单聊天窗口

本质 不管是客户端还是服务器在输入文字后,按下回车发送,将触发RPC调用。然后通过RPC将发送者,输入文本等信息,传入到服务器,然后通过多播RPC传播到所有客户端的聊天框。 UI UI利用三个组件 ScrollBox 用于在服务器以及每个客户端上显示消息的载体 TextBlock 本地将信息通…

[米联客-安路飞龙DR1-FPSOC] FPGA基础篇连载-24 基于FPGA简易示波器显示驱动设计

软件版本:Anlogic -TD5.9.1-DR1_ES1.1 操作系统:WIN10 64bit 硬件平台:适用安路(Anlogic)FPGA 实验平台:米联客-MLK-L1-CZ06-DR1M90G开发板 板卡获取平台:https://milianke.tmall.com/ 登录"米联客"FPGA社区 http://www.uisrc.com 视频课程、答疑解惑! 1 概述F…

[米联客-安路飞龙DR1-FPSOC] FPGA基础篇连载-23 RGB转HDMI显示方案

软件版本:Anlogic -TD5.9.1-DR1_ES1.1 操作系统:WIN10 64bit 硬件平台:适用安路(Anlogic)FPGA 实验平台:米联客-MLK-L1-CZ06-DR1M90G开发板 板卡获取平台:https://milianke.tmall.com/ 登录"米联客"FPGA社区 http://www.uisrc.com 视频课程、答疑解惑! 1概述本…

VU13载板,2个FMC和3个FMC+接口,一个QSFP28(100G)光纤口,一个千兆网接口

VU13载板,2个FMC和3个FMC+接口,一个QSFP28(100G)光纤口,一个千兆网接口,8GB内存。基于XILINX Virtex UltraScale+系列,芯片型号为XCVU13P-2FHGB2104I的一款高性能FMC+载板。该板卡集成了3个FMC+(Vita 57.4)和2个FMC(Vita 57.1)连接器。可以与各种FMC子卡进行完美匹配,为用…

无影云电脑设置开机启动项

在msconfig及任务管理器的选项卡中,不可设置启动项。可通过以下步骤设置。Windows设置 应用 启动 打开或关闭相应启动项版权木有,侵权不究,欢迎转载

企业数字化转型的必备钥匙:数据思维|专题报告集

原文链接:https://tecdat.cn/?p=37165 本质上来讲,企业数字化转型,不仅是技术方面的升级,更是企业文化、思维方式的转变。那么,企业数字化转型究竟需要什么样的思维方式? 企业数字化转型,需要什么样的思维方式? 不知道你有没有过这样的感觉:不知道从什么时候开始,和…

【PHP系列】内存马(一)不死马

实验环境工具 phpstudy一、内存马概念 内存马是无文件攻击的一种常用手段,利用中间件的进程执行某些恶意代码。首先要讲的是PHP不死马,实质上就是直接用代码弄一个死循环,强占一个 PHP 进程,并不间断的写一个PHP shell,或者执行一段代码 二、不死马剖析 test.php: <?p…

[米联客-安路飞龙DR1-FPSOC] FPGA基础篇连载-21 VTC视频时序控制器设计

软件版本:Anlogic -TD5.9.1-DR1_ES1.1 操作系统:WIN10 64bit 硬件平台:适用安路(Anlogic)FPGA 实验平台:米联客-MLK-L1-CZ06-DR1M90G开发板 板卡获取平台:https://milianke.tmall.com/ 登录"米联客"FPGA社区 http://www.uisrc.com 视频课程、答疑解惑! 1概述Vi…

【视频讲解】Python用LSTM、Wavenet神经网络、LightGBM预测股价

原文链接:https://tecdat.cn/?p=37184 原文出处:拓端数据部落公众号 分析师:Yuyan Ye 在金融科技的浪潮中,量化投资方法以其数据驱动和模型导向的特性,日益成为资本市场分析的重要工具。特别是,长短期记忆网络(LSTM)、Wavenet以及LightGBM等先进的机器学习算法,因其…

easyFrida指南

easyFrida使用python运行 python easyFrida.py -h usage: easyFrida.py [-h] [-R] [-S S] [-f F | -p P] [--className CLASSNAME] [--plugin PLUGIN] [-l]_____ _ ____ __ _ ___ _ _| ___| __(_) __| | __ _/ _ \/ _` / __| | | | |_ | __| |/ _` |/ _` || __/ (…

生物相容性相关知识

生物相容性常规五项是指哪五项? 编辑于 2024-06-21 10:51 发布于:广东省一、生物相容性常规三项检测是指细胞毒性试验、致敏试验、刺激试验生物相容性。常规五项检测是指细胞毒性试验、致敏试验、刺激试验、全身毒性试验、热原试验。 1.细胞毒性试验是评估生物材料对细胞生…

Camstar Grid中B列的值來自A列選擇后觸發查詢得到 (代碼)

1.先給VP中的Grid綁定行選擇事件 2.拿到A列選擇的數據,在將數據進行SQL執行,將查詢得到的結果賦值給B列