基于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

posted @ 2012-01-01 20:51  ant2012  阅读(4375)  评论(2编辑  收藏  举报