伪随机码(verilog)


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


简介

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

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

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

在这里插入图片描述

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

3位伪随机码

用3级线性反馈移位寄存器生成,会产生7个随机数循环。其电路示意图如下,并根据电路示意图给出状态转移图。
在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

4位伪随机码

在这里插入图片描述

代码如下:

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

在这里插入图片描述

伪随机(Pseudo Random Code,简称PRC)是一种通过特定算法生成的在统计学上具有随机性的序列。在信息通信和电子系统中,PRC常常被用于信号调制、信道编、频谱扩展以及通信系统的测试和测量等领域。 在Verilog语言中,我们可以使用算法实现伪随机的生成。常见的伪随机生成算法有线性反馈移位寄存器(Linear Feedback Shift Register,简称LFSR)和非线性反馈移位寄存器(Non-linear Feedback Shift Register,简称NLFSR)等。 LFSR是基于寄存器和反馈逻辑电路的简单算法,其特点是实现简单且计算速度快。它可以通过在每次位移时将某几位进行异或操作,生成新的伪随机。代中,我们可以使用寄存器存储当前的序列,通过异或操作计算出下一个序列,并输出给下一级模块使用。 而NLFSR是一种更加复杂的算法,它在计算下一个序列时,还会引入非线性操作,使得伪随机更加随机。在Verilog中实现NLFSR需要利用逻辑门电路和寄存器相结合的方式,以及根据具体的NLFSR算法构建代。 有了伪随机,我们可以在通信系统中进行很多应用,例如差分相移键控调制中的扩谱传输,通过将信号与伪随机进行异或操作来增加带宽,提高抗干扰性能;在通信中进行信号的加密和解密,通过共享相同的伪随机序列,实现秘密通信等。 总而言之,伪随机Verilog中的实现可以利用LFSR或NLFSR算法来生成,通过逻辑门电路和寄存器的组合,生成具有随机性质的序列。它在通信系统中有着广泛的应用,可用于信号调制、信道编、频谱扩展以及通信系统的测试和测量等方面。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小verifier

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值