m序列详解及VHDL语言实现

目录

  • m序列的产生
    • 简介
    • 线性反馈移位寄存器
  • VHDL语言实现
    • 代码
    • 仿真图

m序列的产生

简介

m序列是最长线性反馈移位寄存器序列的简称,是由带线性反馈的移位寄存器产生的周期最长的序列。下图是一个4级线性反馈移位寄存器。

4级线性反馈移位寄存器假若初始状态为 ( a 3 , a 2 , a 1 , a 0 ) = ( 1 , 0 , 0 , 0 ) (a_3,a_2,a_1,a_0)=(1,0,0,0) a3,a2,a1,a0=(1,0,0,0),那么在移位一次时,由 a 3 a_3 a3 a 0 a_0 a0模2相加产生新的输入,放到寄存器 a 3 a_3 a3中;寄存器 a 2 a_2 a2值更新为寄存器 a 3 a_3 a3原来的值;寄存器 a 1 a_1 a1值更新为寄存器 a 2 a_2 a2原来的值;寄存器 a 0 a_0 a0值更新为寄存器 a 1 a_1 a1原来的值;输出为寄存器 a 0 a_0 a0原来的值。移位一次后,新的状态变为 ( a 3 , a 2 , a 1 , a 0 ) = ( 1 , 1 , 0 , 0 ) (a_3,a_2,a_1,a_0)=(1,1,0,0) a3,a2,a1,a0=(1,1,0,0)。这样移位15次后又回到初始状态(1,0,0,0)。状态更新如图所示。
m序列详解及VHDL语言实现_第1张图片如果初始状态为全“0”状态,则移位后得到的仍是全“0”状态。这就意味着在这种反馈移位寄存器中应该避免出现全“0”状态,否则移位寄存器的状态将不会改变。因为4级移位寄存器共有 2 4 = 16 2^4=16 24=16可能的状态。除全“0”状态外,只剩下15种状态可用。这就是说,由任何4级反馈移位寄存器产生的序列的周期最长为15。一般来说,一个n级线性反馈移位寄存器可能产生的最长周期等于 ( 2 n − 1 ) (2^n-1) 2n1,将这种最长的序列称为最长线性反馈移位寄存器序列,简称m序列

线性反馈移位寄存器

一般的线性反馈移位寄存器原理方框图如下图所示,图中各级寄存器的状态用 a i a_i ai表示, a i a_i ai=0或1,i为整数。反馈线的连接状态用 c i c_i ci表示, c i c_i ci表示此线接通(参加反馈); c i c_i ci=0表示此线断开。反馈线的连接状态不同,就可能改变此移位寄存器输出序列的周期p。
m序列详解及VHDL语言实现_第2张图片上文指出, c i c_i ci的取值决定了移位寄存器的反馈连接和序列的结构,所以 c i c_i ci是一个很重要的参量。现将它用下列方程表示:
f ( x ) = c 0 x + c 1 x 2 + ⋯ + c n x n = ∑ i = 0 n c i x i f(x) = c_0x +c_1 x^2 + {\cdots} + c_nx^n = \sum_{i=0}^n c_ix^i f(x)=c0x+c1x2++cnxn=i=0ncixi
这一方程成为特征方程(或特征多项式)。式中 x i x^i xi仅指明其系数代表的 c i c_i ci的值, x x x本身并无实际意义,也不想要计算 x x x的值。例如特征方程
f ( x ) = 1 + x + x 4 f(x) = 1 + x +x^4 f(x)=1+x+x4
则它仅表示 x 0 x^0 x0 x 1 x^1 x1 x 4 x^4 x4的系数 c 0 c_0 c0= c 1 c_1 c1= c 4 c_4 c4=1,其余的 c i c_i ci为0。按照这一特征方程构成的反馈移位寄存器如图所示。
m序列详解及VHDL语言实现_第3张图片

VHDL语言实现

代码

程序用于实现特征方程
f ( x ) = 1 + x + x 4 f(x) = 1 + x +x^4 f(x)=1+x+x4
程序中的组合逻辑产生下一状态的最高位,即a_3;时序逻辑用于生成下一个状态,并输出最低位。

----------------------------------------------------------------------------------
-- Company: 
-- Engineer: 
-- 
-- Create Date:    17:29:15 01/29/2019 
-- Design Name: 
-- Module Name:    linear_fsr - Behavioral 
-- Project Name: 
-- Target Devices: 
-- Tool versions: 
-- Description: 特征方程f(x) = 1 + x + x^4
--
-- Dependencies: 
--
-- Revision: 
-- Revision 0.01 - File Created
-- Additional Comments: 
--
----------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;


entity linear_fsr is
	port(
		clk            : in std_logic;
		rst_n          : in std_logic;
		
		data_o         : out std_logic
	);
end linear_fsr;

architecture Behavioral of linear_fsr is

	signal sr        : std_logic_vector(3 downto 0);
	signal tmp       : std_logic;
	
begin

	tmp <= sr(3) xor sr(0);
	
	process(clk,rst_n)
	begin
		if rst_n = '0' then
			sr <= "1000";
			data_o <= '0';
		elsif rising_edge(clk) then
			sr <= tmp & sr(3 downto 1);
			data_o <= sr(0);
		end if;
	end process;

end Behavioral;


仿真图

程序仿真图如下所示
m序列详解及VHDL语言实现_第4张图片信号sr表示移位寄存器中各个寄存器内部的值。复位时,移位寄存器的初始状态为1000。当复位键拉高之后,在每一个时钟上升沿,移位寄存器内部寄存器值改变,并产生一个输出。对比仿真图与理论推导,结果一致。

你可能感兴趣的:(m序列详解及VHDL语言实现)