AD9371 官方例程裸机SW 和 HDL配置概述(二)

AD9371 系列快速入口

AD9371+ZCU102 移植到 ZCU106 : AD9371 官方例程构建及单音信号收发

ad9371_tx_jesd -->util_ad9371_xcvr接口映射: AD9371 官方例程之 tx_jesd 与 xcvr接口映射

AD9371 官方例程 时钟间的关系与生成 : AD9371 官方例程HDL详解之JESD204B TX侧时钟生成(一)

JESD204B相关IP端口信号 : AD9371 官方例程HDL JESD204B相关IP端口信号

裸机程序配置 AD9528、AD9371、FPGA IP 和主函数梳理: AD9371 官方例程裸机SW 和 HDL配置概述(一)

文章目录

  • 前言
  • clkgen
  • tx_jesd/axi 、rx_jesd/axi 配置 链路层 IP
  • tx_xcvr 和 rx_xcvr 配置 物理层 xcvr
  • tpl_core 传输层
  • axi_ad9371_tx_xcvr 物理层配置


前言

SDK或者vitis 裸机程序需要配置 AD9528、AD9371、FPGA相关IP等,根据自己项目需求,可以通过 MATLAB Profile GeneratorTransceiver Evaluation Software 生成所需的 myk.c, myk.h and myk_ad9528init.c 文件来替换, FPGA中 ip核相应配置和SW中的设置也需相应修改

clkgen

	struct axi_clkgen_init rx_clkgen_init = {"rx_clkgen",RX_CLKGEN_BASEADDR,clockAD9528_device->outputSettings->outFrequency_Hz[1]};struct axi_clkgen_init tx_clkgen_init = {"tx_clkgen",TX_CLKGEN_BASEADDR,clockAD9528_device->outputSettings->outFrequency_Hz[1]};struct axi_clkgen_init rx_os_clkgen_init = {"rx_os_clkgen",RX_OS_CLKGEN_BASEADDR,clockAD9528_device->outputSettings->outFrequency_Hz[1]};

后续生成目标时钟(link clk)频率,9528 OUT1( outFrequency_Hz[1] )接入FPGA
axi_clkgen_init(&tx_clkgen, &tx_clkgen_init);
axi_clkgen_set_rate(tx_clkgen, tx_div40_rate_hz);
根据采样率,M ,L, 计算 lane rate ,生成 LINK 时钟
tx_lane_rate_khz = iqRate_kHz *M * (20 / L)
tx_div40_rate_hz = tx_lane_rate_khz * (1000 / 40);
在这里插入图片描述

tx_jesd/axi 、rx_jesd/axi 配置 链路层 IP

2T2R,RX中,F=4,K=32;

	struct jesd204_rx_init rx_jesd_init = {"rx_jesd",RX_JESD_BASEADDR,4,32,1,rx_div40_rate_hz / 1000,rx_lane_rate_khz};
	struct jesd204_tx_init tx_jesd_init = {"tx_jesd",TX_JESD_BASEADDR,2,32,4,14,16,false,2,1,tx_div40_rate_hz / 1000,tx_lane_rate_khz};

2T2R,TX中,F=2,K=32,M=4, N=14 (后续未传递给FPGA 寄存器使用) ,NP=16 ,HD=0, CS=2
在这里插入图片描述

tx_xcvr 和 rx_xcvr 配置 物理层 xcvr

	struct adxcvr_init rx_adxcvr_init = {.name = "rx_adxcvr",.base = RX_XCVR_BASEADDR,.sys_clk_sel = ADXCVR_SYS_CLK_CPLL,.out_clk_sel = ADXCVR_REFCLK,.lpm_enable = 1,.lane_rate_khz = rx_lane_rate_khz,.ref_rate_khz = mykDevice.clocks->deviceClock_kHz,};struct adxcvr_init tx_adxcvr_init = {.name = "tx_adxcvr",.base = TX_XCVR_BASEADDR,// TXPLLCLKSEL; TXSYSCLKSEL (tx_sys_clk_sel[1] == 0) ? 2'b00 : {1'b1,~up_tx_sys_clk_sel[0]};.sys_clk_sel = ADXCVR_SYS_CLK_QPLL0,// TXOUTCLKSEL.out_clk_sel = ADXCVR_REFCLK,.lpm_enable = 0,.lane_rate_khz = tx_lane_rate_khz,.ref_rate_khz = mykDevice.clocks->deviceClock_kHz,};

SYS_CLK 和 OUT_CLK 选择如下表所示,TX选择QPLL0提供高速串行时钟,RX均衡模式选取 LPM

在这里插入图片描述

在这里插入图片描述

tpl_core 传输层

SW

    struct axi_dac_init tx_dac_init = {"tx_dac",TX_CORE_BASEADDR,4,NULL,3};struct axi_adc_init rx_adc_init = {"rx_adc",RX_CORE_BASEADDR,4};

4,num_channels,M
3,3未用到,2T2R,rate = 32 * L / M / NP = 2; 后续通过 axi_dac_read(dac, AXI_DAC_REG_CLK_RATIO, &ratio) 获得,dac->clock_hz = freq * ratio。 100M 时钟基准计数 2^16,得到 link clk的计数值 freq,DAC CLK = ratio * LINK CLK
LINK clock_hz = freq * 100M / 2^16 = freq *390625/ 2^8 = freq * 1525.8789,dac->clock_hz = LINK clock_hz *ratio
freq基于100Mhz axi_clk测量,有一定的抖动,会有一些误差,只是为了调试目的。


FPGA

在这里插入图片描述
HDL 传输层 TX 配置为 L=4, M=4, N=16 (DAC 14 BIT, 设置16,高14位有效,tx_jesd_init 中是14,但后续驱动未配置到链路层 ip中,以传输层HDL配置为准), NP=16, S=1, OCTETS_PER_BEAT= 4 或 8 ,8b/10b 为 4, RX 和 RX_OS 与TX类似

axi_ad9371_tx_xcvr 物理层配置

在这里插入图片描述
复位时赋的初始值,后续给到 Channel 和 COMMON 端口

    if (up_rstn == 0) beginup_lpm_dfe_n <= LPM_OR_DFE_N;up_rate <= RATE;up_sys_clk_sel <= SYS_CLK_SEL;up_out_clk_sel <= OUT_CLK_SEL;up_tx_diffctrl <= TX_DIFFCTRL;up_tx_postcursor <= TX_POSTCURSOR;up_tx_precursor <= TX_PRECURSOR;end else beginif ((up_wreq == 1'b1) && (up_waddr == 10'h008)) beginup_lpm_dfe_n <= up_wdata[12];up_rate <= up_wdata[10:8];up_sys_clk_sel <= up_wdata[5:4];up_out_clk_sel <= up_wdata[2:0];end
。。。。struct adxcvr_init tx_adxcvr_init = {.name = "tx_adxcvr",.base = TX_XCVR_BASEADDR,// TXPLLCLKSEL; TXSYSCLKSEL (tx_sys_clk_sel[1] == 0) ? 2'b00 : {1'b1,~up_tx_sys_clk_sel[0]};.sys_clk_sel = ADXCVR_SYS_CLK_QPLL0,// TXOUTCLKSEL.out_clk_sel = ADXCVR_REFCLK,.lpm_enable = 0,.lane_rate_khz = tx_lane_rate_khz,.ref_rate_khz = mykDevice.clocks->deviceClock_kHz,};

可以通过 adxcvr_init(&tx_adxcvr, &tx_adxcvr_init) ,使用 tx_adxcvr_init 更改sys_clk_sel 等配置,最终通过信号up_ch_sys_clk_sel 传递给 物理层 util_ad9371_xcvr IP, RX 和 RX_OS 类似

LPM_OR_DFE_N :1, LPM ; 0, DFE,RX有效,配置均衡模式。
OUT_CLK_SEL : 选择 TXOUTCLK 来源
SYS_CLK_SEL :选择TXPLL参考时钟来源
QPLL_ENABLE :1 使能,在QUAD中使用QPLL
RATE :设置TXRATE,配置 GTH原语.TXRATE (tx_rate_m2),通过 TXOUT_DIV 和 TXRATE 可以控制 D divider的值 ,例程采用 通过设置 Attribute 方案,需要把 TXRATE 绑定到 3’b000,可知在IP核配置和SW驱动中,TXRATE 都设置成 3’b000,D divider 通过 DRP 配置 TXOUT_DIV 参数修改,SW驱动使用 xilinx_xcvr_drp_update(xcvr, drp_port, 0x7c, 0x700,xilinx_xcvr_out_div_to_val(tx_out_div) << 8);

在这里插入图片描述

在这里插入图片描述

TX_OR_RX_N : 1 配置链路为TX ,0 配置为 RX
TX_DIFFCTRL :Driver Swing Control, 配置 GTH原语 .TXDIFFCTRL ({up_tx_diffctrl, 1’b0}),TXDIFFCTRL[0]不用
TX_POSTCURSOR :5’b00000,post-cursor ,配置 GTH原语 .TXPOSTCURSOR (up_tx_postcursor)
TX_PRECURSOR :5’b00000,pre-cursor ,配置 GTH原语 .TXPRECURSOR (up_tx_precursor)

XCVR_TYPE:GT类型,ZCU106 是 GTHE4

在这里插入图片描述

TX Configurable Driver
• Differential voltage control
• Pre-cursor and post-cursor transmit pre-emphasis

TX_POSTCURSOR 、TX_PRECURSOR 、TX_DIFFCTRL 属于GTH TX Configurable Driver ,例程使用IP默认的初始配置,未在SW驱动中修改这几个配置端口,使用具体配置 详见 UG576 第三章 TX Configurable Driver

util_ad9371_xcvr 见 AD9371 官方例程裸机SW 和 HDL配置概述(三)

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

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

相关文章

Electron[3] 基础配置准备和Electron入门案例

1 背景 上一篇文章已经分享了&#xff0c;如何准备Electron的基础环境了。但是博客刚发才一天&#xff0c;就发现有人问问题了。经过实践发现&#xff0c;严格按照作者的博客教程走是不会有问题的&#xff0c;其中包括安装的环境版本等都要一致。因为昨天发的博客&#xff0c;…

使用Jsoup库编写程序

Jsoup库编写的Kotlin网络爬虫程序 kotlin import org.jsoup.Jsoup import org.jsoup.nodes.Document import org.jsoup.nodes.Element import org.jsoup.select.Elements import java.net.HttpURLConnection import java.net.URL fun main(args: Array<String>) { v…

Zephyr-7B-β :类GPT的高速推理LLM

Zephyr 是一系列语言模型&#xff0c;经过训练可以充当有用的助手。 Zephyr-7B-β 是该系列中的第二个模型&#xff0c;是 Mistralai/Mistral-7B-v0.1 的微调版本&#xff0c;使用直接偏好优化 (DPO) 在公开可用的合成数据集上进行训练 。 我们发现&#xff0c;删除这些数据集的…

BIOS开发笔记 - CMOS

CMOS原来指的是一种生产电子电路的工艺,在PC上一般指的是RTC电路单元,因为早期它是由这种工艺生产出来的,所以又把RTC称作了CMOS。 RTC(Real Time Clock)即实时时钟,用于保存记录时间和日期,也可以用来做定时开机功能。RTC靠一组独立的电源给它供电,这样设计的目的就是…

Win系统强制删除文件/文件夹

Win系统强制删除文件/文件夹 前言系统磁盘清理360强制删除NPM删除 前言 Win系统的用户删除文件/文件夹时&#xff0c;可能由于权限问题导致文件无法正常删除&#xff0c;下文介绍解决方案。当常规的删除不起作用时&#xff0c;可使用如下方案进行删除&#xff0c;包含系统磁盘…

大数据商城人流数据分析与可视化 - python 大数据分析 计算机竞赛

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于大数据的基站数据分析与可视化 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度…

若依分离版——配置多数据源(mysql和oracle),实现一个方法操作多个数据源

目录 一、若依平台配置 二、编写oracle数据库访问的各类文件 三. 一个方法操作多个数据源 一、若依平台配置 1、在ruoyi-admin的pom.xml添加oracle依赖 <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId> <v…

JVM 各个参数详解

在一些规模稍大的应用中&#xff0c;Java虚拟机&#xff08;JVM&#xff09;的内存设置尤为重要&#xff0c;想在项目中取得好的效率&#xff0c;GC&#xff08;垃圾回收&#xff09;的设置是第一步。 PermGen space&#xff1a;全称是Permanent Generation space.就是说是永久…

ZZ308 物联网应用与服务赛题第B套

2023年全国职业院校技能大赛 中职组 物联网应用与服务 任 务 书 &#xff08;B卷&#xff09; 赛位号&#xff1a;______________ 竞赛须知 一、注意事项 1.检查硬件设备、电脑设备是否正常。检查竞赛所需的各项设备、软件和竞赛材料等&#xff1b; 2.竞赛任务中所使用的…

宜昌市公安局、点军区政府与中科升哲达成战略合作,共建视频图像联合创新实验室

11月3日&#xff0c;宜昌视频图像联合创新战略合作签约仪式在宜昌市公安局举行。 宜昌市副市长、市公安局党委书记、局长上官福令&#xff0c;市公安局党委副书记、副局长龚海波&#xff0c;宜昌市点军区委书记万红&#xff0c;点军区委副书记、区长黄文云&#xff0c;升哲科技…

git commit规范提交

Git每次提交代码时&#xff0c;都要写Commit Message&#xff08;提交说明&#xff09;&#xff0c;通常情况下&#xff0c;Commit Message应该清晰明了&#xff0c;说明本次提交的目的和具体操作等。然而笔者工作多年来发现&#xff0c;有些公司对Commit Message没有明确的要求…

AI:64-基于深度学习的口罩佩戴检测

🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌在这个漫长的过程,中途遇到了不少问题,但是…

Luckysheet 实现excel多人在线协同编辑

前言 前些天看到Luckysheet支持协同编辑Excel&#xff0c;正符合我们协同项目的一部分&#xff0c;故而想进一步完善协同文章&#xff0c;但是遇到了一下困难&#xff0c;特此做声明哈&#xff0c;若侵权&#xff0c;请联系我删除文章&#xff01; 若侵犯版权、个人隐私&#x…

Loftware——重新定义创建、管理和打印标签的方式

重新定义创建、管理和打印标签的方式 Loftware 帮助各种规模的企业管理其运营和供应链中的标签。无论您拥有五台还是数千台打印机&#xff0c;寻找云还是本地打印机&#xff0c;我们都能提供适合您业务需求的标签解决方案。 全面的标签解决方案 01、一体化标签解决方案 通过…

【Redis】Redis整合SSMRedis注解式缓存Redis中的缓存穿透、雪崩、击穿的原因以及解决方案(详解)

目录&#xff1a; 目录 一&#xff0c;SSM整合redis 二&#xff0c;redis注解式缓存 三&#xff0c;Redis中的缓存穿透、雪崩、击穿的原因以及解决方案&#xff08;附图&#xff09; 一&#xff0c;SSM整合redis 1.原因&#xff1a; 整合SSM和Redis可以提升系统的性能、可…

桶装水订水系统水厂送水小程序开发;

桶装水小程序正式上线&#xff0c;支持多种商品展示形式&#xff0c;会员卡、积分、分销等功能&#xff1b; 开发订水送水小程序系统&#xff0c;基于用户、员工、商品、订单、配送站和售后管理模块&#xff0c;对每个模块进行统计分析&#xff0c;简化了分配过程&#xff0c;提…

vivo 网络端口安全建设技术实践

作者&#xff1a;vivo 互联网安全团队 - Peng Qiankun 随着互联网业务的快速发展&#xff0c;网络攻击的频率和威胁性也在不断增加&#xff0c;端口是应用通信中的门户&#xff0c;它是数据进出应用的必经之路&#xff0c;因此端口安全也逐渐成为了企业内网的重要防线之一&…

【Spring实战——构建Spring Web应用程序】1.10 处理表单

引言 Web应用功能 ○ 提供内容 ○ 用户填写表单 ○ 提交数据 Spring MVC的控制器提供了 ○ 处理表单展示 ○ 用户提交数据的支持 在Spittr应用中&#xff0c;需要一个注册表单供新用户使用。SpitterController是一个新的控制器&#xff0c;目前只有一个请求处理方法用于展示…

CoDeSys系列-4、基于Ubuntu的codesys运行时扩展包搭建Profinet主从环境

CoDeSys系列-4、基于Ubuntu的codesys运行时扩展包搭建Profinet主从环境 文章目录 CoDeSys系列-4、基于Ubuntu的codesys运行时扩展包搭建Profinet主从环境一、前言二、资料收集三、Ubuntu18.04从安装到更换实时内核1、下载安装Ubuntu18.042、下载安装实时内核&#xff0c;解决编…