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,未用到,axi_dac_write(dac, AXI_DAC_REG_RATECNTRL, AXI_DAC_RATE(init->rate))赋给的dac_datarate 逻辑后续未使用,即 init->rate 未使用。


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.hqwc.cn/news/163745.html

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

相关文章

CLIP Surgery论文阅读

CLIP Surgery for Better Explainability with Enhancement in Open-Vocabulary Tasks&#xff08;CVPR2023&#xff09; M norm ⁡ ( resize ⁡ ( reshape ⁡ ( F i ˉ ∥ F i ‾ ∥ 2 ⋅ ( F t ∥ F t ‾ ∥ 2 ) ⊤ ) ) ) M\operatorname{norm}\left(\operatorname{resize}\…

公开IP属地信息如何保护用户的隐私?

公开IP属地信息通常涉及与用户或组织的隐私有关&#xff0c;因此在公开此类信息时需要非常小心&#xff0c;以避免侵犯他人的隐私权。以下是触碰底线的几种情况以及如何保护网络安全和用户隐私&#xff1a; 个人隐私保护&#xff1a; 公开IP属地信息可能泄露用户的物理位置&…

nginx--install

1. ubuntu 1.1 下载并解压依赖 每个包去各自官网下载 stable 版就行。 tar xzvf nginx-1.24.0.tar.gz tar xzvf openssl-3.1.4.tar.gz tar xzvf pcre2-10.42.tar.gz tar xzvf zlib-1.3.tar.gz1.2 配置及安装 参数含义详见 nginx 官网 cd nginx-1.24.0./configure --pre…

【ES专题】ElasticSearch集群架构剖析

目录 前言阅读对象阅读导航要点笔记正文一、ES集群架构1.1 为什么要使用ES集群架构1.2 ES集群核心概念1.2.1 节点1.2.1.1 Master Node主节点的功能1.2.1.2 Data Node数据节点的功能1.2.1.3 Coordinate Node协调节点的功能1.2.1.4 Ingest Node协调节点的功能1.2.1.5 其他节点功能…

第一百六十五回 wheelChooser组件

文章目录 1. 概念介绍2. 使用方法3. 代码与效果3.1 示例代码3.2 运行效果 4. 内容总结 我们在上一章回中介绍了"如何实现Numberpicker"相关的内容&#xff0c;本章回中将介绍 wheelChoose组件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在本…

pyqt5的组合式部件制作(一)

以多选一的选择器为例&#xff0c;来实践一下工程实用级别的组合式部件设计。自己之前做的自定义的组合式部件&#xff0c;结构不够简单优化&#xff0c;在实际的工程里面&#xff0c;使用部件的过程比较繁琐。所以&#xff0c;这里来做一个优化的实验。 之所以做这个组合部件&…

iOS实现代码混淆

iOS实现代码混淆 目录 前言 ipaguard界面概览 ipaguard启动界面 ipaguard代码混淆界面 资源文件混淆界面 重签名界面 前言 本文章向大家介绍iOS实现代码混淆&#xff0c;主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项&#xff0c;具有一定的参考价值…

AR眼镜硬件解决方案_AR/VR智能眼镜安卓主板芯片方案介绍

随着近两年来增强现实(AR)技术的逐渐成熟&#xff0c;采用MT8788芯片解决方案的AR眼镜已经问世。众所周知&#xff0c;AR技术可以帮助开发者打造一个既强大而又实用的混合现实世界&#xff0c;将虚拟与真实世界相结合。 据了解&#xff0c;MT8788芯片采用了多芯片分布式处理系统…

软件测试-根据状态迁移图设计测试用例

测试用例状态迁移图 许多需求用状态机的方式来描述&#xff0c;状态机的测试主要关注状态转移是否正确。对于一个有限状态机&#xff0c;通过测试验证其在给定的条件内是否能够产生需要的状态变化&#xff0c;有没有不可达的状态和非法的状态&#xff0c;是否可能产生非法的状…

Modelsim 使用教程(5)——Analyzing Waveforms

一、概述 Wave窗口允许我们以HDL波形和数据的形式查看仿真结果。Wave窗口被划分为多个窗格。通过单击并在任意两个窗格之间拖动该条&#xff0c;可以调整路径名窗格、值窗格和波形窗格的大小。 二、加载一个设计&#xff08;Loading a Design&#xff09; 1、打开modelsim 2、…

HTTP 协议详解-上(Fiddler 抓包演示)

文章目录 HTTP 协议HTTP 协议的工作过程HTTP 请求 (Request)认识URL关于 URL encode认识 "方法" (method)GET 方法POST 方法其他方法请求 "报头" (header)请求 "正文" (body) HTTP 响应详解状态码响应 "报头" (header) HTTP 协议 HTT…

IP代理如何选择?4大误区你别踩!

近年来&#xff0c;我国互联网商业保持持续发展的状态大环境的优化&#xff0c;大大小小的企业都想乘胜追击&#xff0c;大展宏图&#xff0c;积极推动各项数据业务的进程。 而对于跨境业务来说&#xff0c;代理IP是不可或缺的重要工具之一&#xff0c;市面上代理IP类型众多&a…