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.