| module top | |
| ( | |
| input x, | |
| input y, | |
| input cin, | |
| output reg A, | |
| output reg cout | |
| ); | |
| reg A1,cout1; | |
| initial begin | |
| A = 0; | |
| cout = 0; | |
| end | |
| `ifndef BUG | |
| always @(posedge x) begin | |
| A1 <= ~y + &cin; | |
| end | |
| always @(negedge x) begin | |
| cout1 <= cin ? |y : ^A; | |
| end | |
| always @(*) begin | |
| if (x) | |
| A <= A1|y~&cin; | |
| end | |
| always @(*) begin | |
| if (~x) | |
| cout <= cout1&cin~|y; | |
| end | |
| `else | |
| assign {cout,A} = 1'bZ; | |
| `endif | |
| bb ubb (cin,y,x,A); | |
| endmodule | |
| (* black_box *) module bb(in1, in2, clk, out1); | |
| input in1; | |
| input in2; | |
| input clk; | |
| output reg out1; | |
| always @(posedge clk) | |
| out1 <= in1 & in2; | |
| endmodule |