module SLE ( output Q, input ADn, input ALn, input CLK, input D, input LAT, input SD, input EN, input SLn ); reg q_latch, q_ff; always @(posedge CLK, negedge ALn) begin if (!ALn) begin q_ff <= !ADn; end else if (EN) begin if (!SLn) q_ff <= SD; else q_ff <= D; end end always @* begin if (!ALn) begin q_latch <= !ADn; end else if (CLK && EN) begin if (!SLn) q_ff <= SD; else q_ff <= D; end end assign Q = LAT ? q_latch : q_ff; endmodule module CFG1 ( output Y, input A ); parameter [1:0] INIT = 2'h0; assign Y = INIT >> A; endmodule module CFG2 ( output Y, input A, input B ); parameter [3:0] INIT = 4'h0; assign Y = INIT >> {B, A}; endmodule module CFG3 ( output Y, input A, input B, input C ); parameter [7:0] INIT = 8'h0; assign Y = INIT >> {C, B, A}; endmodule module CFG4 ( output Y, input A, input B, input C, input D ); parameter [15:0] INIT = 16'h0; assign Y = INIT >> {D, C, B, A}; endmodule