Linear Feedback Shift Register is a sequential shift register with combinational feedback logic around it that causes it to pseudo randomly cycle through a sequence of binary values. Feedback around LFSR's shift register comes from a selection of points in the register chain and constitute either XORing or XNORing these points to provide point back into the register. The LFSR basically loops through repetitive sequences of pseudo random values. The maximum length of sequence is (2^n) - 1. Find out VHDL Code Here.
module lfsr (out, clk, rst); output reg [3:0] out; input clk, rst; wire feedback; assign feedback = ~(out[3] ^ out[2]); always @(posedge clk, posedge rst) begin if (rst) out = 4'b0; else out = {out[2:0],feedback}; end endmodule
RTL view of LFSR is given below. Above code is synthisized by Xilinx Vivado tool.
RTL view of Linear Feedback Shift Register |
`timescale 1ns / 1ps module lfsr_tb(); reg clk_tb; reg rst_tb; wire [3:0] out_tb; initial begin clk_tb = 0; rst_tb = 1; #15; rst_tb = 0; #200; end always begin #5; clk_tb = ~ clk_tb; end lfsr DUT(out_tb,clk_tb,rst_tb); endmodule
Above Test Bench code is simulated and waveform result is shown below.
Waveform of LFSR Test Bench |
good
ReplyDelete