基本原理
PN码生成器的核心是LFSR(Linear Feedback Shift Regisiter,线性反馈移位寄存器),LFSR序列共有(2N-1)种状态(其中N为LFSR中寄存器的个数),寄存器中的数据在每个触发时钟周期右移一位。反馈由预先确定的寄存器引出,共同经过异或逻辑后,加到LFSR的左端。通常寄存器的个数越多生成的PN序列的长度就越长,其中生成的最长的序列成为M序列。
要实现LFSR序列的填充,需要在LFSR的反馈路径中加入一个多路复用器,利用这个多路复用器将实现期望的状态加载进去。需要注意的是在用一个特定的序列来填充时必须事先知道合适新填充的第一位从LFSR中输出。新的填充序列必须在相同的时钟周期内加载到LFSR中,并且新序列的第一位必须在并行加载完成后的第一个时钟周期被移出。如图1所示PN码生成器的原理图,共有17种寄存状态。下面来看并行加载是如何实现的。如果一个并行加载发生在T=0时钟周期,那么在T=17时钟周期时,通过fillsel指示反馈加入。这时,移位寄存器包含反馈加入前的长度为17位原序列,这17位的原序列在反馈加入时并未受影响。在接下来的17个时钟周期(即从T=17到T=0),原序列被移出,新的序列被移出,在T=0周期,新的序列移入完毕,反馈路径被断开,并在下一个时钟周期开始驱动新序列的第一位。这样,就如同新序列在一个单个的时钟周期T=0被并行加载一样。
PN码生成器的实现
SRL16E是一种基于查找表的移位寄存器,可以非常方便地配置成多个触发器级联输出的形式,因此应用SRL16E来实现PN序列,是非常高效的,并且能够很大程度地减少FPGA资源的占用。原先SRL16E由于在配制时需要注册而被认为比ASIC(Application Specific Integrated Circuit,特定用途集成电路)开销更大。现在,它已成为FPGA中LUT(Look Up Table,查找表)配制模式的基本单元,可以非常方便地应用。并且这些基本单元在设计中应用得越多,那么设计所占用的专用触发器资源就越少。如图2所示为Xilinx公司Virtex II系列FPGA中的基本Slice结构示意图。
应用SRL16E来实现LFSR时,一个Slice就可以生成一个16阶的LFSR,而用触发器来实现时,所用Slice的数量激增为16个。由此可见,应用SRL16E可以大大降低FPGA资源的占用。
假设LFSR多项式为g(x)=1+x5+x17,即图1所示的PN码生成器,则应用SRL16E来实现PN码生成器的电路图如图3所示。
图4为以SRL16E为基本单元,使用ISE软件设计的PN码生成器所得到的模块图。其中输出pn_out_i对应的LFSR多项式为:
对于图4所示PN码生成器,我们应用ISE软件内嵌的XST(Xilinx Synthesis Technology)综合工具对其进行综合,得到的仿真波形如图5所示。
根据ISE生成的综合报告可得到图4所示PN码生成器仅仅占用4个Xilinx公司Virtex II系列FPGA的基本Slice单元,可见应用SRL16E来设计PN码生成器可以非常有效地节省FPGA资源。
结论
应用SRL16E来实现PN码生成器的方法可以大大节省FPGA资源的占用量,并且由于SRL16E是被优化设计的模块,相较于传统的方法可提高所设计PN码生成器的效率。同时,SRL16E还可以用来实现滤波器、除法器以及波形发生器等,在大的系统中,例如整个CDMA系统,通过使用SRL16E可有效降低整个FPGA资源的占用量,从而使功耗及成本等得到进一步的降低。