module subtracter_1( 
                    X,Y,BIN,
                    D,BOUT
                    );
output D;
output BOUT;
input  X;
input  Y;
input  BIN;

reg BOUT;

//行为描述方式
/*
reg D;
always @(X or Y or BIN)
begin
  D    <= X ^ Y ^ BIN;
  BOUT <= ((~ X) & Y ) + ((~ X) & BIN) + (Y & BIN); 
end
*/

//混合描述方式
wire S1;

xor U1(S1,X,Y);                //门电路

always @(X or Y or BIN)        //行为描述方式
begin
  BOUT <= ((~ X) & Y ) + ((~ X) & BIN) + (Y & BIN);
end

assign D = S1 ^ BIN;           //数据流描述方式

endmodule