; RUN: llhd-opt %s -p deseq proc %ff_clkrise_rstasynclow (i1$ %CLK, i1$ %RST, i32$ %D) -> (i32$ %Q) { init: %CLK1 = prb i1$ %CLK %RST1 = prb i1$ %RST %0 = const i1 0 %1 = eq i1 %CLK1, %0 %7 = neq i1 %RST1, %0 %2 = const i32 65536 %3 = const time 0s 1d wait %check, %CLK, %RST check: %D1 = prb i32$ %D %RST2 = prb i1$ %RST %CLK2 = prb i1$ %CLK %4 = neq i1 %CLK2, %0 %8 = eq i1 %RST2, %0 %posedge = and i1 %1, %4 %negedge = and i1 %7, %8 %event_or = or i1 %posedge, %negedge %5 = [i32 %2, %D1] %6 = mux [2 x i32] %5, i1 %RST2 drv i32$ %Q if %event_or, %6, %3 br %init } ; CHECK: entity %ff_clkrise_rstasynclow (i1$ %CLK, i1$ %RST, i32$ %D) -> (i32$ %Q) { ; CHECK: %0 = const i32 65536 ; CHECK: %D1 = prb i32$ %D ; CHECK: %1 = [i32 %0, %D1] ; CHECK: %RST2 = prb i1$ %RST ; CHECK: %2 = mux [2 x i32] %1, i1 %RST2 ; CHECK: %3 = prb i1$ %CLK ; CHECK: %RST21 = const i1 0 ; CHECK: %4 = mux [2 x i32] %1, i1 %RST21 ; CHECK: %5 = prb i1$ %RST ; CHECK: reg i32$ %Q, [%2, rise %3], [%4, fall %5] ; CHECK: } proc %ff_clkrise_rstasynchigh (i1$ %CLK, i1$ %RST, i32$ %D) -> (i32$ %Q) { init: %CLK1 = prb i1$ %CLK %0 = const i1 0 %1 = eq i1 %CLK1, %0 %2 = const i32 65536 %3 = const time 0s 1d wait %check, %CLK, %RST check: %D1 = prb i32$ %D %RST2 = prb i1$ %RST %CLK2 = prb i1$ %CLK %4 = neq i1 %CLK2, %0 %8 = eq i1 %RST2, %0 %posedge = and i1 %1, %4 %event_or = or i1 %posedge, %8 %5 = [i32 %2, %D1] %6 = mux [2 x i32] %5, i1 %RST2 drv i32$ %Q if %event_or, %6, %3 br %init } ; CHECK: entity %ff_clkrise_rstasynchigh (i1$ %CLK, i1$ %RST, i32$ %D) -> (i32$ %Q) { ; CHECK: %0 = const i32 65536 ; CHECK: %D1 = prb i32$ %D ; CHECK: %1 = [i32 %0, %D1] ; CHECK: %RST2 = prb i1$ %RST ; CHECK: %2 = mux [2 x i32] %1, i1 %RST2 ; CHECK: %3 = prb i1$ %CLK ; CHECK: %4 = prb i1$ %RST ; CHECK: %5 = not i1 %4 ; CHECK: %RST21 = const i1 0 ; CHECK: %6 = mux [2 x i32] %1, i1 %RST21 ; CHECK: reg i32$ %Q, [%2, rise %3], [%6, high %5] ; CHECK: }