http://bbs.ednchina.com/BLOG_ARTICLE_3018596.HTM

在高速设计中,为了测试高速串行通道传输的误码率,通常通过发送PRBS码来进行测试

原理:用生产函数产生一段随机码流,然后按周期循环。

PRBS码的周期长度与其阶数有关,常用的阶数有7,9,11,15,20,23,31.

对于N阶PRBS码,每个周期的序列长度为2^N-1.

在每个周期内,0和1时随机分布的,并且0和1的个数相等。

连续个1的最大数目为n,连续个0的最大数目为n-1(反转后就是n-1个连续1和n个连续0)。

在对高速信号链路进行误码测试时,基本上都是利用PRBS码流来模拟真实的线网码流环境,因为在线网中,所有的数据都是随机出现的,没有任何规律可言,而PRBS码流在一定程度上具有这种“随机数据”特性,二进制0和1随机出现,其频谱特征与白噪声非常接近。PRBS码流的阶数越高,其包含的码流就越丰富,就越接近真实的线网环境,测试的结果就越准确。

一个PRBS序列可以串/并转换成多路(2、4、8、16.路),每路输出的速率降低,但仍然保持原序列的所有特诊,反之,同一时钟源低速多路(2、4、8、16..路)同一个n数的PRBS可以经并/串转换成高速率的n阶PRBS。

下面采用verilog来设计PRBS模块,可以通过外部参数配置PRBS7, PRBS9, PRBS15, PRBS23, PRBS31,

`timescale 1ns / 1ps

 

module prbs_gen

#(

parameter PRBS_WIDTH = 32,

parameter PRBS_PATTERN = "prbs7"  //prbs7,prbs9.prbs15,prbs23,prbs31

)

(

    input                    sys_clk,    //系统时钟

    input                    reset_n,    //系统复位

    input                    prbs_en,   //enable_prbs

    input                    inser_err,

    output [PRBS_WIDTH-1:0] prbs_data  //prbs_out

);

    reg [PRBS_WIDTH-1:0] prbs_reg;

    reg [PRBS_WIDTH-1:0] tx_data;

    wire feed_data;

    wire [PRBS_WIDTH-1:0] prbs_d;

integer m;

//本原多项式

//prbs7 = 1+x^6+x^7

//prbs9 = 1+x^5+x^9

//prbs15 = 1+x^14+x^15

//prbs23 = 1+x^18+x^23

//prbs31 = 1+x^28+x^31

 

localparam PRI_MAX_WIDTH = 40;

wire [PRI_MAX_WIDTH-1:0] prbs_pri_val;

 

reg prbs_en_d0,prbs_en_d1;

 

assign prbs_pri_val = (PRBS_PATTERN == "prbs7")? 40'b0011000001:

                   (PRBS_PATTERN == "prbs9")? 40'b1000100001:

                   (PRBS_PATTERN == "prbs15")? 40'b0000110000__0000000001:

                   (PRBS_PATTERN == "prbs23")? 40'b0000001000_0100000000_1000100001:

                   (PRBS_PATTERN == "prbs31")? 40'b0000000010_0100000000_0000000000_0000000001:0011000001;

 

localparam reset_seed = 40'haa_aaaa_aaaa;

 

always @(posedge sys_clk or negedge reset_n) begin

  if(~reset_n) begin

      prbs_en_d0 <= #1 'b0;

      prbs_en_d1 <= #1 'b0;

  end

  else begin

      prbs_en_d0 <= #1 prbs_en;

      prbs_en_d1 <= #1 prbs_en_d0;

  end

end

 

always @(posedge sys_clk or negedge reset_n) begin

  if(reset_n == 1'b0)  begin

    prbs_reg <= prbs_pri_val[(PRBS_WIDTH-1):0];

    //prbs_reg <= prbs_pri_val[7:0];

  end

  else if(prbs_en_d1) begin

    for(m =1; m< PRBS_WIDTH; m = m+1)

        prbs_reg[PRBS_WIDTH-m-1] <=  prbs_reg[PRBS_WIDTH-m];

    prbs_reg[PRBS_WIDTH-1]   <=  feed_data;

  end

  else

     prbs_reg[PRBS_WIDTH-1:0]   <=  prbs_reg[PRBS_WIDTH-1:0];

end

 

assign prbs_d  = prbs_reg & prbs_pri_val[(PRBS_WIDTH-1):0];

assign feed_data = ^prbs_d;

 

reg inser_err_d0;

reg inser_err_d1;

reg detect_insererr;

 

always @(posedge sys_clk or negedge reset_n) begin

  if(reset_n == 1'b0) begin

      tx_data         <= reset_seed[PRBS_WIDTH-1:0];

      inser_err_d0    <= 1'b0;

      inser_err_d1    <= 1'b0;

      detect_insererr <= 1'b0;

  end

  else begin

     inser_err_d0 <= inser_err;

     inser_err_d1 <= inser_err_d0;

     if(inser_err_d0 == 1'b1 && inser_err_d1 == 1'b0)

         detect_insererr <= 1'b1;

     else

         detect_insererr <= 1'b0;

 

     if(detect_insererr == 1'b1)

         tx_data <= {~prbs_reg[PRBS_WIDTH-1],prbs_reg[PRBS_WIDTH-2:0]};

     else

         tx_data <= prbs_reg[PRBS_WIDTH-1:0];

  end

end

assign prbs_data = tx_data;

 

endmodule

高速接口中的PRBS的设计相关推荐

  1. 软件的接口设计图_【学术论文】高速接口JESD204B的灵敏放大器设计

    摘要 采用UMC 28 nm CMOS工艺,在低电源电压下设计实现了一种高速.低失调的灵敏放大器.在传统差分放大器.AB类锁存器等电路的基础上进行改进,提出了一种新型结构的灵敏放大器.利用Cadenc ...

  2. 高速USB转8串口产品设计-RS232串口

    基于480Mbps 高速USB转8路串口芯片CH348,可以为各类主机扩展出8个独立的串口.使用厂商提供的VCP串口驱动程序,可支持Windows.Linux.Android.macOS等操作系统.使 ...

  3. 高速USB转4串口产品设计-TTL串口

    基于480Mbps 高速USB转8路串口芯片CH344Q,可以为各类主机扩展出4个独立的串口.CH344芯片支持使用操作系统内置的CDC串口驱动,也支持使用厂商提供的VCP串口驱动程序,可支持Wind ...

  4. 高速USB转8串口产品设计-RS485串口

    基于480Mbps 高速USB转8路串口芯片CH348,可以为各类主机扩展出8个独立的串口.使用厂商提供的VCP串口驱动程序,可支持Windows.Linux.Android.macOS等操作系统.使 ...

  5. zynqsd的读写数据_数据存储结构图 - Zynq7000 FPGA的高速信号采集处理平台的设计搭建以及后续拓展...

    通过FPGA搭建A/D数据高速缓存机制,A/D数据经过FPGA的片上缓存,写入DDR A/D数据区,作为高速缓存,DDR其他空间作为ARM控制系统的运行程序,与A/D转换器进行数据交互.数据存储结构图 ...

  6. 【高速PCB电路设计】6.布局设计流程与案例实践

    文章目录 1.布局流程 2.模块布局 3.整体布局 4.叠层与阻抗 4.1设计参数确认 4.2叠层评估 4.3阻抗计算 5.总结 1.布局流程 ①模块布局 ②整体布局 ③叠层与阻抗 ④规则设置 ⑤模块 ...

  7. 高速PCB设计指南(十)

    三. PowerPCB简介     PowerPCB是美国Innoveda公司软件产品.     PowerPCB能够使用户完成高质量的设计,生动地体现了电子设计工业界各方面的内容.其约束驱动的设计方 ...

  8. 【国产虚拟仪器】基于dsp+fpga+AD+ENDAC的半导体运动台高速数据采集电路仿真设计(四)

    整个调试验证与仿真分析分三个步骤:第一步是进行 PCB 检查及电气特性测试,主 要用来验证硬件设计是否正常工作:第二步进行各子模块功能测试,包括高速光纤串行 通信的稳定性与可靠性测试, A/D 及 D ...

  9. 【国产虚拟仪器】基于Zynq的雷达10Gbps高速PCIE数据采集卡方案(二)硬件设计

    3.1 引言 采集卡的硬件设计是实现采集功能的基础,良好的硬件设计可以使采集功能更容 易实现,方便软件开发.本章基于第二章的硬件设计方案来详细介绍采集卡硬件设计. 包括载卡和子卡的芯片的选型.配置和具 ...

最新文章

  1. golang备份和恢复
  2. ASP.NET【4】--ASHX
  3. 索引存储模型-二分查找
  4. 机器学习-聚类之K均值(K-means)算法原理及实战
  5. Memcached缓存在.Net 中的使用(memcacheddotnet)
  6. 线程、多线程和线程池,看完这些你就能全部搞懂了
  7. java编程思想第四版第十八章总结
  8. 深度学习工作笔记002---曼哈顿距离_欧氏距离
  9. 编程调节Win7/Win8系统音量的一种方法
  10. python textrank_TextRank算法提取文本摘要
  11. Mac安装Mysql(图文解说详细版)
  12. 机器学习笔记 - 什么是标准正态分布表?
  13. SSM框架的Web项目实现微信登陆
  14. 独家对话阿里副总裁李飞飞:数据库的进化之路
  15. CGArt 2008 Issue
  16. CAD带文字线型的文字偏移bug介绍
  17. 韦东山 android 淘宝,韦东山-android音频子系统中audio_policy.conf的usb声卡理解 - 百问网嵌入式问答社区...
  18. English trip EM3 LP 4B Home Design Relationship Teacher:Ryan
  19. 7-14 电话聊天狂人(25 分)
  20. chatgpt研究框架 --技术路线-行业进程研究

热门文章

  1. transmit video
  2. 游泳池 (Standard IO)
  3. 恒源智GPU云服务器
  4. 张赐荣 | 详解SAPI5语音转换扩展XMLTTS标记
  5. 「领域驱动设计」DDD,六边形架构,洋葱架构,整洁架构,CQRS的整合架构
  6. Python——等额本金计算
  7. CSS学习笔记 01、CSS3基础知识学习
  8. 纪中暑假培训 :Date:7 终章-剑之魂
  9. 提高app用户粘性的方法简析
  10. java心形动画效果_java swing实现动态心形图案的代码下载