// 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