Links:

Home

Contact us

Samples

CORES

PRBS checker 128 bits at a time

 

We will assume we have the generator driving our signal that we want to check.

module prbs_wide_check (
   // Outputs
   error,
   // Inputs
   prbs, clk, reset
   );

  parameter       WIDTH = 128,
                  PN = 7,//not used but good to know
                  TAP1 = 30,
                  TAP2 = 27;

   output [8:0]       error;
   input [WIDTH-1:0]  prbs;
   input              clk, reset;

   reg [8:0]          error;
   reg [WIDTH-1:0]    prbs_state, check, d;//d is a temp variable
   reg                load;
   integer            i;

   always @ (posedge clk)
     if (reset)
       prbs_state <= 1; //anything but teh all 0s case is fine.
     else
       begin
          d = prbs_state; //blocking assignment used on purpose here
          repeat (WIDTH) d = {d,d[TAP1]^d[TAP2]};//again blocking is intentional
          prbs_state <= d;
          check <= prbs ^ prbs_state;
          d = 0;
          for (i=0;i<= d;
          load <= error > 25; //error rate to reload
       end // else: !if(reset)
endmodule // prbs_wide_check

This checker has an automatic reload built in. If you want to have an external load you can 'or' in an additional external load. Or you can remove the automatic reload and only reload based on an external signal.

The reset block is only for mostly for simulations. With the auto load, the checker will automatically align to the incoming data. The calculations for the error signals and reload have a few pipe stages that are optional depending on the speed you are running at.