Skip to content

Instantly share code, notes, and snippets.

@DanielChuDC
Created March 8, 2023 13:34
Show Gist options
  • Save DanielChuDC/70ca348ebb78f5bd7fe5e37f5430d84b to your computer and use it in GitHub Desktop.
Save DanielChuDC/70ca348ebb78f5bd7fe5e37f5430d84b to your computer and use it in GitHub Desktop.
LSFR Verilog Implementation example
module lfsr(
input clk,
input rst,
output reg [3:0] rand_out,
output reg [3:0] LED
);
reg [3:0] lfsr_reg;
always @(posedge clk or posedge rst) begin
if (rst) begin
lfsr_reg <= 4'b0001; // set initial value of LFSR
end else begin
lfsr_reg <= {lfsr_reg[2:0], lfsr_reg[3] ^ lfsr_reg[2]};
// feedback taps at bits 3 and 2, shift left
end
end
assign rand_out = lfsr_reg;
assign LED = lfsr_reg;
endmodule
@DanielChuDC
Copy link
Author

// if you do not have separate reset signal 

module lfsr(
    input clk,
    output wire [3:0] LED
);

reg [3:0] lfsr_reg;
reg [25:0] counter = 0; // 25-bit counter for 100 million cycles = 1 second

always @(posedge clk or negedge clk) begin
    if (!clk) begin
        lfsr_reg <= 4'b0001; // set initial value of LFSR
        counter <= 0; // reset counter
    end else begin
        lfsr_reg <= {lfsr_reg[2:0], lfsr_reg[3] ^ lfsr_reg[2]};
        // feedback taps at bits 3 and 2, shift left
        counter <= counter + 1; // increment counter
        if (counter == 100_000_000) begin // generate new random number every second
            counter <= 0; // reset counter
        end
    end
end

assign LED = lfsr_reg;

endmodule

@DanielChuDC
Copy link
Author

DanielChuDC commented Mar 8, 2023

module lfsr (
  output reg [3:0] LED,
  input clk,
  input rst
);

  reg [3:0] lfsr_reg;
  wire feedback;

  assign feedback = ~(lfsr_reg[3] ^ lfsr_reg[2]);

  always @(posedge clk, posedge rst) begin
    if (rst) begin
      lfsr_reg <= 4'b0001; // set initial value of LFSR
      LED <= lfsr_reg; // update LED output
    end else begin
      lfsr_reg <= {lfsr_reg[2:0], feedback}; // update LFSR
      LED <= lfsr_reg; // update LED output
    end
  end

endmodule

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment