DLSFQ_LSSD2.v 1.5 KB
// VERSION:3.02 DATE:99/09/02 OPENCAD Verilog Library
`timescale 1ps / 1ps
`celldefine
`ifdef verifault
    `suppress_faults
    `enable_portfaults
`endif
module DLSFQ_LSSD2 ( Q, SETB, RESETB, GATE, D_IN, notifier_din, notifier_out );
output Q;
input  SETB,RESETB,GATE,D_IN,notifier_din, notifier_out;
reg _Q,pre_Q;

buf (Q,_Q);

always @ ( notifier_din or notifier_out ) begin
	_Q=1'bx;
	pre_Q=1'bx;
end

always @ ( SETB or RESETB or GATE or D_IN ) begin

	casez ( {SETB,RESETB,GATE,D_IN} )

		4'b00?? : _Q=1'bx;   // prohibition
		4'bx0?? : _Q=1'bx;   // prohibition
		4'b0x?? : _Q=1'bx;   // prohibition
		4'bxx?? : _Q=1'bx;   // prohibition

		4'b1110 : _Q=0;
		4'b1111 : _Q=1;
		4'b111x : _Q=1'bx;
		4'b110? : _Q=pre_Q;
		4'b0??? : _Q=1;
		4'b100? : _Q=0;
		4'b1010 : _Q=0;
		4'b1011 : _Q=1;
		4'b101x : _Q=1'bx;
		4'b10x0 : _Q=0;
		4'b10x1 : _Q=1'bx;
		4'b10xx : _Q=1'bx;
		4'b11x1 : begin
			if (pre_Q===1) _Q=1;
			else _Q=1'bx;
		end
		4'b11x0 : begin
			if (pre_Q===0) _Q=0;
			else _Q=1'bx;
		end
		4'bx111 : _Q=1;
		4'bx11? : _Q=1'bx;
		4'bx10? : begin
			if (pre_Q===1) _Q=1;
			else _Q=1'bx;
		end
		4'bx1x1 : begin
			if (pre_Q===1) _Q=1;
			else _Q=1'bx;
		end
		4'bx1x? : _Q=1'bx;
		4'b1x10 : _Q=0;
		4'b1x11 : _Q=1;
		4'b1x1x : _Q=1'bx;
		4'b1x0? : begin
			if (pre_Q===0) _Q=0;
			else _Q=1'bx;
		end
		4'b1xx0 : begin
			if (pre_Q===0) _Q=0;
			else _Q=1'bx;
		end

		default : _Q=1'bx;

    endcase
	pre_Q=_Q;
end

endmodule
`ifdef verifault
    `nosuppress_faults
    `disable_portfaults
`endif
`endcelldefine