| module top |
| ( |
| input x, |
| input [2:0] y, |
| input [2:0] cin, |
| |
| output A, |
| output cout, |
| output control |
| ); |
| |
| wire A1,cout1; |
| wire [2:0] n_y; |
| |
| wire [2:0] n_cin; |
| |
| // initial begin |
| // A = 0; |
| // cout = 0; |
| // end |
| |
| assign n_y[0] = ~y[0]; |
| assign n_y[1] = y[1]; |
| assign n_y[2] = ~y[2]; |
| |
| assign n_cin[0] = ~cin[0]; |
| assign n_cin[1] = cin[1]; |
| assign n_cin[2] = ~cin[2]; |
| |
| `ifndef BUG |
| assign A1 = n_y + &(~cin); |
| assign cout1 = cin ? |n_y : ^A; |
| |
| assign A = A1|y~&(~cin)~^A1; |
| assign cout = cout1&cin~|(~y); |
| |
| assign control = x & y & cin; |
| `else |
| assign A1 = n_y + &(cin); |
| assign cout1 = cin ? |n_y : ^A; |
| |
| assign A = A1|y~&(~cin)~^A1; |
| assign cout = cout1&cin~|(~y); |
| |
| assign control = x | y | cin; |
| `endif |
| |
| endmodule |