Verilog实现eDP数据加解扰

DP扰码模块verilog仿真 在DisplayPort 1.4协议中,为了减少EMI,在8B/10B编码之前,需进行扰码Scramble。LFSR每移位8个bit后,用最高有效 8 位以相反的位顺序与一个字节数据进行异或从而实现数据加扰/解扰。如果数据是K码,则不进行异或,直接输出K码数据。 阅读详情

基于eDP规范的LFSR多项式,提供一个完整的Verilog实现,包括加扰器和解扰器。

1. 基本加扰器模块

module edp_scrambler (
    input wire clk,          // 时钟
    input wire reset_n,      // 异步复位(低有效)
    input wire enable,       // 加扰使能
    input wire [7:0] data_in, // 输入数据(8位)
    input wire sync_reset,   // 同步复位(在每个Video Data Period开始)
    output wire [7:0] data_out // 加扰后输出数据
);

// LFSR状态寄存器
reg [15:0] lfsr;
wire [7:0] scramble_bits;

// 生成8个加扰比特
assign scramble_bits[0] = lfsr[15];
assign scramble_bits[1] = lfsr[14];
assign scramble_bits[2] = lfsr[13];
assign scramble_bits[3] = lfsr[12];
assign scramble_bits[4] = lfsr[11];
assign scramble_bits[5] = lfsr[10];
assign scramble_bits[6] = lfsr[9];
assign scramble_bits[7] = lfsr[8];

// 加扰输出:输入数据与LFSR序列异或
assign data_out = enable ? (data_in ^ scramble_bits) : data_in;

// LFSR反馈计算(根据多项式 X^16 + X^15 + X^13 + X^4 + 1)
wire feedback_bit;
assign feedback_bit = lfsr[15] ^ lfsr[14] ^ lfsr[12] ^ lfsr[3];

// LFSR更新逻辑
always @(posedge clk or negedge reset_n) begin
    if (!reset_n) begin
        // 异步复位到非全零初始状态
        lfsr <= 16'hFFFF;  // eDP规范定义的初始值
    end else if (sync_reset) begin
        // 同步复位到初始状态
        lfsr <= 16'hFFFF;
    end else if (enable) begin
        // 正常操作:每次移位8位
        lfsr <= {lfsr[7:0], lfsr[15:8]};  // 循环移位8次的效果
        lfsr[15:8] <= lfsr[7:0] ^ {8{feedback_bit}};
    end
end

endmodule

2. 更精确的逐位加扰实现

module edp_scrambler_serial (
    input wire clk,
    input wire reset_n,
    input wire enable,
    input wire data_in_valid, // 输入数据有效
    input wire [7:0] data_in, // 输入数据
    input wire sync_reset,    // 同步复位
    output wire data_out_valid, // 输出数据有效
    output wire [7:0] data_out  // 加扰输出
);

reg [15:0] lfsr;
reg [7:0] input_buffer;
reg [7:0] output_buffer;
reg [2:0] bit_counter;
reg processing;

// 状态控制
always @(posedge clk or negedge reset_n) begin
    if (!reset_n) begin
        processing <= 1'b0;
        bit_counter <= 3'b0;
        input_buffer <= 8'b0;
        output_buffer <= 8'b0;
    end else if (sync_reset) begin
        processing <= 1'b0;
        bit_counter <= 3'b0;
    end else begin
        if (data_in_valid && !processing) begin
            // 开始处理新的字节
            processing <= 1'b1;
            input_buffer <= data_in;
            bit_counter <= 3'b0;
        end else if (processing) begin
            // 处理当前字节的每一位
            if (bit_counter == 3'b111) begin
                processing <= 1'b0;
            end
            bit_counter <= bit_counter + 1'b1;
        end
    end
end

// LFSR反馈
wire feedback_bit;
assign feedback_bit = lfsr[15] ^ lfsr[14] ^ lfsr[12] ^ lfsr[3];

// LFSR更新和加扰
always @(posedge clk or negedge reset_n) begin
    if (!reset_n) begin
        lfsr <= 16'hFFFF;
    end else if (sync_reset) begin
        lfsr <= 16'hFFFF;
    end else if (enable && processing) begin
        // 逐位更新LFSR并加扰
        lfsr <= {lfsr[14:0], feedback_bit};
        output_buffer[bit_counter] <= input_buffer[bit_counter] ^ lfsr[15];
    end
end

assign data_out_valid = (bit_counter == 3'b111) && processing;
assign data_out = output_buffer;

endmodule

3. 自同步解扰器

module edp_descrambler (
    input wire clk,
    input wire reset_n,
    input wire enable,
    input wire [7:0] scrambled_data, // 加扰后的输入数据
    output wire [7:0] descrambled_data // 解扰后数据
);

reg [15:0] lfsr;
wire [7:0] scramble_bits;

// 生成解扰序列
assign scramble_bits[0] = lfsr[15];
assign scramble_bits[1] = lfsr[14];
assign scramble_bits[2] = lfsr[13];
assign scramble_bits[3] = lfsr[12];
assign scramble_bits[4] = lfsr[11];
assign scramble_bits[5] = lfsr[10];
assign scramble_bits[6] = lfsr[9];
assign scramble_bits[7] = lfsr[8];

// 解扰:加扰数据再次与LFSR序列异或
assign descrambled_data = enable ? (scrambled_data ^ scramble_bits) : scrambled_data;

// LFSR更新 - 使用接收到的数据来同步
wire [7:0] received_bits;
assign received_bits = scrambled_data;

// 自同步LFSR更新
always @(posedge clk or negedge reset_n) begin
    if (!reset_n) begin
        lfsr <= 16'hFFFF;
    end else if (enable) begin
        // 使用接收到的数据更新LFSR
        // 注意:这是简化的8位并行更新,实际需要根据规范精确实现
        lfsr <= {lfsr[7:0], received_bits};
    end
end

endmodule

4. 完整的eDP加扰/解扰系统

module edp_scrambler_system (
    input wire clk,
    input wire reset_n,
    
    // 发送端接口
    input wire tx_valid,
    input wire [7:0] tx_data,
    input wire tx_sync_reset,
    output wire [7:0] tx_scrambled_data,
    
    // 接收端接口
    input wire rx_valid,
    input wire [7:0] rx_scrambled_data,
    output wire [7:0] rx_descrambled_data
);

// 发送端加扰器
edp_scrambler tx_scrambler (
    .clk(clk),
    .reset_n(reset_n),
    .enable(tx_valid),
    .data_in(tx_data),
    .sync_reset(tx_sync_reset),
    .data_out(tx_scrambled_data)
);

// 接收端解扰器
edp_descrambler rx_descrambler (
    .clk(clk),
    .reset_n(reset_n),
    .enable(rx_valid),
    .scrambled_data(rx_scrambled_data),
    .descrambled_data(rx_descrambled_data)
);

endmodule

5. 测试平台

module tb_edp_scrambler;

reg clk;
reg reset_n;
reg enable;
reg [7:0] data_in;
reg sync_reset;
wire [7:0] data_out;

// 实例化加扰器
edp_scrambler uut (
    .clk(clk),
    .reset_n(reset_n),
    .enable(enable),
    .data_in(data_in),
    .sync_reset(sync_reset),
    .data_out(data_out)
);

// 时钟生成
always #5 clk = ~clk;

// 测试序列
initial begin
    // 初始化
    clk = 0;
    reset_n = 0;
    enable = 0;
    data_in = 8'h00;
    sync_reset = 0;
    
    // 复位
    #20 reset_n = 1;
    
    // 测试1: 同步复位
    #10 sync_reset = 1;
    #10 sync_reset = 0;
    
    // 测试2: 加扰使能
    enable = 1;
    data_in = 8'hAA;
    #10;
    data_in = 8'h55;
    #10;
    data_in = 8'hFF;
    #10;
    data_in = 8'h00;
    #10;
    
    // 测试3: 禁用加扰
    enable = 0;
    data_in = 8'hAA;
    #10;
    
    $finish;
end

// 波形输出
initial begin
    $dumpfile("edp_scrambler.vcd");
    $dumpvars(0, tb_edp_scrambler);
end

endmodule

6. 关键设计要点

  1. 初始状态:LFSR必须初始化为非全零值(通常为16'hFFFF)

  2. 同步复位:在每个Video Data Period开始时复位LFSR

  3. 自同步特性:接收端使用相同的LFSR结构和接收到的数据自动同步

  4. 并行处理:eDP通常需要并行处理多个lane的数据

  5. 时序考虑:确保加扰操作不会引入额外的时钟延迟

这个实现提供了eDP数据加扰的核心功能,可以根据具体的eDP版本和系统需求进行调整。

8B/10B编码原理详解、Verilog实现及在JESD204B中的应用 1.8B/10B介绍及应用 8B/10B编码的目的是防止串行的数据出现长时间的连0连1,因为这会使得信号直流电压不稳定,换句话说就是 keep DC-balance; 另一个目的是提供给接收端‘清晰的边界’:接收端能在串行数据流中确定某个10B的起始边界;而且接收端还能判断数据是否出错,能检错不能纠错。 值得一提的是,除了检错外,还有上述前2个功能的是扰码:scramble,扰码没有冗余比特出现,基本原理是使用线性反馈移位寄存器LFSR实现,这里不做详细介绍哈。 8B/10B编码广泛应用于串行数据总线 阅读详情

相关推荐

【Verilog基础】Verilog实现加扰器(Scrambler )与解扰器(Descrambler)

文章目录一、加扰器和解扰器简介二、加扰器和解扰器原理框图三、加扰器和解扰器Verilog实现3.1、加扰器实现3.2、解扰器实现3.3、TestBench参考 一、加扰器和解扰器简介 一般来说,数字通信系统的设计及其性能都与所传输的数字信号的统计特性有关。在数字通信设备中,通常从0和1码的交变点提取位定时信息,若经常出现长0或1游程,则将影响位同步的建立和保持。如果数字信号具有周期性,则信号频谱中存在离散谱线。为了限制这种串扰,常要求数字信号的最小周期足够长。 如果我们能够先将信源产生的数字信号变换成具有近

悟已往之不谏 知来者之可追 5770

扰码器原理详解及verilog实现

扰码就是对原始的用户数据进行扰乱,得到随机化的用户数据。连续扰码两次就能得到原始数据,通常是发送电路在发送数据时先对数据进行随机扰乱,接收电路使用相同的扰乱算法就可以重新恢复出原始的数据。

qq_57502075的博客 7952

eDP接口显示驱动原码分析与实现

eDP(Embedded DisplayPort)接口是一种高速视频接口标准,被广泛应用于嵌入式系统中,提供高分辨率视频数据的传输。它是由VESA(Video Electronics Standards Association)制定的一项技术规范,主要为了降低显示设备的体积并提高性能。

weixin_33750664的博客 1969

【业务领域】Scramble/de-Scramble加扰解扰总结

加扰/解扰的基本概念,为什么要有加扰解扰,加扰解扰实现方法等;

飓风_数字IC验证的博客 1万+

verilog-lfsr:完全参数化组合并行LFSRCRC模块

Verilog LFSR自述文件 有关更多信息和更新: : GitHub存储库: : 介绍 完全参数化的组合并行LFSR / CRC模块。 实现展开的LFSR下一状态计算。 包括完整的MyHDL测试台。 文献资料 lfsr模块 完全参数化的组合并行LFSR / CRC模块。 实现展开的LFSR下一状态计算。 lfsr_crc模块 用于lfsr模块的包装器,用于标准CRC计算。 lfsr_descramble模块 用于lfsr模块的包装器,用于自同步解扰器。 lfsr_prbs_check模块 用于lfsr模块的包装器,用于标准PRBS检查。 lfsr_prbs_gen模块 用于lfsr模块的包装器,用于标准PRBS计算。 lfsr_scramble模块 用于lfsr模块的包装器,用于自同步加扰器。 源文件 lfsr.v : Parametrizable c

EDP协议文件

edp标准文档,讲述如何在移动设备中应用DP协议整合LCD

FPGA数字信号处理(26)加扰器与解扰器设计

加扰与解扰 设计数字通信系统时,必须考虑发送信息的信号特征,这些特征会影响到设计性能。总的来说,发送的信息应注意:(1).避免出现长串的0或1,否则对于从0、1交换点处提取位同步信息的系统,容易错判导致失去同步;(2).避免传输信号具有周期性,否则在多路传输的通信系统中容易造成串扰。 信道编码中的加扰器和解扰器便是完成上述功能,将发送信号处理成没有长传的0或1,并且数字信号最小周期足够长。对信...

FPGADesigner的博客 1万+

EDP转接芯片介绍

2-lane/4-lane eDP @ 1.62/2.7Gbps per lane FHD to WQXGA (2560*1600) supported Up to 6dB pre-emphasis RGB Input 18/24bit RGB Interface Pixel clock up to 270MHz SDR/DDR supported Pin order reversal supported LVDS Input Dual-channel 6/8bit LVDS (Sync) interface 400Mbps to 1Gbps per data pair Built-in termination Channel and polarity swap supported Reference Clock Any freq. between 19MHz and 100MHz Crystal or single-ended clock input Built-in 5000ppm SSC generato

eDP的LFSR多项式表达式

摘要:eDP协议采用16位线性反馈移位寄存器(LFSR)实现数据加扰,其多项式为X^16+X^15+X^13+X^4+1。该LFSR通过异或S15、S14、S12和S3位生成新比特,具有自同步特性,接收端无需同步即可解扰。初始状态设为非全零值以避免输出全零序列,主要功能包括降低电磁干扰、保持DC平衡和辅助时钟恢复。这种加扰机制有效提升了eDP数据传输的可靠性和信号质量。

Js_cold的博客 893

物理层加扰(Scrambling)Verilog程序

基于DVB-S2X标准的物理层加扰Verilog程序,扰码采用Golden序列(双m序列组合构成),含testbench,开发环境为vivado 2017.4

超螺旋滑模控制(STA)

超螺旋滑模控制又称超扭滑模控制,可以说是二阶系统中最好用的滑模控制方法。

Lyajpunov的博客 1万+

eDP 1.4及更高版本的规范

摘要:本文详细阐述了eDP1.4及更高版本的加扰技术规范,包括16位LFSR(线性反馈移位寄存器)的参数设置(多项式为X¹⁶+X¹⁵+X¹³+X⁴+1,初始值16'hFFFF)、同步复位机制(标准复位和可选交替复位)、加扰数据范围(视频/音频数据)以及多通道处理方案。规范强调LFSR实现的精确性,要求严格遵循多项式定义,并提供了Verilog实现示例。此外,还对比了eDP与DisplayPort的加扰差异,给出了合规性测试要求和实际实现建议,确保设备间的兼容性。

Js_cold的博客 1406

Python实现微信PC端聊天记录自动化监听与智能回复

本文详细介绍了如何使用Python实现微信PC端聊天记录的自动化监听与智能回复。通过win32api和uiautomation库,模拟人工操作,实时监控聊天窗口并抓取新消息。文章重点讲解了核心代码逻辑、环境搭建步骤,并提供了实现关键词触发自动回复的完整方案,旨在提高工作效率与信息管理自动化水平。

weixin_29092031的博客 349

加扰模块 Verilog 设计:从原理到代码实现与仿真

在前文我们已经搞懂了加扰解扰的核心逻辑 —— 通过伪随机序列与原始数据异或,优化信号传输特性。今天这篇文章,我们将聚焦加扰模块的 Verilog 硬件设计,从需求定义、核心结构(LFSR)、代码编写到仿真验证,手把手带你实现一个可复用的加扰。

m0_58319555的博客 512

AI开发助手介绍

AI开发助手介绍随着NLP方向发展越来越成熟,AI写代码领域出现了几个非常好的模型,今天笔者给大家推荐几个AI Coding 助手AI Coding助手是以IDEA插件或vim插件形式提供服务,在编辑器中写代码时,可以实时预测下一行要输入的代码,提升开发效率。Github Copilot首先要介绍的是Github Copilot,Copilot是个AI Coding助手,它从注释和代码中提取上下文,给出单行和整个函数的代码建议,Copilot由Open AI 的CodeX模型提供支持,它是一个由OpenAI

bobo_simpler的博客 5768

SHAP图全解析:从理论到实践,教你如何读懂和优化模型特征

本文全面解析SHAP图,从博弈论基础到实战应用,指导读者如何解读和利用SHAP值优化机器学习模型。通过详解特征重要性条形图、小提琴图、依赖图及决策图等关键可视化工具,帮助数据科学家精准诊断模型、识别特征交互,并将洞见转化为特征工程与模型调试的实际行动,有效提升模型可解释性与性能。

svm4gardener的博客 190

FPGA 8阶LFSR加扰/解扰器设计

加扰是可逆、无密钥、标准化打乱,任何人用同款多项式都能解,不具备加密安全性。直接把加扰输出接到解扰输入,仿真可看到:输入 = 最终输出,验证功能正确。input iw_Data_Valid_h, // 数据有效标志。加扰过的数据,接收端必须用一模一样的规则打乱一次,就能恢复原始数据。工程标准:只有数据有效时才移位,否则扰码序列会错位,接收端解不出来。input iw_Data, // 输入:加扰后的数据。多项式下标从 1 开始,代码下标从 0 开始,新手极易写错位。// 最高位异或输入数据,完成加扰。

nskksms的博客 105

最近爆火的 Ontology 本体是什么?一文看懂基础概念 + 落地实操

1993 Tom Gruber原版定义:本体是对领域概念化模型的显式形式化规范。1998 Studer完善通用定义:本体是共享、明确、形式化的领域概念模型规范。大白话翻译:本体就是机器能看懂的行业词典+业务规则手册。数据库只管存数据,本体只管定规则,知识图谱是规则+数据结合体。区别于普通开源本体工具,这款国产商用本体平台核心优势:业务沙盘推演、可控业务数据写回、全链路字段级数据血缘审计,适配企业生产级业务落地。

驽马不舍 368

NCS8801 RGB24 转eDP屏

目前项目中,需要点eDP屏,但飞思卡尔mx6没有eDP接口,通过神奇的转换芯片,专为中国人设计的, 各种接口之间的转换,只要你能想得的,基本上都能找得到。NCS8801 就是通RGB24接口转eDP接口。 这里记录一下。   uboot 中初始化代码如下:    //ispsubb 20160317 int  init_eDP(void) { unsigned char i

phenixyf的专栏 9017

VS Code+ESP-IDF开发避坑指南:头文件标红报错的5种解决方法(附CMakeLists.txt配置)

本文详细解析了在VS Code中使用ESP-IDF开发ESP32时头文件标红报错的5种解决方法,包括环境配置检查、CMakeLists.txt规范配置、路径解析策略、缓存清理技巧和高级调试手段。特别提供了CMakeLists.txt的实战配置示例,帮助开发者彻底解决头文件路径问题,提升开发效率。

weixin_33670786的博客 560

基于MATLAB的变分模态分解(VMD)算法详解

变分模态分解(VMD)是一种先进的信号处理方法,通过变分框架将复杂信号分解为多个模态分量。相比传统经验模态分解(EMD),VMD具有坚实的数学基础,能有效抑制模态混叠和端点效应。其核心思想是将信号分解转化为约束优化问题,通过交替方向乘子法迭代求解各模态的中心频率和带宽。VMD在机械故障诊断、生物医学信号处理等领域展现出优越性能,尤其适合处理非平稳非线性信号。该算法通过严格的数学模型实现自适应频谱优化,为信号分析提供了更可靠的工具。

qq_42212808的博客 739

FPGA设计——CMOS摄像与HDMI显示(MIPI版)

1. 概述本设计采用FPGA技术,将CMOS摄像头(MIPI接口)的视频数据经过采集、存储、帧率转换及格式转换,最终通过HDMI接口显示在电视屏幕上。2. 硬件系统框图CMOS采用300万像素的摄像头芯片,其他部分可参考博文“FPGA设计——CMOS摄像与HDMI显示(DVP版)”。3. FPGA逻辑框图FPGA各部分逻辑模块如下图所示:MIPI DECODE,解析MIPI...

weixin_34413065的博客 2073

3、数据导入与清洗:Excel、SQL、SPSS、Stata和SAS数据处理

本文详细介绍了如何从Excel文件、SQL数据库以及SPSS、Stata和SAS等统计软件中导入和清洗数据。针对不同数据来源的特点,提供了具体的处理方法,包括跳过无用行、重命名列、处理缺失值、转换数据类型、保留元数据等关键步骤。同时,通过实际应用案例展示了如何整合多源数据,并总结了数据导入和清洗的最佳实践,帮助读者高效完成数据预处理工作,为后续的数据分析打下坚实基础。

134

DP/eDP协议学习--协议简介

最近一段时间由于项目接触到该协议,该协议不像HDMI,USB资料那么多,虽然应用还是很广泛的,但是生态不是很好。自己看了一段时间的协议,想着记录下来大家一起讨论学习。 1综述 eDP(Embedded DisplayPort)是数字显示技术领域的标准协议,其创始者为视频电子标准协会(VESA),创始成员包括戴尔、惠普、三星、飞利浦以及英伟达等。eDP协议是针对DP(Display Port)应用在嵌入式方向架构和协议的拓展,所以eDP协议完全兼容DP协议。相对于DVI/HDMI来说,eDP具有高带宽...

jiuyuetingyue的博客 4万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

leetcode--Scramble String

Given a string s1, we may represent it as a binary tree by partitioning it to two non-empty substrings recursively. Below is one possible representation of s1 = "great": great / \ gr

crazychen的专栏 1458

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

上一篇: eDP 1.4及更高版本的规范
下一篇: eDP的LFSR多项式表达式
Js_cold
博客等级 码龄4年 143粉丝 126原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值