blob: a9229a4001fdf50ce444df375143e37464dc0c38 [file] [log] [blame]
// Ross Thompson
// September 24, 2019
// Oklahoma State University
// Original work by Kurt Rooks Nov 14, 2011.
// Translated to verilog by Ross Thompson
// theory of operation
// Areset is an asynchronous reset which needs to be synced to a clock clk.
// But areset needs to be able to reset any downstream flip flops with an
// asynchronous reset without a clock. This works by resetting both registers.
// Because they are both asynchronous reset registers the output reset_out is
// immediately pulled high. When areset is pulled low, the first flip flop
// may go metastable but is synched by ff_2. Then after another clock period
// reset_out will go low.
module arrs (output reset_out,
input areset,
input clk);
logic n1, n2;
flopenr #(1) ff_1(.clk(clk),
.reset(areset),
.en(1'b1),
.d(1'b1),
.q(n1));
flopenr #(1) ff_2(.clk(clk),
.reset(areset),
.en(1'b1),
.d(n1),
.q(n2));
assign reset_out = ~n2;
endmodule // arrs