基于FPGA的m序列产生
0赞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