| 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 |