基於Verilog語言的偽隨機碼的編寫(原創)


編寫之初,筆者並沒有太大的自信,因為筆者對偽隨機碼並沒有太多的認識。但老師有命,筆者不得不進行編寫,同時筆者也特別希望能有個項目來鍛煉自己。

筆者在開始編寫的時候,首先上網查了很多的資料,對偽隨機碼算是有了一定的了解,但是相關的程序代碼卻沒有找到多少,或許是太簡單,亦或許是涉及到商業,所以網上資源很少,沒辦法筆者又再次閱讀了有關偽隨機碼的資料。偽隨機碼又稱偽隨機序列,它是具有類似於隨機序列基本特性的確定序列。通常廣泛應用二進制序列,因此我們僅限於研究二進制序列。二進制獨立隨機序列在概率論中一般稱為貝努利(Bernoulli)序列,它由兩個元素(符號)0, 11, -1組成。序列中不同位置的元素取值相互獨立取01的概率相等等於1/2:我們簡稱此種系列為隨機系列。

 隨機序列具有以下三個基本特性:

  1)在序列中“0”和“1”出現的相對頻率各為1/2

  2)序列中連0或連1稱為游程。連0或連1的個數稱為游程的長度,序列中長度為1的游程數占游程 總數的1/2;長度為2的游程數占游程總數的1/4;長度為3的游程數占游程總數的1/8;長度為n的游程數占游程總數的1/2^n(對於所有有限的 n )此性質我們簡稱為隨機序列的游程特性:

  3 如果將給定的隨機序列位移任何個元素 則所得序列的和原序列的對應的

  元素有一半相同,一半不同。

  如果確定序列近似滿足以上三個特性則稱此確定序列為偽隨機序列。

在明白了偽隨機碼的概念之后,筆者開始從功能上着手,采用由下至上的方式,進行編寫代碼。

因為本次要產生碼元序列為010110010001111的偽隨機碼,所以筆者首先編寫碼元序列為010110010001111,速率為2Khz的偽隨機碼。請注意,碼元序列的方向和速率。在理解其速率時,着實讓筆者頭疼了一番,最終筆者明白了其速率是指一位編碼的速率。

在理解這些東西時,筆者開始構思,不管采用什么方式,筆者只需產生編碼為010110010001111速率為2Khz的序列即可。因此筆者決定采用移位寄存器和分頻的方式來產生,以下為Verilog代碼:

module wsjm(clk,data_15bit_2Khz);

input clk;

output data_15bit_2Khz;

reg [14:0]data_out_15bit_2Khz;

reg [13:0]buffer_15bit_2Khz;

always@(posedge clk)

begin

buffer_15bit_2Khz<=buffer_15bit_2Khz+1'b1;

if(buffer_15bit_2Khz==13'd4090)

begin

buffer_15bit_2Khz<=0;

data_out_15bit_2Khz=data_out_15bit_2Khz>>1;

if(data_out_15bit_2Khz==16'b0000000000000000)

data_out_15bit_2Khz=16'b0101100100011110;

end

end

assign data_15bit_2Khz=data_out_15bit_2Khz[14:0];

endmodule

QQ:997989815


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM