一个生成任意周期m序列的程序,但是不明白到底是怎么实现的,望高手指点!

seq_out: out std_logic);
.............

process(clk)
  variable seq_gen:std_logic_vector(3 downto 0):="0011";---“周期是15的m序列 本原多项式的后4位(10011)”
  variable seq_int : std_logic_vector(3 downto 0); ---任意输入序列(初始状态)
  begin
   seq_int:="1001";
   if rising_edge(clk)
                  if seq_int(3)='1'  then
                        seq_int:=(seq_int(2 downto 0) & '0') xor seq_gen;
                  else
                         seq_int:=seq_int(2 downto 0)& '0';
                  end if;
              seq_out<=seq_int(1);
   end if;
  end process;
................

根据结果,可以输出m序列,但是就是不明白怎么生成的,通信原理中是用移位寄存器来实现的,是不是还有其他的方法?请高手指点!
我也来说两句 查看全部回复

最新回复

  • shanki_pm (2008-8-19 00:06:18)

    程序的过程可以看懂,但是原理不懂。
  • cryinrain_cug (2008-8-19 00:09:33)

    回头该写为verilog试试看看
  • shanki_pm (2008-8-19 00:20:33)

    可是我不会verilog啊
  • shanki_pm (2008-8-19 00:23:37)

    可以任意改变seq_int    seq_gen的位数,我试过都是可以的。
  • ruiruio4 (2008-8-19 11:19:29)

    你去写写seq_out的序列输出发现,的确是以01001_10101_11100这样的周期输出,回到seq_int:="1001";的状态
    原理嘛,说不上来,这个好像要随seq_gen 来随意变化的(即产生其他的序列),规律或原理真的搞不懂,为什么就要、就可以因为这样就可以实现想要的周期?
  • 下雨天儿 (2008-8-19 11:51:20)

    不懂他的原理
  • yadog (2008-8-19 13:02:24)

    吓我一跳,还任意周期
    对于nbit的m序列,周期就是2^n - 1,否则就不叫m序列

    去看下m序列的定义吧,baidu“m序列”或伪随机序列能找到答案
  • shanki_pm (2008-8-19 23:58:02)

    ..我当然知道周期是2^n - 1,(任意只是对n的值是任意而言)只是想说明这种方法跟移位寄存器产生的结果是一样的。我是问问程序,您要是知道为什么这样可以产生m序列就请指点一下,谢谢关注!
  • sl418 (2008-8-25 11:09:16)

    按照代码描写的,画出原理图,就可以知道是怎么回事了,我刚才试过了