|  | // A test with two MMCMs that have feedback through BUFGs | 
|  |  | 
|  | module top ( | 
|  | input  wire         clk, | 
|  | input  wire         rx, | 
|  | output wire         tx, | 
|  | input  wire [15:0]  sw, | 
|  | output wire [15:0]  led | 
|  | ); | 
|  |  | 
|  | // ==========================================================================-- | 
|  | // Reset generator | 
|  |  | 
|  | reg [7:0] rst_sr; | 
|  | wire      rst; | 
|  |  | 
|  | always @(posedge clk) | 
|  | rst_sr <= {1'b1, rst_sr[7:1]}; | 
|  |  | 
|  | assign rst = ~rst_sr[0]; | 
|  |  | 
|  | // ==========================================================================-- | 
|  | // MMCM 1 | 
|  |  | 
|  | wire clk_1, clk_1_buf; | 
|  | wire clkfb_1, clkfb_1_buf; | 
|  |  | 
|  | MMCME2_ADV # ( | 
|  | .CLKIN1_PERIOD      (10.0), | 
|  | .CLKFBOUT_MULT_F    (8.00), | 
|  | .CLKOUT0_DIVIDE_F   (24.0), | 
|  | .COMPENSATION       ("ZHOLD") | 
|  | ) mmcm_1 ( | 
|  | .RST        (rst), | 
|  | .CLKIN1     (clk), | 
|  | .CLKOUT0    (clk_1), | 
|  | .CLKFBIN    (clkfb_1_buf), | 
|  | .CLKFBOUT   (clkfb_1), | 
|  | .PWRDWN     (1'b0), | 
|  | ); | 
|  |  | 
|  | BUFG bufg_1_1 (.I(clk_1),   .O(clk_1_buf)); | 
|  | BUFG bufg_1_2 (.I(clkfb_1), .O(clkfb_1_buf)); | 
|  |  | 
|  | reg [21:0] cnt_1; | 
|  | always @(posedge clk_1_buf) | 
|  | cnt_1 <= cnt_1 + 1; | 
|  |  | 
|  | assign led[0] = cnt_1[21]; | 
|  |  | 
|  | // ==========================================================================-- | 
|  | // MMCM 2 | 
|  |  | 
|  | wire clk_2, clk_2_buf; | 
|  | wire clkfb_2, clkfb_2_buf; | 
|  |  | 
|  | MMCME2_ADV # ( | 
|  | .CLKIN1_PERIOD      (10.0), | 
|  | .CLKFBOUT_MULT_F    (8.00), | 
|  | .CLKOUT0_DIVIDE_F   (16.0), | 
|  | .COMPENSATION       ("ZHOLD") | 
|  | ) mmcm_2 ( | 
|  | .RST        (rst), | 
|  | .CLKIN1     (clk), | 
|  | .CLKOUT0    (clk_2), | 
|  | .CLKFBIN    (clkfb_2_buf), | 
|  | .CLKFBOUT   (clkfb_2), | 
|  | .PWRDWN     (1'b0), | 
|  | ); | 
|  |  | 
|  | BUFG bufg_2_1 (.I(clk_2),   .O(clk_2_buf)); | 
|  | BUFG bufg_2_2 (.I(clkfb_2), .O(clkfb_2_buf)); | 
|  |  | 
|  | reg [21:0] cnt_2; | 
|  | always @(posedge clk_2_buf) | 
|  | cnt_2 <= cnt_2 + 1; | 
|  |  | 
|  | assign led[1] = cnt_2[21]; | 
|  |  | 
|  | endmodule |