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

news2024/11/13 18:05:02

软件版本: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 概述

2 系统框图

3 AD9248产品介绍

3.1 硬件参数概述

3.2 引脚定义

3.2.1 SMA 引脚定义

3.2.2 AD9248芯片功能引脚定义

3.3 数据模式设置

4 硬件电路分析

5 程序源码

5.1 AD9248采集驱动

5.2 顶层模块调用程序

6 测试结果

6.1 硬件接线

6.2 测试结果


1 概述

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

2 系统框图

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

3 AD9248产品介绍

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

3.1 硬件参数概述

硬件参数

ADC 芯片

AD9248

DAC芯片

AD9767

采样精度

14bit

采样精度

14bit

IO 电平

1.8~3.3V可调

IO 电平

1.8~3.3V可调

模拟通道

2路

更新速率

0~125M

数字通道

2路

模拟通道

2路

输入电平

-5V~+5V

输出电平

-5V~+5V

采样频率

AD9248-65 0~65M

数字输出范围

0~16383

数据格式

偏移二进制(0~16383)

功耗

500MW

信噪比(SNR)

71.6 dBc

占用 IO 数量

33个GPIO

无杂散动态范围(SFDR)

80 dBc(至 Nyquist 频率,AD9248-65)

功耗

800MW

占用 IO 数量

35个GPIO

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//仿真时间刻度/精度

module wave_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 输出 pclkx1和pclkx5以及locked信号
pll U_pll(
.refclk   ( I_sysclk    ),//系统时钟输入
.reset    ( !rst_cnt[7] ),
.lock     ( locked      ),//PLL LOCKED
.clk0_out ( pclkx1      ),//像素时钟
.clk1_out ( pclkx5      ),//HDMI IO的serdes 时钟 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个通道数据,可以扩展支持更多通道
uiwave uiwave_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.coloradmin.cn/o/1943521.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

24年广东“双百社工”招聘报名流程详细步骤

还在蹲公告的宝子们注意啦&#xff01;&#x1f525;24年广东双百社工公告陆续出啦&#xff01;⚠️中山双百社工招聘57人&#xff0c;佛山双百社工招聘135人&#xff0c;其他地区也快了&#xff01;⏰留给我们备考的时间只有一个月左右&#xff0c;想一次上岸的宝子抓紧备考&a…

《专题》numpy科学计算基础库——精细化讲解 <1>

一、什么是numpy库 Numpy(Numerical Python) 是科学计算基础库&#xff0c;提供大量科学计算 相关功能&#xff0c;比如数据统计&#xff0c;随机数生成等。其提供最核心类型为多维数组类型&#xff08;ndarray&#xff09;&#xff0c;支持大量的维度数组与矩阵运算&#xff0…

Java面试题(每日更新)

每日五道&#xff01;学会就去面试&#xff01; 本文的宗旨是为读者朋友们整理一份详实而又权威的面试清单&#xff0c;下面一起进入主题吧。 目录 1.概述 2.Java 基础 2.1 JDK 和 JRE 有什么区别&#xff1f; 2.2 和 equals 的区别是什么&#xff1f; 2.3 两个对象的…

Linux ls命令详解

学习 Linux &#xff0c;本质上是学习在命令行下熟悉使用 Linux 的各类命令&#xff1b; 1. Linux 命令通用格式 命令格式&#xff1a;命令 【-选项】【参数】(个别命令不遵循该格式) 短线&#xff08;-&#xff09;是区分选项和参数的标志&#xff0c;选项用来调整命令的功能…

redis的学习(一):下载安装启动连接

简介 redis的下载&#xff0c;安装&#xff0c;启动&#xff0c;连接使用 nosql nosql&#xff0c;即非关系型数据库&#xff0c;和传统的关系型数据库的对比&#xff1a; sqlnosql数据结构结构化非结构化数据关联关联的非关联的查询方式sql查询非sql查询事务特性acidbase存…

前端系列-6 使用Vue3搭建前端工程与setup语法糖介绍

背景 本文介绍如何使用vue3脚手快速搭建一个前端项目&#xff0c;并对生成的项目结构进行简单介绍&#xff0c;然后介绍setup语法糖。前端入门的同学可基于本文内容快速搭建属于自己的项目。 vue官网资料显示, vue3开发的项目相对vue2, 具有打包后体积变小&#xff0c;极速启动…

【网络】socket和udp协议

socket 一、六个背景知识1、Q1&#xff1a;在进行网络通信时&#xff0c;是不是两台机器在进行通信&#xff1f;2、端口号3、端口号vs进程PID4、目的端口怎么跟客户端绑定的呢&#xff1f;也就是怎么通过目的端口去找到对应的进程的呢&#xff1f;5、我们的客户端&#xff0c;怎…

textblob文本处理、词性分析与情感分析

1 前言 textBlob 是一個简单易用的 NLP库&#xff0c;基于 NLTK 和 pattern库&#xff0c; 提供了文本处理和情感分析等功能。 安装 textblob0.18.0 nltk3.8.1测试环境&#xff1a;Python3.10.9 使用前&#xff0c;先运行下面代码先下载些文件 import nltk nltk.download…

机器学习 | 阿里云安全恶意程序检测

目录 一、数据探索1.1 数据说明1.2 训练集数据探索1.2.1 数据特征类型1.2.2 数据分布1.2.3 缺失值1.2.4 异常值1.2.5 标签分布探索 1.3 测试集探索1.3.1 数据信息1.3.2 缺失值1.3.3 数据分布1.3.4 异常值 1.4 数据集联合分析1.4.1 file_id 分析1.4.2 API 分析 二、特征工程与基…

「YD-221WA无线多合一变送器」让高效监测触手可及!

前言 近年来&#xff0c;伴随着“中国制造2025”、“互联网”在我国的全面推进&#xff0c;智能无线仪表设备在工业控制领域大规模应用。“设备上云”成为众多企业实现数字化转型升级的重要策略&#xff0c;为提升仪表设备管理软件的网络化、智能化、易维护性等方面提供了强有…

问题记录-SpringBoot 2.7.2 整合 Swagger 报错

详细报错如下 报错背景&#xff0c;我将springboot从2.3.3升级到了2.7.2&#xff0c;报了下面的错误&#xff1a; org.springframework.context.ApplicationContextException: Failed to start bean documentationPluginsBootstrapper; nested exception is java.lang.NullPo…

1.3、校验码

校验码 简介奇偶校验编码方法分类注意练习题 CRC循环冗余校验模2除法异或运算模2除法计算过程 循环冗余校验CRC过程练习题选择题 海明校验步骤练习题 简介 计算机在接收相应信息的时候&#xff0c;能够识别的都是一些电信号或者转化后的0 1二进制。那包括我们在网络上传递信息…

昇思25天学习打卡营第16天|LLM-MindNLP ChatGLM-6B StreamChat

打卡 目录 打卡 任务说明 环境配置 部署方式 ChatGLM-6B 体验截图示例 ChatGLM-6B 模型结构解析如下 ChatGLM2-6B 模型结构解析如下 任务说明 加载智谱清言的chatglm模型权重文件&#xff08;目前有4个版本&#xff09;&#xff0c;本次主要尝试了chatglm-6b。 chatgl…

人工智能(AI)在办公场所的广泛应用

人工智能&#xff08;AI&#xff09;在办公场所的广泛应用正逐步改变着我们的工作方式和效率。随着技术的进步&#xff0c;越来越多的公司和组织开始采用各种AI技术来优化工作流程、提升生产力&#xff0c;并提供更好的用户体验。以下是人工智能在办公方面的一些主要作用和影响…

C++中,虚函数的作用详解

我个人认为虚函数的作用有两个&#xff1a; 增加安全性&#xff1b;提醒子类去做该做的事情。 提高效率&#xff1b;不是指程序执行效率&#xff0c;而是编码效率。 首先我这里要纠正一下&#xff1a; 一个函数被定义为虚函数&#xff0c;不代表这个函数未被实现&#xff1…

leetcode.nvim使用cookie无法登陆问题

错误描述&#xff1a; 使用力扣 (LeetCode) 全球极客挚爱的技术成长平台 的cookie在neovim上使用leetcode.nvim进行登录会出现curl xxx -D xxxx的报错。 解决方法&#xff1a; 使用LeetCode - The Worlds Leading Online Programming Learning Platform这个网站的cookie进行登…

这7款高效爬虫工具软件,非常实用!

在当今数据驱动的时代&#xff0c;自动化爬虫工具和软件成为了许多企业和个人获取数据的重要手段。这里会介绍6款功能强大、操作简便的自动化爬虫工具&#xff0c;用好了可以更高效地进行数据采集。 1. 八爪鱼采集器 八爪鱼是一款功能强大的桌面端爬虫软件&#xff0c;主打可…

轮船控制系统nmea2000电缆组件 7/8 T型连接器

NMEA 2000 7/8 T型连接器概述 NMEA 2000 7/8 T型连接器是专为船舶控制系统设计的电缆组件&#xff0c;主要用于连接船上的各种电子设备和系统&#xff0c;如GPS接收器、自动驾驶仪、风速和风向传感器、深度声纳等。这些设备通过NMEA 2000总线共享数据&#xff0c;包括导航信息…

1.Fabric框架

要了解Fabric&#xff0c;首先要知道Hyperledger开源项目。 2015年12月&#xff0c;由开源世界的旗舰组织Linux基金会牵头&#xff0c;30家初始企业成员共同宣布Hyperledger联合项目成立。Hyperledger 超级账本&#xff0c;是首个面向企业应用场景的分布式账本平台&#xff0c…

【算法】深入理解并优化算法:提升软件开发效率与质量

目录 一、算法的基本概念 输入 输出 确定性 有限性 有效性 二、常见算法类型 1. 排序算法 选择排序&#xff08;Selection Sort&#xff09; 插入排序&#xff08;Insertion Sort&#xff09; 快速排序&#xff08;Quick Sort&#xff09; 归并排序&#xff08;Mer…