伪随机码(verilog)

文章目录

  • 简介
  • 3位伪随机码
  • 4位伪随机码

声明:本文所使用的的所有代码均已编译并仿真通过,仿真结果附于文中。
注:更多精彩请看: 面试常问的verilog代码汇总 一文


简介

伪随机序列又称为伪随机码,是一种人工生成的周期序列,可以作为数字通信中的一个信号源,用于检测数字通信系统错码的概率,即误码率。

产生伪随机码的方式有很多,通常使用线性反馈移位寄存器(LFSR)来产生。所谓线性反馈,是指反馈函数中仅包含模 2 加运算(也就是逻辑异或),而不含非线性运算。由线性反馈寄存器产生的周期最长的二进制序列称为最大长度线线性反馈寄存器序列,简称m序列。如果移位寄存器长度为n,则m序列的周期是(2^n -1),没有全0的状态。

伪随机码发生器的初始状态由微处理器通过SEED寄存器发出。seed不能为全0的状态 ,因为0^0=0,会陷入0的死循环 。

伪随机码(verilog)_第1张图片

上图中,C0…Cn表示反馈系数,与本原多项式中的各项系数相对应。如果反馈系数Ci为1则表示参与反馈,为0则表示不参与反馈,且 因为m 序列是由循环序列发生器产生的,所以 C0=Cn=1。

3位伪随机码

用3级线性反馈移位寄存器生成,会产生7个随机数循环。其电路示意图如下,并根据电路示意图给出状态转移图。
伪随机码(verilog)_第2张图片
伪随机码(verilog)_第3张图片

module fake_rand3(dout,clk,rst_n);
  output dout;
  input  clk,rst_n;
  reg dout;
  reg [2:0]q;
  
  always@(posedge clk)begin
    if(!rst_n)begin
      q <= 3'b111;//不能复位成全0 
      dout <= 0;
    end
    else begin
      q[2] <= q[1];
      q[1] <= q[2]^q[0];
      q[0] <= q[2];
      dout <= q[2];
    end    
  end  
endmodule

`timescale 1ns/1ps
module fake_rand3_tb;
  wire dout;
  reg  clk,rst_n;
   
  fake_rand3 dut(.dout(dout),.clk(clk),.rst_n(rst_n));
  
  initial begin 
    clk <= 0;
    forever begin
      #5 clk <= !clk;
    end
  end
  initial begin 
    #10 rst_n <= 0;
    repeat(10) @(posedge clk);
    rst_n <= 1;
  end 
endmodulee

伪随机码(verilog)_第4张图片

4位伪随机码

伪随机码(verilog)_第5张图片

代码如下:

module m_gen5(clk,rst_n,dout);
    input    clk,rst_n;
    output   dout;
    reg   [3:0]men;
    reg      dout;
    
    always@(posedge clk or negedge rst_n) begin
       if(!rst_n) begin
          dout <= 0;
          men <= 4'b0001;//注意不能复位成全0,全0电路就会进入死循环 
       end
      else begin 
          men[2:0] <= men[3:1];//左移1位
          men[3] <= men[0] ^ men[3];//模2加
          dout <= men[0];
        end
    end   
endmodule

`timescale 1ns/1ps
module m_gen5_tb;
  wire dout;
  reg  clk,rst_n;
   
  m_gen5 dut(.dout(dout),.clk(clk),.rst_n(rst_n));
  
  initial begin 
    clk <= 0;
    forever begin
      #5 clk <= !clk;
    end
  end
  initial begin 
    #10 rst_n <= 0;
    repeat(10) @(posedge clk);
    rst_n <= 1;
  end 
endmodule

伪随机码(verilog)_第6张图片

你可能感兴趣的:(verilog)