2016-04-11 12:01:59 -04:00
|
|
|
//#############################################################################
|
|
|
|
//# Purpose: Stretches a pulse by DW+1 clock cycles #
|
|
|
|
//# Adds one cycle latency #
|
|
|
|
//#############################################################################
|
|
|
|
//# Author: Andreas Olofsson #
|
|
|
|
//# License: MIT (see LICENSE file in OH! repository) #
|
|
|
|
//#############################################################################
|
2015-11-30 13:45:49 -05:00
|
|
|
|
2016-04-11 12:01:59 -04:00
|
|
|
module oh_stretcher #(parameter CYCLES = 5) // "wakeup" cycles
|
|
|
|
( input clk, // clock
|
|
|
|
input in, // input pulse
|
|
|
|
input nreset, // async active low reset
|
|
|
|
output out // stretched output pulse
|
|
|
|
);
|
2015-11-30 13:45:49 -05:00
|
|
|
|
|
|
|
reg [CYCLES-1:0] valid;
|
|
|
|
|
2016-04-11 12:01:59 -04:00
|
|
|
always @ (posedge clk or negedge nreset)
|
|
|
|
if(!nreset)
|
2015-11-30 13:45:49 -05:00
|
|
|
valid[CYCLES-1:0] <='b0;
|
|
|
|
else if(in)
|
|
|
|
valid[CYCLES-1:0] <={(CYCLES){1'b1}};
|
|
|
|
else
|
|
|
|
valid[CYCLES-1:0] <={valid[CYCLES-2:0],1'b0};
|
|
|
|
|
|
|
|
assign out = valid[CYCLES-1];
|
|
|
|
|
|
|
|
endmodule // oh_stretcher
|
|
|
|
|
|
|
|
|
|
|
|
|