/********************************************** __ __ __ \ /\ /|\ /| __ __ / / | / | __ descript: author : Young Version: creaded: xxxx.xx.xx madified: ***********************************************/ `timescale 1ns/1ps module once_event #(
parameter MODE = "BOTH" //RAISE FALL
)(
input clock, input rst_n, input signal, output logic trigger
);
logic signal_raising; logic signal_falling;
edge_generator edge_generator_inst( /*input */ .clk (clock ), /*input */ .rst_n (rst_n ), /*input */ .in (signal ), /*output */ .raising (signal_raising ), /*output */ .falling (signal_falling ) );
logic raising; logic falling;
always_comb begin
if(MODE=="BOTH" || MODE=="RAISE") raising = signal_raising; else raising = 1'b0;
end
always_comb begin
if(MODE=="BOTH" || MODE=="FALL") falling = signal_falling; else falling = 1'b0;
end
always@(posedge clock,negedge rst_n)begin:TRIGGER_RECORD_BLOCK logic record;
if(~rst_n)begin record <= 1'b0; trigger <= 1'b0; end else begin if(raising || falling) record <= 1'b1; else record <= record; if(record) trigger <= 1'b0; else if(raising || falling) trigger <= 1'b1; else trigger <= 1'b0; end
end
endmodule