JESD204B学习与仿真

平台:vivado2018.3

芯片:xcku115-flva1517-2-i

场景:在高速ADC和DAC芯片中,有使用源同步的时钟和数据同步传输的方式,但是需要在逻辑内部对其进行校准。如果使用jesd204b接口传输数据,设计人员不需要了解复杂的校准流程,只需要向该接口写入数据,或者从该接口读出数据。

IP手册下载地址:

AMD 技术信息门户

IP介绍

LogiCORE™ IP JESD204 内核实现了一个 JESD204B 接口,在使用 GTX、GTH、GTP 或 GTY(仅限 UltraScale 和 UltraScale +)收发器的 1 至 8 条通道上支持 1 至 12.5 Gb/s(1)的线路速率。有关每个器件和系列所支持的最大线路速率,请参阅器件数据表。JESD204 内核可以配置为发送或接收,并且可以使用多个内核来实现需要超过 8 条通道的链路。

发射机(对应DAC)

数据流从axi_stream接入,经过加扰对齐操作后的数据进入phy中通过串行形式发送出去。同时外部的sync和sysref同步信号对加扰对齐操作进行校准。

接收机(对应ADC)

与发射机类似,jesd204b串行数据进入phy中进行解串后,进入rx模块对数据进行解扰和对齐操作后通过axi-stream接口发送出去。同时外部sysref会对数据进行同步校准。

应用示例

示例四通道接口在ADC/DAC和用户逻辑之间提供接口。

端口说明

发射机时钟复位端口说明

Signal NameDirectionDescription
tx_core_clkIn核心逻辑时钟输入。频率 = 串行线路速率/40。
tx_resetIn内核异步逻辑复位。
tx_reset_gtOutJESD204_PHY TX 数据路径复位输出。核心输出,用于在连接的JESD204B_PHY中复位传输数据路径。
tx_reset_doneInJESD204_PHY复位完成输入。表示JESD204B_PHY已完成传输重置过程。
tx_aresetnOutAXI4-Stream 复位。低电平有效。与传输数据接口关联
s_axi_aclkInAXI4-Lite 时钟。与管理接口关联。
s_axi_aresetnInAXI4-Lite 复位。低电平有效。与管理接口关联。
refclk_p/refclk_nIn差分收发器参考时钟输入。
收发器和四通道公共锁相环(PLL)的参考时钟
glblclk_p/glblclk_nIn差分内核逻辑时钟输入。在子类 1 或子类 2 操作中,当参考时钟不能用于同步捕获 SYSREF(系统参考)或 SYNC(同步)时,需要额外的全局逻辑时钟。其频率 = 串行线路速率 / 40
tx_core_clkIn核心逻辑时钟输入。频率 = 串行线路速率/40
drpclkIn动态重配置端口(DRP)时钟。基于 UltraScale 架构的器件需要一个自由运行的 DRP 时钟。
common0_pll_clk_outOut与串行通道 0–3 关联的 QPLL (Quad 0) 的时钟输出。仅当使用 QPLL 时,此端口才存在。
common0_pll_refclk_outOut与串行通道 0–3 关联的 QPLL (Quad 0) 的参考时钟输出。仅当使用 QPLL 时,此端口才存在。
common0_pll_lock_outOutQPLL (Quad 0) 的时钟锁定输出与串行通道 0–3 相关联。仅当使用 QPLL 时,此端口才存在。• 1 = 表示 QPLL 已锁定
common1_pll_clk_outOut与串行通道 4–7 关联的 QPLL (Quad 1) 的时钟输出。此端口仅适用于具有 5 到 8 个通道的配置,并且选择了 QPLL。
common1_pll_refclk_outOut与串行通道 4–7 关联的 QPLL (Quad 1) 的参考时钟输出。此端口仅适用于具有 5 到 8 个通道的配置。
common1_pll_lock_outOut与串行通道 4–7 关联的 QPLL (Quad 1) 的时钟锁定输出。此端口仅适用于具有 5 到 8 个通道的配置,并且选择了 QPLL。• 1 = 表示 QPLL 已锁定
tx_core_clk_outOut核心逻辑时钟输出。频率 = 串行线路速率/40
tx_aresetnOutAXI4-Stream 复位。低电平有效。与传输数据接口关联。
s_axi_aclkInAXI4-Lite 时钟。与管理接口关联。
s_axi_aresetnInAXI4-Lite 复位。低电平有效。与管理接口关联。

需要注意的是上述几个时钟

Core Clock
JESD204 核心的相关描述中提到,其使用 32 位(4 字节)数据路径运行,核心时钟频率始终是线路速率除以 40,并且 AXI-streaming RX 和 TX 数据接口也会以该核心时钟频率运行。

Reference Clock
JESD204_PHY中的GTP/GTX/GTH/GTY串行收发器需要稳定、低抖动的参考时钟,该时钟具有与设备和速度等级相关的范围。在某些情况下,核心时钟和参考时钟使用相同的时钟频率或源可能是有利的。然而,这可能并不总是实用的。了解对参考时钟和核心时钟施加的限制以及系统级的影响非常重要,例如SYSREF/SYNC对子类1或2确定性延迟的同步捕获。查看时钟以获取更多信息。

AXI4-Lite Interface Clock
内核通过AXI4-Lite处理器接口进行配置和监控。此接口的时钟是与核心时钟或参考时钟分开的时钟。此时钟与核心时钟或参考时钟之间没有依赖关系。

接收机时钟复位端口说明

和发射机基本一致。

JESD204 PHY 层和收发器接口端口

Table 2‐5: TX Core: JESD204 PHY Interface Ports – Shared Logic in Example Design

Signal NameDirectionDescription
gtN_txdata[31:0]OutTX 数据到 JESD204 PHY。N = lanes- 1
gtN_txcharisk[3:0]OutTX Char is K to JESD204 PHY. N = Lanes - 1
gt_prbssel_out[X:0]OutTX PRBS 发生器对收发器的测试模式控制。位数 (X) 因收发器类型而异。有关详细信息,请参阅相关的收发器文档。

Table 2‐6: TX Core: Transceiver Interface Ports – Shared Logic in Core

Signal NameDirectionDescription
txp[N:0]Out差分串行数据输出 N = lanes- 1
txn[N:0]Out差分串行数据输出 N = lanes- 1

数据传输接口 – TX Core

Signal NameDirectionDescription
AXI4-Stream Interface Signals (Transmit Only)
tx_aresetnOut低电平有效复位(由所有通道共享)
 tx_tdata[(32*N)-1:0]In

AXI 传输数据(样本和控制字);首先传输最低有效字节。

tx_tdata 上的串行通道 0 的数据[31:0] tx_tdata上的串行通道 1 的数据[63:32] ...

tx_tdata[((N + 1) × 32) - 1:(N × 32))] 上的串行通道 N 的数据

tx_treadyOutAXI 从数据做好准备
Non-AXI Data Interface Signals (Transmit Only)
tx_start_of_frame[3:0]Out

帧边界指示。该信号为 4 位,用于指示下一个时钟周期中 tdata 中一帧的第一个字节的字节位置。

 

具体情况如下:

 
  • 当 start_of_frame(帧起始信号)为 0001 时,一帧的第一个字节位于 tdata 字的[7:0]位,接下来的 3 个字节位于[31:8]位。
  • 当 start_of_frame 为 0010 时,第一个字节位于 tdata 字的[15:8]位,接下来的 2 个字节位于[31:16]位;而[7:0]位包含前一帧的结尾。
  • 当 start_of_frame 为 0100 时,第一个字节位于 tdata 字的[23:16]位,接下来的 1 个字节位于[31:24]位;[15:0]位包含前一帧的结尾。
  • 当 start_of_frame 为 1000 时,tdata 在[23:0]位包含前一帧的最后 3 个字节,而在[31:24]位包含新帧的第一个字节。
 

注意:在同一周期中,可以断言 tx_start_of_frame 的多个位,具体取决于每帧的八位组数(例如,对于 F = 1,tx_start_of_frame = 1111)。

tx_start_of_multiframe [3:0]Out多帧边界指示。每个多帧的第一个字节的位置的编码方式与start_of_frame
tx_sysrefInSYSREF 输入。当选择子类 1 模式时,内核需要并使用此信号。JESD204B指定必须与内核时钟同步生成 SYSREF 信号(有关详细信息,请参阅时钟)。此输入应由生成 TX 和 RX 的 SYSREF 的外部设备驱动。
tx_syncIn同步信号。同步信号被JESD204定义为低电平有效同步请求信号,因此在逗号对齐完成之前,此信号为低电平,在请求ILA和正常数据之前为高电平。

jesd204b寄存器空间

建议:Xilinx 建议,如果使用控制寄存器进行重大配置更改(特别是对成帧参数的更改),则应重置内核,以确保使用更新的参数重新同步链路。

寄存器介绍,我们在使用过程中,往往会存在需要将jesd204的寄存器在线修改。因为在硬件设计中jesd204的时钟来自于时钟芯片,如果时钟芯片的启动时间相对较慢,并且需要等待时钟芯片的锁定,所以在设计的过程中jesd204的寄存器往往做成可以在线修改的形式,方便在时钟锁定后对jesd204进行复位操作从而建链。

下面对几个重要寄存器进行介绍

地址名称含义
0x004    resetbit0:复位操作。高有效。
0x008   ila supportbit0:写1,启用ila support
0x00C   Scrambingbit0:写1,启用加扰
0x010   SYSREF Handling

bit16:重新同步时对 SYSREF 的要求
1 = 在链路重新同步事件之后需要一个 SYSREF 事件:
TX 核心发送 K28.5,直至 SYSREF 重新校准 LMFC;
RX 核心在 SYSREF 事件重新校准 LMFC 之前不会取消 SYNC 的断言。
0 = 在链路重新同步事件上不需要 SYSREF 事件:
TX 核心在下一个 LMFC 上发送 ILA 序列。
RX 核心在下一个 LMFC 上取消 SYNC 的断言。

bit11-8:SYSREF延迟:添加额外的延迟到SYSREF重新对准LMFC计数器1111=15core_clk周期延迟……0000=0core_clk周期延迟

bit0:sysref always

1 = 表示内核在所有的 SYSREF 事件上重新对齐 LMFC(可能是某种计数器或时钟)计数器。

0 = 意味着内核仅在复位后检测到的第一个 SYSREF 事件上对齐 LMFC 计数器,而忽略后续的 SYSREF 事件。

0x014  ILA Multiframesbit7-0:

传输的初始通道对齐序列中的多帧。其相关参数范围是4至256,并且需要用所需值减1来对寄存器进行编程。

0x018  Test Modes测试模式
0x01c  Link Error Status链路状态
0x020 Octets per FrameF参数。每个帧发送的8位字节数。
0x024 Frames per MultiframeK参数。每个多帧的参数范围。
0x024 Lanes in UseLanes in Use:正在使用的lane数量。Bit:0-x设置为1,则对应的lane再使用。
0x028 Subclass Mode

Subclass Mode:子类模式。

注:JESD204B共有三个子类:子类0、子类1、和子类2,最高支持12.5Gbps 的接口速度,使用器件时钟代替了帧时钟,子类0可向下兼容版本JESD204A,不过并不具有确定性延迟功能。此外子类1使用SYSREF同步信号在各器件之间发送并对齐本地多帧时钟。它实现数据传输同步功能,并在数据多链路之间实现已知的的、确定性的延迟。子类2需要使用SYNC信号,但没有SYSREF同步信号,由于存在SYNC信号的时序限制,子类2通常用于500MSPS以下的数据传输。

0x400-41CLane idLane id:在 JESD204B 协议中,数据通过多个通道进行传输,每个通道都有一个唯一的标识符,即 Lane ID。 ILA Config Data 0:SUBCLASS模式。 ILA Config Data 1:F参数。 ILA Config Data 2:K参数。 ILA Config Data 3: Bit28-24:L(每链路的通道数)[仅限 RX,TX 不可写] Bit20-16:通道 ID,用于标识 JESD204B 接口中的不同通道。取值范围为 0 到 31。 Bit11-8:存储体 ID,可能用于标识存储体或存储组。 Bit7-0:设备 ID,用于标识特定的设备。 ILA Config Data 4:bit25-24:cs参数。Bit20-16:N’参数。Bit12-8:N参数。Bit7-0:M参数。 ILA Config Data 5:bit28-24:CF参数。Bit12-8:S参数。Bit:SCR参数。 ILA Config Data 6:bit23-16:FCHK校验和。Bit15-8:RES2。Bit7-0:RES1。 ILA Config Data 7:bit16:ADJDIR。Bit8:PHADJ。bit3-0:ADJCNT。
0x800ILA Config Data 0ILA Config Data 0:SUBCLASS模式。
0x804ILA Config Data 1ILA Config Data 1:F参数。
0x808ILA Config Data 2ILA Config Data 2:K参数。 
0x80CILA Config Data 3

ILA Config Data 3:

Bit28-24:L(每链路的通道数)[仅限 RX,TX 不可写]

Bit20-16:通道 ID,用于标识 JESD204B 接口中的不同通道。取值范围为 0 到 31。

Bit11-8:存储体 ID,可能用于标识存储体或存储组。

Bit7-0:设备 ID,用于标识特定的设备。 

0x810ILA Config Data 4

ILA Config Data 4:

bit25-24:cs参数。

Bit20-16:N’参数。

Bit12-8:N参数。

Bit7-0:M参数。

0x814ILA Config Data 5

ILA Config Data 5:

bit28-24:CF参数。

Bit12-8:S参数。

Bit0:SCR参数。

0x818ILA Config Data 6

ILA Config Data 6:

bit23-16:FCHK校验和。

Bit15-8:RES2。Bit7-0:RES1。

0x81cILA Config Data 7

ILA Config Data 7:

bit16:ADJDIR。

Bit8:PHADJ。

bit3-0:ADJCNT。

jesd204b接链同步

Subclass 1 Operation(以子类1模式为例子)

以ADC为例子,JESD204结构框架层次。

jesd204b参数接口

M表示单片芯片上转换器的个数;
N表示转换器的分辨率,比如一个4通道16位的 ADC 器件,M为4,N为16;
N’表示每个样本的总位数,以二进制值减1表示,N'等于N加上控制位(CS)和尾位(T)的数量,即 N'=N+CS+T;
CS表示每个样本的控制位数量,以二进制值表示;
S表示每一个转换器每一帧中的采样次数,一般情况下,S都是1,且S必须是整数,以防止数据的串扰。这样设计的一个好处是使得帧时钟(frame clock,FC)与采样时钟(sample clock)同频;
L表示数据传输的通道数量;
F表示1帧数据在每条LANE传输的字节数,如果1帧包含4个字节的数据,并且一共有4条LANE,可以得到F的值为1;
C表示插值系数,如果为1,表示没有插值,为2表示2倍插值;
R表示sysref时钟和多帧频率的关系,即一个sysref clock可以发R个multi frame;
K每个多帧的参数范围。
LMFC本地多帧时钟的周期
/R/特定字符,代表八比特数00011100
/A/特定字符,代表八比特数01111100
/Q/特定字符,代表八比特数10011100
/K28.5/特定字符,代表八比特数10111100
/F/特定字符,代表八比特数11111100

扰码器加扰(解扰),链路建立,8b/10b编码是链路层的三个主要部分。发送端加扰器可以选择是否对数据进行扰码(接收端则为解码)。数据加扰的功能是可以避免数据帧之间首尾接续的相同字节带来的频谱尖峰等问题,该现象的存在容易造成电磁干扰的问题。

数据链路的建立有三个步骤。

第一阶段,代码组同步

在发送端和接口端都复位后,时钟芯片产生的sysref信号,收发端利用该信号对齐设备内部的帧时钟和多帧时钟。

随后,接收端接收发送端设备发送的SYNC(同步开始请求信号)请求,当接收端检查到连续的逗号(K28.5)后,确认代码组同步建立,从而撤销SYNC请求。撤销SYNC请求后,在器件帧时钟的第一个有效沿表示代码组同步过程结束,在此之前一直发送K28.5。

第二阶段,初始化通道对齐。

停止发送K28.5后,发送端开始发送初始化通道对齐序列。该步骤主要是依靠通道对齐序列来完成的。该序列由四个多帧组成,序列的每个帧头都以字符R表示多帧的开始,以字符A表示多帧的结束。通过初始通道对齐可识别出每一个链路上数据的多帧开始位置。

第一个多帧以R开头,然后发送一个多帧的递增数据,以A结束。

第二个多帧以R开头,后接Q字符,然后是14个配置8位字的链路配置参数,以A结束。

第三个多帧以R开头,同第一个多帧一致。

第四个多帧以R开头,同第一个多帧一致。

后续则是用户数据,不再发送斜坡数据字符和配置字符的多帧,而是开始发送应用数据,即用户实际采集的样本数据。

关于后续为什么要经过8b/10b编码后数据传输。可以看我的另外一篇文章。

Xilinx关于GTX的IP核serdes仿真和使用_gtx cdr-CSDN博客

jesd204bIP的配置

jesd204b phy的配置

配置说明

AXI_LITE时钟,用于配置JESD204核。

链速度,需要结合ADC或者DAC芯片。

这里以AD9164为例子。

使用DAC采样率为5GSPS,使用4倍插值。

LaneRate=20*5/4*2/4=12.5Gbps。

refclk=12.5Gbps/40=312.5MHZ。

jesd204b的仿真

生成IP直接打开例子工程

包含顶层和IP核的例化。

以及测试数据产生模块。

和发送模块。

数据经过jesd204_0_sig_gen产生后,发送到jesd204_0_transport_layer_mapper模块打包成数据传输格式,发送到IP。

关于仿真架构

包含时钟产生模块,产生refclk和glbclk。

AXI4_lite配置寄存器模块。

SYSREF产生模块。

解码和链路对齐模块。

测试控制和检查模块。

先看一下仿真激励文件。

产生IP需要的时钟。

  // Generate the 312.5MHz GTHE3 refclkinitialbeginrefclk0p <= 1'b0;refclk0n <= 1'b1;foreverbeginrefclk0p <= 1'b0;refclk0n <= 1'b1;#1600;refclk0p <= 1'b1;refclk0n <= 1'b0;#1600;endend// Generate the 200.0MHz DRP Clockinitialbegindrpclk <= 1'b0;foreverbegindrpclk <= 1'b0;#2500;drpclk <= 1'b1;#2500;endend// Generate the 100.0MHz CPU/AXI clkinitialbegins_axi_aclk <= 1'b0;foreverbegins_axi_aclk <= 1'b1;#5000;s_axi_aclk <= 1'b0;#5000;endend

监测多个通道(pLanes),检测初始同步,进行通道对齐,并输出数据。

  1. 首先,定义了一系列的寄存器和变量来存储每个通道的相关信息,如 code_buffer 用于存储每个通道的输入代码,decoded_data 用于存储解码后的数据,data_align_buf 和 is_k_var_align_buf 用于数据对齐缓冲等。
  2. 初始化了一些变量,如将 initial_sync 初始化为 0,bit_countcomma_count 和 align_count 等初始化为 0。
  3. 在 forever 循环中,每个时钟上升沿进行以下操作:
    • 对于每个通道,将输入数据移位存储到 code_buffer 中。
    • 检测逗号,如果逗号数量未达到 20 或者复位未完成,增加逗号计数,否则设置 initial_sync 为 1 表示初始同步完成,并设置 bc_ok_i 为 1 表示看到了特定的条件(可能是某种控制信号)。
    • 如果初始同步完成且 bit_count 为 0 ,调用 decode_8b10b 任务进行解码。
    • 如果初始同步完成,增加 bit_count ,并在达到 10 时重置为 0 。
    • 检测 ILA 信号,如果未看到则等待,看到后设置相关标志。
    • 如果未完成所有通道的同步,增加对齐计数;如果完成同步,则将对齐缓冲中的数据按位赋值给输出。
    • 将当前的 is_k_var 和 decoded_data 存储到对齐缓冲中。
  4. 最后,检查所有通道的 bc_ok_i 状态来确定 bc_ok 信号,检查所有通道的 ila_sync 状态来确定是否所有通道都已同步。
  // The following code monitors each lane and detects initial sync. It then aligns the lanes// before outputting data.initialbegin : p_decode_txreg [0:9] code_buffer        [pLanes-1:0];reg [7:0] decoded_data       [pLanes-1:0];reg [7:0] data_align_buf     [pLanes-1:0][pAlign_buf_size-1:0];reg       is_k_var_align_buf [pLanes-1:0][pAlign_buf_size-1:0];reg       is_k_var           [pLanes-1:0];reg       initial_sync       [pLanes-1:0];integer   bit_count          [pLanes-1:0];integer   comma_count        [pLanes-1:0];integer   align_count        [pLanes-1:0];reg       ila_sync           [pLanes-1:0];reg       bc_ok_i            [pLanes-1:0];reg       ila_seen           [pLanes-1:0];integer   I, J, K;all_lanes_synced = 0;for ( I = 0; I < pLanes; I = I + 1 )begininitial_sync[I] = 1'b0;bit_count[I]    = 0;comma_count[I]  = 0;align_count[I]  = 0;ila_seen[I]     = 1'b0;end // for loopforeverbegin@(posedge tx_bitclock);for ( I = 0; I < pLanes; I = I + 1 )begincode_buffer[I] = {code_buffer[I][1:9], txp[I]};// comma detectionif (is_comma(code_buffer[I][0:9]))beginif ((comma_count[I] < 20) || (axiReset_done == 1'b0))begincomma_count[I] = comma_count[I] + 1;initial_sync[I] = 1'b0;bc_ok_i[I] = 1'b0;endelsebegininitial_sync[I] = 1;bc_ok_i[I] = 1'b1;    //BC seenendif (!initial_sync[I])bit_count[I] = 0;endif (bit_count[I] == 0 && initial_sync[I])begindecode_8b10b(code_buffer[I][0:9],decoded_data[I][7:0],is_k_var[I]);endif (initial_sync[I])beginbit_count[I] = bit_count[I] + 1;if (bit_count[I] == 10)bit_count[I] = 0;end//Waiting for ILAsif (ila_seen[I] == 1'b0)beginif (is_ila(code_buffer[I][0:9]))beginila_sync[I] = 1'b1;ila_seen[I] = 1'b1;endelse if (axiReset_done == 1'b0)beginila_sync[I] = 1'b0;ila_seen[I] = 1'b0;endelseila_sync[I] = 1'b0;endif (ila_sync[I] !== 1'b1)beginalign_count[I]  = 0;endelse if (all_lanes_synced !== 1'b1)begin//increment the alignment counteralign_count[I] = align_count[I] + 1;endelsebegin//All lanes have synced//So now do a bitwise assignment to the output data wordfor ( J = 0; J < 8; J = J + 1 )tx_decoded_data[(I*8)+J] = data_align_buf[I][align_count[I]][J];tx_decoded_is_k[I] = is_k_var_align_buf[I][align_count[I]];end//Buffer data and is_k into alignment shift registeris_k_var_align_buf[I][0] <= is_k_var[I];//must do a bitwise copyfor ( J = 0; J < 8; J = J + 1 )data_align_buf[I][0][J] <= decoded_data[I][J];for ( J = 1; J < pAlign_buf_size; J = J + 1 )beginis_k_var_align_buf[I][J] <= is_k_var_align_buf[I][J-1];//must do a bitwise copyfor ( K = 0; K < 8; K = K + 1 )data_align_buf[I][J][K] <= data_align_buf[I][J-1][K];endend // for loop end//This will notify that BCs have been on all lanes//and can now assert SYNCbc_ok = 1'b1;for ( I = 0; I < pLanes; I = I + 1 )beginif (bc_ok_i[I] !== 1'b1)bc_ok = 1'b0;end//Check if all lanes are synced yetall_lanes_synced = 1'b1;for ( I = 0; I < pLanes; I = I + 1 )beginif (ila_sync[I] !== 1'b1)all_lanes_synced = 1'b0;end // for loop endend // forever beginend // initial

使用AXI_LITE来配置寄存器。

  // Program the link configuration registersinitialbegin : p_axi_stimulusreg [31:0] register_val;s_axi_aresetn <= 1;reset <= 0;#1000;// Generate the core reset.$display("Resetting the core...");reset <= 1;s_axi_aresetn <= 0;#400000;s_axi_aresetn <= 1;reset <= 0;// 0x000: Read Versionaxi_read(0,register_val);$display("Version = Major %d Minor %d Rev %d", register_val[31:24],  register_val[23:16],  register_val[15:8]);// 0x004: Reset later once configured// 0x008: Support ILAaxi_write(2,32'h00000001);// 0x00C: Scrambling dissabledaxi_write(3,32'h00000000);// 0x010: Sysref onceaxi_write(4,32'h00000001);// 0x014: Multiframes in ILA = 4axi_write(5,32'h00000003);// 0x018: Test mode = Normal operationaxi_write(6,32'h00000000);// 0x020: Octets per Frame F=2axi_write(8,32'h00000001);// 0x024: Frames per Multiframe K=32axi_write(9,32'h0000001F);// 0x028: Lanes in useaxi_write(10,32'd15);// 0x02C: Device subclass 1axi_write(11,32'h00000001);// 0x030: Rx only register// 0x034: Rx only register// 0x80C: L, DID, BIDaxi_write(515,{3'b0, pL, 12'b0, pBID, pDID} );// 0x810: CS, N', N, Maxi_write(516,{6'b0, pCS, 3'b0, pNt, 3'b0, pN, pM} );// 0x814: CF, HD, S, SCRaxi_write(517,{3'b0, pCF, 7'b0, pHD, 3'b0, pS, 7'b0, pSCR} );// 0x818: RES1, RES2 checksum generated automaticallyaxi_write(518,{16'b0, pRES2, pRES1});// Link configuration has changed so reset the interface// 0x04: Write resetaxi_write(1,32'h00000001);// Now poll register until reset has clearedregister_val = 32'h00000001;while ( register_val[0] !== 32'b0 )begin#1000    //wait for a time then readaxi_read(1,register_val);end$display("AXI Configuration and Reset complete....");axiReset_done = 1'b1;  //Signal to notify that AXI has been configuredend // p_axi_stimulus

看一下仿真。

过程1,按照上述仿真文件中值配置寄存器。

轮询004地址,直到复位完成数据为0。

复位完成后

开始准备接链

代码组同步阶段。接收端拉高SYNC信号,在检测到连续的4个K28.5后。

进入初始化通道对齐阶段。发送连续数和配置信息。

之后发送用户数据。

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

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

相关文章

从零训练一个多模态LLM:预训练+指令微调+对齐+融合多模态+链接外部系统

本文尝试梳理一个完整的多模态LLM的训练流程。包括模型结构选择、数据预处理、模型预训练、指令微调、对齐、融合多模态以及链接外部系统等环节。 01 准备阶段 1 模型结构 目前主要有三种模型架构&#xff0c;基于Transformer解码器&#xff0c;基于General Language Model&a…

【Python系列】Excel 文件到文本文件的转换

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

深入浅出理解 C 语言中的 qsort 函数

目录 引言 一、什么是qsort 二、函数原型 1.qsort函数 2.比较函数 三、qsort函数使用示例 1.使用qsort排序整形数据 2.使用qsort排序结构数据 总结 引言 在编程中&#xff0c;排序是一个常见且重要的操作。C 语言标准库提供了一系列排序函数&#xff0c;其中 qsort 函…

【java计算机毕设】在线教学平台MySQL springboot vue HTML maven小组设计项目源代码+文档 寒暑假作业

目录 1项目功能 2项目介绍 3项目地址 1项目功能 【java计算机毕设】在线教学平台MySQL springboot vue HTML maven小组设计项目源代码文档 寒暑假作业 2项目介绍 系统功能&#xff1a; 在线教学平台包括管理员、用户、教师三种角色。 管理员功能包括个人中心模块用于修改个…

BioVendor:hsa-miR-21-5p miREIA kit

hsa-miR-21-5p是最具代表性的miRNA生物标志物。 hsa-miR-21-5p作为典型的onco-miRNA&#xff0c;它能够调节多种癌症相关的靶基因&#xff0c;如脑癌&#xff0c;肺癌&#xff0c;结肠直肠癌&#xff0c;胰腺癌&#xff0c;乳腺癌&#xff0c;胃癌&#xff0c;食管癌和肝细胞癌…

【自动驾驶汽车通讯协议】SPI通讯:深入理解与应用

文章目录 0. 前言1. 工作原理2. 模式与配置2.1 CPOL (Clock Polarity)2.2 CPHA (Clock Phase)2.3 组合模式 3. 特性与优势4. 在自动驾驶汽车中的应用5. 结论 0. 前言 按照国际惯例&#xff0c;首先声明&#xff1a;本文只是我自己学习的理解&#xff0c;虽然参考了他人的宝贵见…

LeetCode 58.最后一个单词的长度 C++

LeetCode 58.最后一个单词的长度 C 思路&#x1f914;&#xff1a; 先解决当最后字符为空格的情况&#xff0c;如果最后字符为空格下标就往后移动&#xff0c;直到不为空格才停止&#xff0c;然后用rfind查询空格找到的就是最后一个单词的起始位置&#xff0c;最后相减就是单词…

建投数据人力资源系列产品获得欧拉操作系统及华为鲲鹏技术认证书

近日&#xff0c;经欧拉生态创新中心和华为技术有限公司测评&#xff0c;建投数据自主研发的人力资源管理系统、招聘管理系统、绩效管理系统、培训管理系统&#xff0c;完成了基于欧拉操作系统openEuler 22.03、华为鲲鹏Kunpeng 920&#xff08;Taisha 200&#xff09;的兼容性…

Python:字典进一步应用

tips&#xff1a;window用win; 调出表情包&#xff0c;mac用ctrcmd空格键 try&#xff01;不同心情对应不同的表情包 messageinput(">") # 分隔符 将字符串以 为终止符&#xff0c;进行划分 wordsmessage.split( ) emojis{":)":"&#x1f604;&qu…

深度刨析C语言中的动态内存管理

文章目录 1.为什么会存在动态内存分配2.动态内存函数介绍2.1 [malloc](https://legacy.cplusplus.com/reference/cstdlib/malloc/?kwmalloc)与[free](https://legacy.cplusplus.com/reference/cstdlib/free/?kwfree)2.2 [calloc](https://legacy.cplusplus.com/reference/cst…

Unity 批处理详讲(含URP)

咱们在项目中&#xff0c;优化性能最重要的一个环节就是合批处理&#xff0c;&#xff0c;在早期Unity中&#xff0c;对于合批的处理手段主要有三种&#xff1a; Static Batching Dynamic Batching GPU Instancing 如今Unity 为了提升合批范围与效率&#xff0c;提供了…

防火墙中的会话表及用户认证

防火墙相关技术&#xff1a; 1.会话表技术 会话表技术 --- 提高转发效率的关键 --- 老化机制 1&#xff0c;会话表老化时间过长 --- 占用资源&#xff0c;导致一些会话无法正常建立 2&#xff0c;老化时间过短 --- 会导致一些需要长时间发送一次的报文强行终端&#xff0c;…

Windows下ORACLE数据泵expdp和impdp使用

Windows下ORACLE数据泵expdp和impdp使用 一、基础环境 操作系统&#xff1a;Windows server 2008&#xff1b; 数据库版本&#xff1a;Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production 数据库工具&#xff1a;PL/SQL 12.0.7 实验内容&…

Python和MATLAB网络尺度结构和幂律度大型图生成式模型算法

&#x1f3af;要点 &#x1f3af;算法随机图模型数学概率 | &#x1f3af;图预期度序列数学定义 | &#x1f3af;生成具有任意指数的大型幂律网络&#xff0c;数学计算幂律指数和平均度 | &#x1f3af;随机图分析中巨型连接分量数学理论和推论 | &#x1f3af;生成式多层网络…

C语言航空售票系统

以下是系统部分页面 以下是部分源码&#xff0c;需要源码的私信 #include<stdio.h> #include<stdlib.h> #include<string.h> #define max_user 100 typedef struct ft {char name[50];//名字char start_place[50];//出发地char end_place[50];//目的地char …

【状态机动态规划 状态压缩】1434. 每个人戴不同帽子的方案数

本文涉及知识点 位运算、状态压缩、枚举子集汇总 动态规划汇总 LeetCode 1434. 每个人戴不同帽子的方案数 总共有 n 个人和 40 种不同的帽子&#xff0c;帽子编号从 1 到 40 。 给你一个整数列表的列表 hats &#xff0c;其中 hats[i] 是第 i 个人所有喜欢帽子的列表。 请你…

ipsec协议簇(详解)

IPSEC协议簇 IPSEC协议簇 --- 基于网络层的&#xff0c;应用密码学的安全通信协议组 IPV6中&#xff0c;IPSEC是要求强制使用的&#xff0c;但是&#xff0c;IPV4中作为可选项使用 IPSEC可以提供的安全服务 机密性 --- 数据加密 完整性 --- 防篡改可用性 数据源鉴别 -- 身份…

拼多多海外版temu平台官网,temu平台官网入口

在跨境电商领域&#xff0c;拼多多旗下的Temu平台正以惊人的速度崛起&#xff0c;成为众多卖家和消费者关注的焦点。今天&#xff0c;我们将深入探索拼多多海外版Temu平台的官网及其入口&#xff0c;带您领略这一跨境电商新蓝海的魅力。 做TEMU看数据用特喵数据&#xff0c;热…

中小银行数字化转型该怎么进行?银行数字化案例鉴赏

中小银行在发展中面临五大困境&#xff0c;国内“zx”&#xff08;这里以简称代替&#xff09;银行通过数字化转型进行破局&#xff0c;通过实施组织敏捷、提升数字化应用能力、运营模式向商业模式创新这三步法&#xff0c;引导公司走出一条数字化、智能化之路。 随着数字化技…

【java】力扣 跳跃游戏

文章目录 题目链接题目描述代码1.动态规划2.贪心 题目链接 55.跳跃游戏 题目描述 代码 1.动态规划 1.1 dp数组的含义 dp[i]&#xff1a;从[0,i]的任意一点处出发&#xff0c;你最大可以跳跃到的位置。 例如nums[2,3,1,1,4]中: dp[0]2 dp[1]4 dp[2]4 dp[3]4 dp[4]8&#xff…