Update ClockGate.sv to support GF22
ClockGate.sv updated to support GF22. Also refactored for readablility.
Change-Id: Ie12f006a44abb6da2c2c189997ad8264a9063bb9
diff --git a/hdl/verilog/ClockGate.sv b/hdl/verilog/ClockGate.sv
index 1dfb778..52a3aef 100644
--- a/hdl/verilog/ClockGate.sv
+++ b/hdl/verilog/ClockGate.sv
@@ -24,16 +24,28 @@
output clk_o
);
-`ifndef USE_GENERIC
-CKLNQD10BWP6T20P96CPDLVT u_cg(
- .TE(te),
- .E(enable),
- .CP(clk_i),
- .Q(clk_o)
-);
-`else
+///////////////////////////
+/// ClockGate Selection ///
+///////////////////////////
+`ifdef USE_TSMC12FFC
+ // TSMC12FFC Specific ClockGate
+ CKLNQD10BWP6T20P96CPDLVT u_cg(
+ .TE(te),
+ .E(enable),
+ .CP(clk_i),
+ .Q(clk_o)
+ );
+`elsif USE_GF22
+ // GF22 Specific ClockGate
+ SC7P5T_CKGPRELATNX8_CSC36L u_cg (
+ .CLK(clk_i),
+ .E(enable),
+ .TE(te),
+ .Z(clk_o)
+ );
-`ifdef FPGA_XILINX
+`elsif FPGA_XILINX
+ // Xilinx FPGA Specific ClockGate
BUFGCE #(
.SIM_DEVICE("ULTRASCALE_PLUS")
) u_bufgce (
@@ -42,6 +54,7 @@
.O (clk_o)
);
`else
+ // Default: Verilator implementation
logic en_latch /* verilator clock_enable */;
always_latch begin
if (!clk_i) begin
@@ -49,8 +62,6 @@
end
end
assign clk_o = en_latch & clk_i;
-`endif // FPGA_XILINX
-
-`endif // USE_GENERIC
+`endif
endmodule // ClockGate