根據《通信原理》一書可知,m序列是最長線性反饋移位寄存器的簡稱,它產生的偽隨機序列的周期與其反饋移存器級數有關;
m序列的屬性有很多,比如:
- 周期性,它的周期與它的反饋寄存器的級數有關,周期為2的級數N次方-1,比如級數為4,則周期為2^4-1,即15;
- 均衡性,一個周期內'1'的個數比'0'多一個;
假設一個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的頻率運行,通常會用兩種方法:
- 使用各種分頻的方法將50MHz分頻出1MHz;
- 使用PLL等IP核將50MHz輸入之后鎖定輸出1MHz;
而這兩種方法都會產生兩種時鐘域(1MHz,50MHz),兩個時鐘域之間的數據通信通常又會牽扯到跨時鐘域同步,亞穩態等問題;
那么有沒有一種方法能夠在50MHz下按照1MHz的頻率運行?有,使用使能信號控制頻率運行。
使能信號的作用就相當于一個定時器鬧鐘,定時會拉高一次,提醒電路該運行一次了,然后電路進入空閑狀態等待下一次使能信號拉高;
這么做的好處有以下幾點:
- 減少了其他的時鐘,FPGA設計需要遵循盡可能少的時鐘域原則;異步時鐘域之間的信號同步,亞穩態問題都可以避免;
- 降低了設計難度,不需要使用IP核,不需要考慮跨時鐘域的處理;
- 便于FPGA實現,因為FPGA內部的寄存器本來就有使能en端,實現起來方便;
使能信號的產生原理也很簡單,使用計數器不斷地計數,同時使能信號保持低電平;當計數到固定值時,使能信號拉高,計數器歸零;
設計內容如下:
圖3
這里INTERVAL是一個常量,可以在實例化的時候修改這個常量值;
其實這個常量值可以設為輸入端口,這樣可以在運行的過程中在線修改使能信號的周期,更為方便;
最后的VCS仿真圖如下:
圖4 仿真圖
得出來的數字與圖1完全對應,仿真成功!
總結:
-
FPGA設計
+關注
關注
9文章
428瀏覽量
26530 -
移位寄存器
+關注
關注
3文章
258瀏覽量
22279 -
BPSK
+關注
關注
0文章
34瀏覽量
22951 -
PLL電路
+關注
關注
0文章
92瀏覽量
6414 -
Verilog語言
+關注
關注
0文章
113瀏覽量
8260
發布評論請先 登錄
相關推薦
評論