日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于Verilog语言的伪随机码的编写

發布時間:2023/12/2 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于Verilog语言的伪随机码的编写 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

筆者在開始編寫的時候,首先上網查了很多的資料,對偽隨機碼算是有了一定的了解,但是相關的程序代碼卻沒有找到多少,或許是太簡單,亦或許是涉及到商業,所以網上資源很少,沒辦法筆者又再次閱讀了有關偽隨機碼的資料。偽隨機碼又稱偽隨機序列,它是具有類似于隨機序列基本特性的確定序列。通常廣泛應用二進制序列,因此我們僅限于研究二進制序列。二進制獨立隨機序列在概率論中一般稱為貝努利(Bernoulli)序列,它由兩個元素(符號)0, 1或1, -1組成。序列中不同位置的元素取值相互獨立取0取1的概率相等等于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和0100111的2Khz和32Khz的偽隨機碼,所以筆者首先編寫碼元序列為010110010001111,速率為32Khz的偽隨機碼。請注意,碼元序列的方向和速率。在理解其速率時,著實讓筆者頭疼了一番,最終筆者明白了其速率是指一位編碼的速率。

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

module wsjm(clk,data_15bit_2Khz,data_15bit_32Khz,data_7bit_2Khz,data_7bit_32Khz);

input clk;

?

output data_15bit_2Khz;

output data_15bit_32Khz;

output data_7bit_2Khz;

output data_7bit_32Khz;

?

reg [14:0]data_out_15bit_2Khz;

reg [14:0]data_out_15bit_32Khz;

?

reg [6:0]data_out_7bit_2Khz;

?

reg [6:0]data_out_7bit_32Khz;

?

?

?

reg [13:0]buffer_15bit_2Khz;

?

reg [13:0]buffer_15bit_32Khz;

?

reg [13:0]buffer_7bit_2Khz;

?

reg [13:0]buffer_7bit_32Khz;

?

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

?

always @(posedge clk)

?

begin

?

buffer_15bit_32Khz<=buffer_15bit_32Khz+1'b1;

?

if(buffer_15bit_32Khz==10'd262)

?

begin

?

buffer_15bit_32Khz<=0;

?

data_out_15bit_32Khz=data_out_15bit_32Khz>>1;

?

if(data_out_15bit_32Khz==16'b0000000000000000)

?

data_out_15bit_32Khz=16'b0101100100011110;

?

end

?

end

?

always@(posedge clk)

?

begin

?

buffer_7bit_2Khz<=buffer_7bit_2Khz+1'b1;

?

if(buffer_7bit_2Khz==13'd4090)

?

begin

?

buffer_7bit_2Khz<=0;

?

data_out_7bit_2Khz=data_out_7bit_2Khz>>1;

?

if(data_out_7bit_2Khz==8'b00000000)

?

data_out_7bit_2Khz=8'b01001110;

?

end

?

end

?

always @(posedge clk)

?

begin

?

buffer_7bit_32Khz<=buffer_7bit_32Khz+1'b1;

?

if(buffer_7bit_32Khz==10'd262)

?

begin

?

buffer_7bit_32Khz<=0;

?

data_out_7bit_32Khz=data_out_7bit_32Khz>>1;

?

if(data_out_7bit_32Khz==8'b00000000)

?

data_out_7bit_32Khz=8'b01001110;

?

end

?

end

?

?

?

assign data_15bit_2Khz=data_out_15bit_2Khz[14:0];

?

assign data_15bit_32Khz=data_out_15bit_32Khz[14:0];

?

assign data_7bit_2Khz=data_out_7bit_2Khz[6:0];

?

assign data_7bit_32Khz=data_out_7bit_32Khz[6:0];

?

?http://www.cnblogs.com/shihuasheng1990/archive/2012/01/01/2309607.html

轉載于:https://www.cnblogs.com/fenleixinxi/archive/2012/01/01/2309609.html

總結

以上是生活随笔為你收集整理的基于Verilog语言的伪随机码的编写的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。