PN15伪随机码-多bit输出

每个时钟输出15个bit,m序列,本源多项式为x15+x14+1

原理图:

代码为:

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date: 2024/10/16 17:00:57
// Design Name: 
// Module Name: LFSR_PN15
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////


module LFSR_PN15 (
    input clk,
    input reset,
    output reg [14:0] LFSR = 15'b00000_000000_11111,
    output reg [14:0] PN_out,
    output reg [31:0] PN_OUT_COUNTER
);

always @(posedge clk) begin
    if (reset)begin
        LFSR <= 15'b00000_000000_11111;  // 同步复位
        PN_OUT_COUNTER<=0;
    end else begin
        LFSR[14] <= LFSR[13] ^ LFSR[14];  // 反馈位移入最低位
        LFSR[13] <= LFSR[12] ^ LFSR[13];
        LFSR[12] <= LFSR[11] ^ LFSR[12];
        LFSR[11] <= LFSR[10] ^ LFSR[11];
        LFSR[10] <= LFSR[9] ^ LFSR[10];
        LFSR[9] <= LFSR[8] ^ LFSR[9];
        LFSR[8] <= LFSR[7] ^ LFSR[8];
        LFSR[7] <= LFSR[6] ^ LFSR[7];
        LFSR[6] <= LFSR[5] ^ LFSR[6];
        LFSR[5] <= LFSR[4] ^ LFSR[5];
        LFSR[4] <= LFSR[3] ^ LFSR[4];
        LFSR[3] <= LFSR[2] ^ LFSR[3];
        LFSR[2] <= LFSR[1] ^ LFSR[2];
        LFSR[1] <= LFSR[0] ^ LFSR[1];
        LFSR[0] <= LFSR[13] ^ LFSR[14] ^ LFSR[0];  // 最高位反馈移位
        PN_OUT_COUNTER<=PN_OUT_COUNTER+1;
    end
    PN_out <= LFSR;
end

endmodule
testbench代码:

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date: 2024/10/17 11:04:15
// Design Name: 
// Module Name: tb_LFSR_PN15
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////
`timescale 1ns / 1ps

module tb_LFSR_PN15;

// 信号定义
reg clk;
reg reset;
wire [14:0] LFSR;
wire [14:0] PN_out;
wire [31:0] PN_OUT_COUNTER;

// 实例化待测模块 LFSR_PN15
LFSR_PN15 uut (
    .clk(clk),
    .reset(reset),
    .LFSR(LFSR),
    .PN_out(PN_out),
    .PN_OUT_COUNTER(PN_OUT_COUNTER)
);

// 时钟生成,每10ns周期
initial begin
    clk = 0;
    forever #5 clk = ~clk;  // 10ns周期,时钟每半周期翻转一次
end

// 测试过程
initial begin
    // 初始状态,复位信号高电平有效
    reset = 1;
    #20; // 保持复位20ns
    
    // 取消复位
    reset = 0;
    
    // 仿真运行1000ns,观察输出
    #1000;
    
    // 结束仿真
    $finish;
end

// 显示信号的变化
initial begin
    $display("Starting testbench...");
    $monitor("Time: %0t | LFSR: %b | PN_out: %b", $time, LFSR, PN_out);
end

endmodule


单bit连续15位输出和每个时钟输出15bit,验证结果保持一致!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值