Skip to content

Commit 360fe59

Browse files
committed
fpga: ignore bufgmux in some cases
1 parent a9cae21 commit 360fe59

2 files changed

Lines changed: 22 additions & 8 deletions

File tree

src/fpga/tc_clk_xilinx.sv

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -57,19 +57,29 @@ module tc_clk_inverter (
5757

5858
endmodule
5959

60-
module tc_clk_mux2 (
60+
module tc_clk_mux2 #(
61+
/// Using BUFGMUX on FPGA can allocate limited clock ressources
62+
/// to non clock signals. It can also create long buffer chain
63+
/// depending on your design.
64+
/// If you need your signal to be buffered, use EN_BUF_FPGA = 0
65+
parameter bit EN_BUF_FPGA = 1'b0
66+
)(
6167
input logic clk0_i,
6268
input logic clk1_i,
6369
input logic clk_sel_i,
6470
output logic clk_o
6571
);
6672

67-
BUFGMUX i_BUFGMUX (
68-
.S ( clk_sel_i ),
69-
.I0 ( clk0_i ),
70-
.I1 ( clk1_i ),
71-
.O ( clk_o )
72-
);
73+
if (EN_BUF_FPGA) begin
74+
BUFGMUX i_BUFGMUX (
75+
.S ( clk_sel_i ),
76+
.I0 ( clk0_i ),
77+
.I1 ( clk1_i ),
78+
.O ( clk_o )
79+
);
80+
end else begin
81+
assign clk_o = clk_sel_i ? clk1_i : clk0_i;
82+
end
7383

7484
endmodule
7585

src/rtl/tc_clk.sv

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,11 @@ endmodule
7171
// reset state during the transition phase. If you need dynamic switching
7272
// between arbitrary input clocks without introducing glitches, have a look at
7373
// the clk_mux_glitch_free cell in the pulp-platform/common_cells repository.
74-
module tc_clk_mux2 (
74+
module tc_clk_mux2 #(
75+
/// EN_BUF_FPGA is used when avoiding to use buffered clk mux on FPGA.
76+
/// (see tc_clk_xilinx.sv)
77+
parameter bit EN_BUF_FPGA = 1'b0
78+
)(
7579
input logic clk0_i,
7680
input logic clk1_i,
7781
input logic clk_sel_i,

0 commit comments

Comments
 (0)