电子说
根据《通信原理》一书可知,m序列是最长线性反馈移位寄存器的简称,它产生的伪随机序列的周期与其反馈移存器级数有关;
m序列的属性有很多,比如:
假设一个4级m序列的初始状态为(a3,a2,a1,a0) = (1,0,0,0),特征多项式为23;
移位一次,a3与a0模2相加产生新的输入a4=1^0 = 1,则新的状态为(a3,a2,a1,a0) = (1,1,0,0),输出为0;
依次移位15次后又回到初始状态(1,0,0,0)。所以4级反馈移存器的周期为15。
从书上拍下的图 图1
从书上拍下的m序列框架图 图2
从图2可以清晰的看出m序列的框架原理,只需要N位寄存器,并整体左移/右移,不断地做异或运算,产生新的值,;
以图1为例,使用特征多项式23,也就是'010 011',原始状态为'1000';参照图2的框照图,可以知道n = 4, c1 = c0 = c4 = 1, c2 = c3 = 0;
m序列的实现大致如下:
图3 m序列产生always块
可以看到,当en为高的时候,data_count会更新相应的值,同时data_out会产生新的输出值;
en信号在这里作为一个使能信号,它的作用是为了解决高速时钟下低速运行的问题;
以m序列的产生为例,假设需要产生符号速率1Mbps的伪随机序列,而FPGA的晶振为50MHz,而初学者为了在50MHz下按照1MHz的频率运行,通常会用两种方法:
而这两种方法都会产生两种时钟域(1MHz,50MHz),两个时钟域之间的数据通信通常又会牵扯到跨时钟域同步,亚稳态等问题;
那么有没有一种方法能够在50MHz下按照1MHz的频率运行?有,使用使能信号控制频率运行。
使能信号的作用就相当于一个定时器闹钟,定时会拉高一次,提醒电路该运行一次了,然后电路进入空闲状态等待下一次使能信号拉高;
这么做的好处有以下几点:
使能信号的产生原理也很简单,使用计数器不断地计数,同时使能信号保持低电平;当计数到固定值时,使能信号拉高,计数器归零;
设计内容如下:
图3
这里INTERVAL是一个常量,可以在实例化的时候修改这个常量值;
其实这个常量值可以设为输入端口,这样可以在运行的过程中在线修改使能信号的周期,更为方便;
最后的VCS仿真图如下:
图4 仿真图
得出来的数字与图1完全对应,仿真成功!
总结:
全部0条评论
快来发表一下你的评论吧 !