| module test(D, C, E, R, Q); |
| parameter [0:0] CLKPOL = 0; |
| parameter [0:0] ENABLE_EN = 0; |
| parameter [0:0] RESET_EN = 0; |
| parameter [0:0] RESET_VAL = 0; |
| parameter [0:0] RESET_SYN = 0; |
| |
| (* gentb_clock *) |
| input D, C, E, R; |
| |
| output Q; |
| |
| wire gated_reset = R & RESET_EN; |
| wire gated_enable = E | ~ENABLE_EN; |
| reg posedge_q, negedge_q, posedge_sq, negedge_sq; |
| |
| always @(posedge C, posedge gated_reset) |
| if (gated_reset) |
| posedge_q <= RESET_VAL; |
| else if (gated_enable) |
| posedge_q <= D; |
| |
| always @(negedge C, posedge gated_reset) |
| if (gated_reset) |
| negedge_q <= RESET_VAL; |
| else if (gated_enable) |
| negedge_q <= D; |
| |
| always @(posedge C) |
| if (gated_reset) |
| posedge_sq <= RESET_VAL; |
| else if (gated_enable) |
| posedge_sq <= D; |
| |
| always @(negedge C) |
| if (gated_reset) |
| negedge_sq <= RESET_VAL; |
| else if (gated_enable) |
| negedge_sq <= D; |
| |
| assign Q = RESET_SYN ? (CLKPOL ? posedge_sq : negedge_sq) : (CLKPOL ? posedge_q : negedge_q); |
| endmodule |