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.mzph.cn/news/874620.shtml

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

相关文章

Vuex看这一篇就够了

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…

Win11 改造

记录一些安装 win11 系统之后&#xff0c;对使用不习惯的地方&#xff0c;进行的个人改造 右键菜单 Hiyoung006/Win11Useable: 将Win11右键菜单及资源管理器恢复为Win10样式的脚本 切换到旧版右键菜单&#xff1a; reg add "HKCU\Software\Classes\CLSID\{86ca1aa0-34…

Web前端:HTML篇(二)元素属性

HTML 属性 属性是 HTML 元素提供的附加信息。 HTML 元素可以设置属性属性可以在元素中添加附加信息属性一般描述于开始标签属性总是以名称/值对的形式出现&#xff0c;比如&#xff1a;name"value"。 属性实例 HTML 链接由 <a> 标签定义。链接的地址在 href …

数据结构(二叉树-2)

文章目录 一、 实现链式结构二叉树 1.1 Tree.h 1.2 Tree.c 前中后序遍历 前序遍历 中序遍历 后续遍历 1.2 Tree.c 结点个数 1.3Tree.c 叶子节点个数 1.4 Tree.c 二叉树的高度 1.5 Tree.c 层序遍历 1.6 判断是否为完全二叉树 1.7 销毁二叉树 test.c 一、 实现链式结构二叉树 ⽤链…

体重电子秤方案pcba方案设计开发应用

体重电子秤是一种利用电子技术实现物体重量测量的设备。它是现代生活中不可缺少的日常用品之一。本文将从产品介绍、结构设计、工作原理、功能设计和特点优势五个方面来介绍体重电子秤方案产品。 首先&#xff0c;体重电子秤方案的产品介绍。 体重电子秤是一种便携式的设备&…

vue this.$refs 动态拼接

业务需要&#xff0c;refs是不固定的 <vxe-grid refgridWarehouse v-bind"gridWarehouseOptions" v-if"tableHeight" :height"tableHeight":expand-config"{iconOpen: vxe-icon-square-minus, iconClose: vxe-icon-square-plus}"c…

SpringSecurity通用权限管理系统

1、介绍 权限管理是所有后台系统都会涉及的一个重要组成部分&#xff0c;而权限管理的核心流程是相似的&#xff0c;如果每个后台单独开发一套权限管理系统&#xff0c;就是重复造轮子&#xff0c;是人力的极大浪费&#xff0c;本项目就是针对这个问题&#xff0c;提供了一套通…

Python第三方库Kornia中LoFTR的使用

0&#xff0c;背景 浏览LoFTR代码主页&#xff1a;LoFTR&#xff0c;看到其中提到&#xff0c;LoFTR从0.5.11版本开始集成到kornias库中&#xff0c;所以决定尝试。 硬件&#xff1a;联想拯救者Y7000P 2020&#xff0c;i7-10750H&#xff0c;RTX2060 1&#xff0c;Kornia K…

系统变量设置失败导致 /usr/bin:/bin 不在 PATH 环境变量,许多基本命令都无法调用!!手欠的!!!

GPT害人不浅&#xff0c;专坑我这种电脑小白&#xff0c;差点被骗重装系统。。 看起来你的 PATH 环境变量真的缺失了标准的二进制文件路径&#xff08;如 /usr/bin 和 /bin&#xff09;&#xff0c;这导致你无法使用许多常用命令&#xff0c;包括 nano 和 vim。我们需要采取另…

在 CentOS 7 上安装 Docker 并安装和部署 .NET Core 3.1

1. 安装 Docker 步骤 1.1&#xff1a;更新包索引并安装依赖包 先安装yum的扩展&#xff0c;yum-utils提供了一些额外的工具&#xff0c;这些工具可以执行比基本yum命令更复杂的任务 sudo yum install -y yum-utils sudo yum update -y #更新系统上已安装的所有软件包到最新…

使用 Socket和动态代理以及反射 实现一个简易的 RPC 调用

使用 Socket、动态代理、反射 实现一个简易的 RPC 调用 我们前面有一篇 socket 的文章&#xff0c;再之前&#xff0c;还有一篇 java动态代理的文章&#xff0c;本文用到了那两篇文章中的知识点&#xff0c;需要的话可以回顾一下。 下面正文开始&#xff1a; 我们的背景是一个…

【Linux网络】epoll模型构建Reactor_Tcp服务器{协议/客户端/bind/智能指针}

文章目录 1.std::enable_shared_from_this<TcpServer>2.std::bind3.std::make_shared4.std::shared_ptrstd::shared_ptr 和 std::weak_ptr配合使用 5.剖析代码6.整体代码Calculator.hppClientCal.ccCMakeLists.txtCommon.hppEpoller.hppLog.hppMain.ccnocopy.hppProtocol…

YOLOv8预测时报错ValueError

【问题描述】执行YOLOv8预测代码时&#xff1a; # 导入训练好的权重文件做预测 from ultralytics import YOLO# Load a pretrained YOLOv8n model model YOLO("/data/yolov8/runs/detect/train6/weights/best.pt")# Run inference on bus.jpg with arguments model…

四大引用——强软弱虚

目录 一、强引用 二、软引用 三、弱引用 四、虚引用 一、强引用 强引用是在程序代码之中普遍存在的&#xff0c;类似于“Object obj new Object()”&#xff0c;obj变量引用Object这个对象&#xff0c;就叫做强引用。当内存空间不足&#xff0c;Java虚拟机宁愿抛出OutOfMe…

使用 Redis 实现验证码、token 的存储,用自定义拦截器完成用户认证、并使用双重拦截器解决 token 刷新的问题

基于session实现登录流程 1.发送验证码 用户在提交手机号后&#xff0c;会校验手机号是否合法&#xff0c;如果不合法&#xff0c;则要求用户重新输入手机号 如果手机号合法&#xff0c;后台此时生成对应的验证码&#xff0c;同时将验证码进行保存&#xff0c;然后再通过短信…

安防视频监控EasyCVR视频汇聚平台修改配置后无法启动的原因排查与解决

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台基于云边端一体化架构&#xff0c;兼容性强、支持多协议接入&#xff0c;包括国标GB/T 28181协议、部标JT808、GA/T 1400协议、RTMP、RTSP/Onvif协议、海康Ehome、海康SDK、大华SDK、华为SDK、宇视SDK、乐橙SDK、萤石云SD…

Linux学习第55天:Linux 4G 通信实验(更快、更高、更强)

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 无论是有线网络还是WiFi都是摆脱不了布线的尴尬&#xff0c;而4G通信可以彻底拜托网线的束缚&#xff0c;实现无线网络通信。 而说到4G就不得不提到5G&#xff0c;中…

关于css中flex布局垂直居中失效问题的原因

项目中遇到用flex进行页面布局后&#xff0c;使用上下居中设置&#xff1a;align-item: center; 目标效果如下&#xff1a; 但是失效&#xff0c;不起作用&#xff0c;如下图所示&#xff1a; 各种排查过后发现设置了子模块 align-self 属性&#xff0c;这会覆盖容器上的 al…

mysql高阶语句:

mysql高阶语句&#xff1a; 高级语法的查询语句&#xff1a; select * from 表名 where limitsdistinct 去重查询like 模糊查询 排序语法&#xff1a;关键字排序 升序和降序 默认的排序方式就是升序 升序&#xff1a;ASC 配合order by语法 select * from 表名…

Python爬虫掌握-----4实战(爬取视频)

我们使用爬虫时难免会遇到爬取视频的情况&#xff0c;其实爬取图片视频&#xff0c;内容都是一样的。这里以b站视频为例。 一、开始 1.找到url&#xff0c;请求url 防盗链&#xff0c;需要写在UA伪装中 正常的三步&#xff1a; 1.url 2.requests请求 3.UA伪装 import req…