Wednesday, 26 December 2012

16 bit LINEAR FEEDBACK SHIFT REGISTER


module lfsr16(ic,start,clk,q); // main module for lfsr
  input [15:0]ic;
  input start,clk;
  output [15:0]q;
  wire s;
  wire [15:0]lfs;
  assign s=lfs[15]^lfs[10]^lfs[9]^lfs[5];
  dff dff1(lfs[15],start?ic[15]:s,clk);
  dff dff2(lfs[14],start?ic[14]:lfs[15],clk);
  dff dff3(lfs[13],start?ic[13]:lfs[14],clk);
  dff dff4(lfs[12],start?ic[12]:lfs[13],clk);
  dff dff5(lfs[11],start?ic[11]:lfs[12],clk);
  dff dff6(lfs[10],start?ic[10]:lfs[11],clk);
  dff dff7(lfs[9],start?ic[9]:lfs[10],clk);
  dff dff8(lfs[8],start?ic[8]:lfs[9],clk);
  dff dff9(lfs[7],start?ic[7]:lfs[8],clk);
  dff dff10(lfs[6],start?ic[6]:lfs[7],clk);
  dff dff11(lfs[5],start?ic[5]:lfs[6],clk);
  dff dff12(lfs[4],start?ic[4]:lfs[5],clk);
  dff dff13(lfs[3],start?ic[3]:lfs[4],clk);
  dff dff14(lfs[2],start?ic[2]:lfs[3],clk);
  dff dff15(lfs[1],start?ic[1]:lfs[2],clk);
  dff dff16(lfs[0],start?ic[0]:lfs[1],clk);
  assign q=lfs;
endmodule

module dff (Q, D, Clock); //sub module- d flip flop
  output Q;
  input D;
  input Clock;
  reg Q;
  always @(posedge Clock)
  begin
    Q <= D;
  end
endmodule


No comments:

Post a Comment