当前位置: 首页 > news >正文

JESD204B及解扰模块

一、视频资料

学习视频可以参考下方两个系列:前一个主要讲原理,可以使用其附带的资料(视频中SYNC讲解部分内容可能不是很准确,以官方手册为准);后一个视频侧重代码设计,设计框架可以参考。

FPGA高速接口JESD204B:初识JESD204B_哔哩哔哩_bilibili

全网首发!【手撕JESD204B】part0. 视频内容介绍 & 框架设计 ——大毛_哔哩哔哩_bilibili

二、Xilinx IP及设计

Xilinx中提供两个IP,都可以调取官方的工程做参考设计,并进行仿真。PHY中收发一体,实现物理层。204或204C中需分开配置收或发,实现链路层、传输层。

使用IP PHY后不必关心8b10b已经由IP中GTH/GTE等自动完成,用户只用关心转出的8b即可。按照参考设计框架的左侧图设计。

接收侧LMFC的脉冲位置可以根据数据到达情况调整,即虽然被SYSREF复位计数器的值,但复位结果不必=0。

发送侧与接收侧的LMFC可以不在同一时刻,但要保持固定的相对位置关系,两侧的LMFC计数时钟频率必需相同,以实现完全同步,失调不同步后要用SYNC~申请再次同步。

确定性延时:每条LANE发送端到各自接收端的BUFFER弹出数据的时间,必需<一个多帧周期时间,是204B中增加的。

204C中增加了64B/66B编码,提高了传输速率,引入了LEMC,但仍可以向下兼容204B。

同步流程图,第一个来自Xilinx JESD204手册 PG066,是标准204B;

第二张来自204C手册,没有SYNC、SYSREF信号,可用于查看弹性buffer部分的内容。

AD9625手册中提供了简要的说明,也是对上第一流程图中的描述,方便理解。

J204B接口数据链路的建立_jesd204b建链的过程-CSDN博客

JESD204B IP核的配置与使用-CSDN博客

三、加解扰码的原理

【JESD204系列】六、加解扰模块的设计原理_加扰示意图-CSDN博客

关于初始值手册中为'h7f80,实际使用时Xilinx IP中用的是之前ILAS中的最后2字节0x7e7c,完整的最后4字节是0x7c7e7d7c,左边的0x7c应该是多帧结束字符/A/。ILAS虽然不参与加扰,但其最后2字节留在了加扰器中。

四、代码及仿真

K码同步、ILAS阶段不做扰码,仅在数据段执行。延迟1clk输出。

module jesd204b_descrambler (input wire clk,        // 系统时钟input wire rst_n,      // 异步复位(低电平有效)input wire enable,     // 加扰使能input wire [31:0] data_in,  // 输入数据(假设位宽32,可调整)output     [31:0] data_out  // 输出加扰后数据,delay 1
);// 解扰器状态寄存器(15-bit)
reg  [   14:0] lfsr_s_prev;
wire [31+15:0] lfsr_s;reg  [31:0] R_data_out;
wire [31:0] W_data_out;
wire [31:0] W_data_in;
wire [31:0] W_feedback;generate genvar i;for(i = 0; i < 4; i = i + 1) begin:data_remapassign W_data_in  [31-i*8 : 31-i*8-7] = data_in   [i*8+7 : i*8];//输入字节反序,低字节的高bit先计算assign  data_out  [31-i*8 : 31-i*8-7] = R_data_out[i*8+7 : i*8];//输出字节反序,end
endgenerate// 解扰过程
assign lfsr_s     = {lfsr_s_prev ,W_data_in};
assign W_feedback = lfsr_s[31+15:15] ^ lfsr_s[31+14:14] ^ W_data_in;//S0在高bit,S1次之 [46]^[45]^W_data_in[31]
//assign W_data_out = enable ? W_feedback : W_data_in;
always @(posedge clk )   R_data_out <= enable ? W_feedback : W_data_in;always @(posedge clk ) begin              lfsr_s_prev <= enable ? lfsr_s[14:0] : 'h7e7c;//'h7e7c为ILAS第4个多帧的最后2字节。'h7f80是204B手册上建议的初始值;	
endendmodule

仿真文件

// 测试激励
module tb_jesd204b_descrambler;reg clk;
reg rst_n;
reg enable;
reg [31:0] data_in;
wire [31:0] data_out;// 实例化解扰模块
jesd204b_descrambler u_descrambler (.clk(clk),.rst_n(rst_n),.enable(enable),.data_in(data_in),				.data_out(data_out)
);// 时钟生成
initial beginclk = 0;forever #5 clk = ~clk; // 100MHz时钟
end// 测试逻辑
initial begin// 复位初始化rst_n = 0;enable = 0;data_in = 32'h0000_0000; #20;rst_n = 1;enable = 1;// 测试数据1data_in = 32'h933c2805;//data_out = 'h6322_2000;#10;$display("Input: 0x%h, deScrambled Output: 0x%h", data_in, data_out);// 测试数据2data_in = 32'h49ffcfb6;//data_out = 'he949_a63d;#10;$display("Input: 0x%h, deScrambled Output: 0x%h", data_in, data_out);// 测试数据2data_in = 32'h30989a3d;//data_out = 'h6f15_2c3e;#10;$display("Input: 0x%h,deScrambled Output: 0x%h", data_in, data_out);$finish;
endendmodule

解扰仿真结果

结果验证。Xilinx 204C发送模块 IP的示例工程中,对输入数据加扰后的结果见下图,与上图中解扰结果一致。


http://www.mrgr.cn/news/90478.html

相关文章:

  • C++基础学习记录—this指针
  • pdsh 2.29 源码编译安装教程
  • 读书笔记分享
  • SkyWalking 10.1.0 实战:从零构建全链路监控,解锁微服务性能优化新境界
  • C++ 类和对象 (流插入、流提取、const)
  • 查出 product 表中所有 detail 字段包含 xxx 的完整记录
  • Alertmanager 收敛规则
  • <工具 Claude Desktop> 配置 fetch MCP Server
  • (2025)深度分析DeepSeek-R1开源的6种蒸馏模型之间的逻辑处理和编写代码能力区别以及配置要求,并与ChatGPT进行对比(附本地部署教程)
  • 算法练习——滑动窗口
  • mysql读写分离与proxysql的结合
  • 使用k3s高可用部署rancher
  • YOLO自定义数据集实现K折交叉验证——K-Fold Cross Validation
  • 使用grafana v11 建立k线(蜡烛图)仪表板
  • CF Round 997 记录 题解 (div. 2 A - E)
  • PyQt学习记录03——批量设置水印
  • 算法很美笔记(Java)——树
  • package.json 文件配置
  • 华为云kubernetes基于keda自动伸缩deployment副本(监听redis队列长度)
  • python 获取smpl身高 fbx身高
  • 如何使用Java语言在Idea和Android中分别建立服务端和客户端实现局域网聊天
  • Android 14.0 Launcher3单层模式workspace中app列表页排序功能实现
  • @synchronized的使用
  • 使用 Express 写接口
  • 自己部署DeepSeek 助力 Vue 开发:打造丝滑的标签页(Tabs)
  • 通过钉钉创建个人AI助理:无需官网即可使用DeepSeek满血版全攻略