首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于FPGA生成一个2^5-1 2Mbps的伪随机码

基于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仿真结果如下图所示


来源:风吹思想飘荡的博客
记录学习中的点点滴滴,让每一天过的更加有意义!
返回列表