FUNCTION choose_fifo (ren_last[4..0],ffend[4..0],ee_last,notempty[4..0], testmode) RETURNS (ren_next[4..0]); FUNCTION lpm_mux (data[LPM_SIZE-1..0][LPM_WIDTH-1..0], sel[LPM_WIDTHS-1..0], clock, aclr) WITH (LPM_WIDTH, LPM_SIZE, LPM_WIDTHS, LPM_PIPELINE) RETURNS (result[LPM_WIDTH-1..0]); SUBDESIGN fifologic ( clock,ee,ef[4..0],disable[4..0],reset,testmode: INPUT; ren[4..0],fifoclock[4..0],ffend[4..0]:OUTPUT; ) VARIABLE ffend[4..0]:DFFE; ren[4..0]:DFFE; eemux :lpm_mux WITH (LPM_WIDTH=5,LPM_SIZE=2,LPM_WIDTHS=1); BEGIN ffend[].clk = clock; ffend[].prn = VCC; ffend[].clrn = !reset; ffend[].ena = VCC; ren[].clk = clock; ren[].prn = VCC; ren[].clrn = !reset; ren[].ena = VCC; eemux.sel[] = ee; eemux.data[0][] = ffend[].q # disable[]; eemux.data[1][] = ffend[].q # ren[].q # disable[]; ffend[].d = eemux.result[]; ren[].d = choose_fifo(ren[].q,ffend[].q,ee,ef[],testmode); fifoclock[] = !clock; END;