| // Copyright lowRISC contributors. |
| // Licensed under the Apache License, Version 2.0, see LICENSE for details. |
| // SPDX-License-Identifier: Apache-2.0 |
| // |
| // Common Library: Clock Gating cell |
| // |
| // The logic assumes that en_i is synchronized (so the instantiation site might need to put a |
| // synchronizer before en_i). |
| |
| // This module isn't synthesizable, so don't even try. |
| `ifndef SYNTHESIS |
| module lowrisc_prim_generic_clock_gating #( |
| parameter bit NoFpgaGate = 1'b0, // this parameter has no function in generic |
| parameter bit FpgaBufGlobal = 1'b1 // this parameter has no function in generic |
| ) ( |
| input clk_i, |
| input en_i, |
| input test_en_i, |
| output logic clk_o |
| ); |
| |
| logic en_latch /* verilator clock_enable */; |
| always_latch begin |
| if (!clk_i) begin |
| en_latch = en_i | test_en_i; |
| end |
| end |
| assign clk_o = en_latch & clk_i; |
| |
| endmodule |
| `endif |