基于FPGA生成一个2^5-1 2Mbps的伪随机码
 
- UID
- 1023229
- 来自
- 中国
|

基于FPGA生成一个2^5-1 2Mbps的伪随机码
伪随机码的介绍:
伪随机数有一部分遵守一定的规律;另一部分不遵守任何规律。比如“世上没有两片形状完全相同的树叶”,这正是点到了事物的特性,即随机性,但是每种树的叶子都有近似的形状,这正是事物的共性,即规律性。从这个角度讲,你大概就会接受这样的事实了:计算机只能产生伪随机数而不能产生绝对随机的随机数。
在设计伪随机码前要确定码长,从而确定本原多项式,常用的本原多项式见下表所示:

2 、开发环境说明
Xp操作系统下
编译环境:ISE13.2/SP3, ISE(XST)/Synplify 9.0 pro均综合实现通过
仿真环境:ISE13.2/SP3, ISE simulator(ISE)自带的仿真工具)功能和时序仿真成功
3 、verilog代码如下
module PN_code(clk,rst,ena,m_out,load);
input clk,rst,ena;
output m_out,load;
reg m_out,load;
reg [4:0] shift; //5级移位寄存器产生周期为31的序列
always @(posedge clk) begin
if(!rst) begin//初始化
m_out<=1'b0;
load<=1'b0;
shift <= 5'b1111_1;
end
else begin//开始产生序列信号
if(ena) begin
shift<={shift[3:0],shift[0]};
shift[0]<=( shift[1]^shift[4]);//对应本原多项式F(x)=x^5+x^2+1
load<=1'b1;
end
else begin
load<=1'b0;
end
m_out<=shift[4];
end
end
endmodule
说明:
程序中的m序列生成多项式为f(x)=x^5+x^2+1;
rst:复位信号,低电平有效
clk:时钟信号
ena:控制信号,高电平时序列发生器开始工作
m_out:数据信号,输出m伪随机序列
load:控制信号,为高电平时表示伪随机序列开始
4 、verilog激励仿真输入代码如下
module PN_code_tb;
// Inputs
reg clk;
reg rst;
reg ena;
// Outputs
wire m_out;
wire load;
// Instantiate the Unit Under Test (UUT)
PN_code uut (
.clk(clk),
.rst(rst),
.ena(ena),
.m_out(m_out),
.load(load)
);
initial begin
// Initialize Inputs
clk = 0;
rst = 0;
ena = 0;
#40 rst = 1'b1;
#50 ena = 1'b1;
end
always #25 clk = ~clk; //产生2Mbp速率的码字
endmodule
5 、ISE simulator仿真结果如下图所示

来源:风吹思想飘荡的博客 |
|
|
|
|
|