Verilog语言生成4位伪随机码
Verilog語言生成4位偽隨機碼
- 關(guān)于偽隨機碼的定義及基本特性
- 本原多項式
- 代碼
關(guān)于偽隨機碼的定義及基本特性
偽隨機碼又稱偽隨機序列,它是具有類似于隨機序列基本特性的確定序列。通常廣泛應(yīng)用二進制序列,因此我們僅限于研究二進制序列。二進制獨立隨機序列在概率論中一般稱為貝努利(Bernoulli)序列,它由兩個元素(符號)0, 1或1, -1組成。序列中不同位置的元素取值相互獨立取0取1的概率相等等于1/2:我們簡稱此種系列為隨機系列。
隨機序列具有以下三個基本特性:
1)在序列中“0”和“1”出現(xiàn)的相對頻率各為1/2。
2)序列中連0或連1稱為游程連0或連1的個數(shù)稱為游程的長度,序列中長度為1的游程數(shù)占游程總數(shù)的1/2;長度為2的游程數(shù)占游程總數(shù)的1/4;長度為3的游程數(shù)占游程總數(shù)的1/8;長度為n的游程數(shù)占游程總數(shù)的1/2n(對于所有有限的n)。此性質(zhì)我們簡稱為隨機序列的游程特性。
3)如果將給定的隨機序列位移任何個元素,則所得序列的和原序列的對應(yīng)的元素有一半相同,一半不同。
如果確定序列近似滿足以上三個特性則稱此確定序列為偽隨機序列。
————————————————
原文鏈接:https://blog.csdn.net/qq_40532956/article/details/80109534
本原多項式
在設(shè)計偽隨機碼前要確定碼長,從而確定本原多項式,常用的本原多項式見下表所示:
m序列周期為2n-1,由移位寄存器和異或門構(gòu)成,n表示移位寄存器的個數(shù)。
另外,在查閱資料的過程中還了解到移位寄存器的相關(guān)知識,可以參考如下的博客:
https://blog.csdn.net/qq_23947237/article/details/90238787
其中對于偽隨機碼、m序列、移位寄存器和仿真內(nèi)容進行了較為詳細(xì)的梳理和總結(jié)。
代碼
Verilog語言和通信相關(guān)的偽隨機碼知識都是筆者第一次接觸,在長時間的查閱相關(guān)資料學(xué)習(xí)基礎(chǔ)知識和應(yīng)用方法后決定首先選擇碼長為4的編碼進行練習(xí)。
m序列是最常用的偽隨機序列,是最長線性反饋移位寄存器序列的簡稱。如果是4級的寄存器(下面都假設(shè)n=4),那么最長周期是24-1=15。
m序列的特征多項式必須是4次的本原多項式。必須滿足條件:
1、既約的;
2、可整除x15+1,這里15=24-1;
3、不可整除x^q+1,q<15。
由上表,已知4次的本原多項式為x^4+x+1,那么反饋邏輯就是a4 = a1 + a0(mod 2)。
然后賦予初狀態(tài)為0001,那么由線性反饋邏輯和初狀態(tài)就能決定m序列了。
編譯環(huán)境:QuartusII 15.0
仿真環(huán)境:Modelsim Altera 10.3d(與Quartus15.0適配版)
module testcode(clk,rst_n,out_data);
input clk;
input rst_n;
output reg out_data; //輸出的偽隨機碼
reg [3:0]temp = 4’b0001;
always @(posedge clk or negedge rst_n)
begin
if(!rst_n) //復(fù)位信號無效時
out_data <= 1’b0;
else begin
temp[0] <= temp[2] + temp[3]; //t0=t2+t3
temp[3:1] <= temp[2:0]; //t3-1=t2-0,即右移一位
out_data <= temp[3]; //輸出數(shù)據(jù)為t3
end
end
endmodule
仿真程序:
`timescale 1ns/1ns
module testcode_tb;
reg clk,rst_n;
wire out_data;
testcode testcode_0(.clk(clk),
.rst_n(rst_n),
.out_data(out_data));
initial clk = 1;
always #25 clk = ~clk;
initial begin
rst_n <= 1’b0;
#200;
rst_n <= 1’b1;
#5000;
$stop;
end
仿真效果:
從仿真效果來看,基本實現(xiàn)了預(yù)計的效果。
但是在整個項目工程的書寫過程中仍有許多磕磕碰碰,且對移位寄存器的工作原理還不算熟知,要繼續(xù)查閱資料后嘗試使用Verilog語言生成更多碼位的偽隨機碼。
總結(jié)
以上是生活随笔為你收集整理的Verilog语言生成4位伪随机码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: minicom/picocom/cute
- 下一篇: MySQL解决方案