概述
编写之初,笔者并没有太大的自信,因为笔者对伪随机码并没有太多的认识。但老师有命,笔者不得不进行编写,同时笔者也特别希望能有个项目来锻炼自己。
笔者在开始编写的时候,首先上网查了很多的资料,对伪随机码算是有了一定的了解,但是相关的程序代码却没有找到多少,或许是太简单,亦或许是涉及到商业,所以网上资源很少,没办法笔者又再次阅读了有关伪随机码的资料。伪随机码又称伪随机序列,它是具有类似于随机序列基本特性的确定序列。通常广泛应用二进制序列,因此我们仅限于研究二进制序列。二进制独立随机序列在概率论中一般称为贝努利(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的伪随机码,所以笔者首先编写码元序列为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
转载于:https://www.cnblogs.com/ant2012/archive/2012/01/01/2309607.html
最后
以上就是冷酷背包为你收集整理的基于Verilog语言的伪随机码的编写(原创)的全部内容,希望文章能够帮你解决基于Verilog语言的伪随机码的编写(原创)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复