|
Cyclone v的板子拿到有一段时间了,现在才把心得拿出来与大家分享,实在是觉得于心有愧,对不起大家了。
我拿到开发板,想做的有两类的实验,一个是跟DDR硬核有,另一则是跟收发器有关。
当初拿到开发板之后,就跑了关于SDI自发自收的loopback例程。例程是开发板套件里自带的,我是直接拿来用,没有做任何的修改。
工程是用nios来搭建的,ip直接在qsys里拿来用,跟之前用sopc builder的思路是一样的,只是你得去熟悉qsys的操作方式。Nios里可用的ip很多,相对简单(你不用去关底层的信号,除非是挂在自己的ip),但是也是最没效率(资源利用的效率)。
具体的过程就免了,qsys的使用、约束文件、引脚分配等这些就自己google吧,如果你遇到其它问题可以提问。
工程中涉及到的一些概念的确花了我不少时间,知道了原理之后又发现其实很简单,以下内容对你看懂工程里面关于发送PRBS signals的代码很有帮组(个人觉得而已)!
这里例子里面的涉及到一个PRBS signals的概念,它是串行收发器常用检测误码率的方法。
首先,串行总线的物理层测试通常分为发射机测试和接收机测试,又称为TX测试和RX测试。发射机测试通常包括眼图、抖动、信号波形、幅度、上升下降时间等测试项目
接收机测试通常包括误码率、抖动容限、接收机灵敏度等测试项目。
对于眼图测试、误码率和抖动容限测试,最常用的测试码是伪随机码(Pseudo Random Binary Sequence,简称PRBS),主要有PRBS7、PRBS15、PRBS23和PRBS31。
PRBS7
PRBS7是目前10Gbps以下的串行总线中最常用的测试码型。常用的PRBS7的多项式为X7+X6+1,码长为127个比特,在ITU-TV.29规范中规定。PRBS7属于短伪随机码型,与8b10bNRZ编码的数据流很相似,所以,在PCIe、SATA、XAUI、1000BASE-LX、FC、SAS等采用8b10b编码的串行总线中,PRBS7是最常用的测试码型,支持这些总线的芯片通常都可以输出PRBS7测试码型,用于眼图、抖动或误码率测量。
图表 1 PRBS7码型发生器原理
PRBS7的码流中最长的连1为7个,最长的连0为6个;而8b10b编码中最长的连1为5,最长的连0也是5;因此,相比8b10b编码,PRBS7可以产生的较低频率的码型。使用PRBS7作为驱动源,在同一信道(比如背板上20英寸长走线)上传输到接收端后得到眼图和抖动,都比8b10b编码的作为驱动源时的结果稍差些。这样,PRBS7作为8b10b编码的串行总线的测试码型,留出了一定的设计余量
PRBS的实现方法
PRBS是伪随机码流,在其码流中包括了所有可能出现的比特组合,而且其出现的概率是相同的。PRBS信号是由PRBS码型发生器生成的。PRBS发生器通常是由线性反馈移位寄存器(Linear Feedback Shift Register,简称LFSR)和异或电路组成。
上图所示为最简单的PRBS3的码型发生器,其多项式为X3+X2+1,即寄存器的第3位与第2位做异或(XOR)的逻辑运算后返回到寄存器的第1位,寄存器的第3位X3同时也是PRBS3发生器的输出。
图表 3中显示了PRBS3的n个周期的时钟后输出n个比特的码流。X1/X2/X3分别是3个比特移位寄存器的低位到高位,输出位是X3,初始状态为X1/X2/X3=1/1/1,如表格第1行所示。
第1个时钟沿到达后,X3与X2异或后等于0,输入到X1,同时X1和X2前移到X2和X3,所以X1/X2/X3=0/1/1,如表格第2行所示;
第2个时钟沿到达后,X3与X2异或后等于0,输入到X1,同时X1和X2前移到X2和X3,所以X1/X2/X3=0/0/1,如表格第3行所示;
第3个时钟沿到达后,X3与X2异或后等于1,输入到X1,同时X1和X2前移到X2和X3,所以X1/X2/X3=1/0/0,如表格第4行所示;
……
以此类推,第5行为0/1/0,第6行为1/0/1,第7行为1/1/0,第8行为1/1/1,与初始状态相同,接下来的第9行和第10行与第2行和第3行完全相同,也就是说PRBS3的码型输出7个比特后开始重复。X3是PRBS3的输出位,所以PRBS3输出的码型为1110010,码长为7,如图表 4所示,每7个比特后开始重复输出同型。在PRBS3中包括了11100属于码流中频率最低的码型,010是频率最高的码型。
为何PRBSN的码长为2^N-1
在PRBS3的3位寄存器可以产生2的3次方合计8个排列组合。采用XOR异或电路的PRBS发生器在3个比特都是0的时候,下一个时钟到来的时候,第3个比特和第2个比特异或后还是0,输入到寄存器的第一位还是0,同时第1个和第2个比特前移到第2个和第3个比特,这样,移位后寄存器的3个比特都是0,则PRBS发生器的输出一直都是0,被锁住。所以PRBS3码流中不能出现3个全0的比特,这样,PRBS3的组合方式为2^3-1=7共7种,码长位7个比特。同理,PRBS7的码长为2^7-1=127个比特,PRBS15的码长为2^15-1=32767个比特。
图表 5几种常用PRBS的说明
PRBS31的多项式为X31+X28+1,码长为2^31-1=2147,483,647个比特,属于长伪随机码型。码流中最长的连1为31个,最长的连0为30个,包含了相当多的低频成分而这正是SONET/SDH系统测试规范中所要求的,所以可用于像SONET/SDH信号那样包含了很多低频成分的物理层测量。