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