MODULE debounce Declarations "Inputs: KEY_IN pin; CLK_100Hz pin; "Outputs: KEY_STATE pin istype 'reg, buffer'; KEY_PRESS pin; "Internal: KEY_LATCH node istype 'reg, buffer'; CT0, CT1 node istype 'reg, buffer'; CT0_TEMP node istype 'collapse'; CT1_TEMP node istype 'collapse'; I_TEMP node istype 'collapse'; I1_TEMP node istype 'collapse'; KEY_STATE_TEMP node istype 'collapse'; EQUATIONS [KEY_LATCH, CT0, CT1, KEY_STATE].clk = CLK_100Hz; KEY_LATCH.d = KEY_IN; I_TEMP = KEY_STATE $ !KEY_LATCH; CT0_TEMP = !(CT0 & I_TEMP); CT1_TEMP = CT0_TEMP $ (CT1 & I_TEMP); I1_TEMP = I_TEMP & CT0_TEMP & CT1_TEMP; KEY_STATE_TEMP = KEY_STATE $ I1_TEMP; KEY_PRESS = KEY_STATE_TEMP & I1_TEMP; // active for 1 cycle CT0.d = CT0_TEMP; CT1.d = CT1_TEMP; KEY_STATE.d = KEY_STATE_TEMP; // debounced state END