不爱水的鱼

基于FPGA的m序列产生

0
阅读(2132)

m序列产生

利用FPGA产生一路m伪随机序列,使用verilog HDL语言编写代码,

  //INIT_VAL 移位寄存器的初始值

  //N 移位寄存器的长度

  //C_i各级移位寄存器的系数

//通过修改这三个参数可以得到不同长度的m序列

module m_N #(parameter INIT_VAL = 4'B1111,N = 4,C_i = 4'o23)

(clk,rst_n,EN_n,status,PN);

//INPUT CLK

input clk;//时钟信号

input rst_n;//复位信号

input EN_n;//使能信号,低有效

//OUTPUT

output PN;//PN序列输出端

output reg status;//状态端口,用于初始化和供其他模块查询其状态

reg[N-1:0] M_N;//移位寄存器

parameter FREE = 1'B0,

READY = 1'B1;

assign PN = ((status == READY) && (EN_n == 1'b0) ) ? M_N[0] : 1'B0; //在使能信号EN_n 为低时,输出m序列

always@(posedge clk or negedge rst_n)

begin

if(!rst_n)begin //复位处理

M_N <= INIT_VAL;

status <= READY;

end

else begin

case(status)

READY:begin

if(EN_n == 1'b0)begin

M_N <= {^{M_N&C_i},M_N[N-1:1]}; //减位异或移位,并反馈到M_N最左端

end

end

default:begin

status <= READY;

M_N <= INIT_VAL;

end

endcase

end

end

endmodule

Baidu
map