一、定义
m序列:最长线性反馈移位寄存器序列的简称。是一种反馈移位型结构的电路,由n个移位寄存器加异或反馈网络组成,反馈多项式为本原多项式,其最大序列长度 M = 2 n − 1 M = 2^n-1 M=2n−1。是一种伪随机序列、伪噪声码。
伪随机序列:不能预先确定但可以重复实现的序列。
本原多项式:
若反馈移位寄存器的特征多项式为本原多项式,则移位寄存器能产生m序列。
若一个n次多项式f(x)满足:
1)既约的:不能再因式分解;
2)可整除( x m + 1 x^m + 1 xm+1), M = 2 n − 1 M = 2^n-1 M=2n−1;
3)除不尽 ( x q + 1 ) (x^q + 1) (xq+1), q < m;
则称:f(x)为本原多项式。
序列发生器一般有两种结构形式:一种是反馈移位型,另一种是计数型。计数型序列发生器由计数器和组合输出网络两部分组成,序列码从组合输出网络输出。
二、原理
递推方程:
特征方程:
三、代码实现
`timescale 1ns / 1ps
//
// Design Name:
// Module Name: m_sequence
// Description: 参数化m序列发生器设计
//
module m_sequence#(
parameter POLY = 8'b10001110, //以x8+x4+x3+x2+1为例
parameter LEN = 'd8
)
(
input clk,
input rst_n,
output m_seq
);
reg [LEN-1 : 0] shift_reg;
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
begin
// shift_reg <= (1 << LEN) - 1'b1;
shift_reg <= ~'b0;
end
else
begin
// shift_reg[7] <= (shift_reg[0] & POLY[7]) ^
// (shift_reg[1] & POLY[6]) ^
// (shift_reg[2] & POLY[5]) ^
// (shift_reg[3] & POLY[4]) ^
// (shift_reg[4] & POLY[3]) ^
// (shift_reg[5] & POLY[2]) ^
// (shift_reg[6] & POLY[1]) ^
// (shift_reg[7] & POLY[0]);
// shift_reg[6 : 0] <= shift_reg[7 : 1];
shift_reg[0] <= ^(shift_reg & POLY);
shift_reg[LEN-1:1] <= shift_reg;
end
end
assign m_seq = shift_reg[LEN-1];
// assign m_seq = shift_reg[0];
endmodule
Testbench文件:文章来源:https://www.toymoban.com/news/detail-722940.html
`timescale 1ns / 1ps
module m_sequence_tb();
// M_series Parameters
parameter PERIOD = 10;
//parameter M_len = 8;
// M_series Inputs
reg clk = 0 ;
reg rst_n = 1 ;
// M_series Outputs
wire m_seq ;
initial
begin
forever #(PERIOD/2) clk=~clk;
end
m_sequence #(
// .POLY (8'b10001110),
// .LEN ( M_len )
)
u_M_sequence (
.clk ( clk ),
.rst_n ( rst_n ),
.m_seq ( m_seq )
);
initial
begin
#(PERIOD*2) rst_n = 0;
#(PERIOD*2) rst_n = 1;
#(PERIOD*100)
$finish;
end
endmodule
仿真结果:
文章来源地址https://www.toymoban.com/news/detail-722940.html
到了这里,关于Verilog | M序列发生器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!