| // A simple circuit that can be used to detect brownouts and other hardware issues | 
 |  | 
 | module top ( | 
 | 	input clk, | 
 | 	output LED1, | 
 | 	output LED2, | 
 | 	output LED3, | 
 | 	output LED4, | 
 | 	output LED5 | 
 | ); | 
 | 	reg [7:0] reset_counter = 0; | 
 | 	reg resetn = 0; | 
 |  | 
 | 	always @(posedge clk) begin | 
 | 		reset_counter <= reset_counter + 1; | 
 | 		resetn <= resetn | &reset_counter; | 
 | 	end | 
 |  | 
 | 	reg error, rdmode, rdfin; | 
 |  | 
 | 	reg [31:0] scratchpad [0:1023]; | 
 | 	reg [31:0] xorshift32_state; | 
 | 	reg [9:0] index; | 
 |  | 
 | 	reg [31:0] next_xorshift32_state; | 
 |  | 
 | 	always @* begin | 
 | 		next_xorshift32_state =      xorshift32_state ^ (     xorshift32_state << 13); | 
 | 		next_xorshift32_state = next_xorshift32_state ^ (next_xorshift32_state >> 17); | 
 | 		next_xorshift32_state = next_xorshift32_state ^ (next_xorshift32_state <<  5); | 
 | 	end | 
 |  | 
 | 	always @(posedge clk) begin | 
 | 		xorshift32_state <= &index ? 123456789 : next_xorshift32_state; | 
 | 		index <= index + 1; | 
 |  | 
 | 		if (!resetn) begin | 
 | 			xorshift32_state <= 123456789; | 
 | 			index <= 0; | 
 | 			error <= 0; | 
 | 			rdmode <= 0; | 
 | 			rdfin <= 0; | 
 | 		end else | 
 | 		if (!rdmode) begin | 
 | 			scratchpad[index] <= xorshift32_state; | 
 | 			rdmode <= &index; | 
 | 		end else begin | 
 | 			if (scratchpad[index] != xorshift32_state) error <= 1; | 
 | 			rdfin <= rdfin || &index; | 
 | 		end | 
 | 	end | 
 |  | 
 | 	wire ok = resetn && rdfin && !error; | 
 | 	assign LED1 = 0, LED2 = error, LED3 = 0, LED4 = error, LED5 = ok; | 
 | endmodule |