mmcm_1in_3out.sv (1675B)
1 `timescale 1ps/1ps 2 3 // F(CLKIN) = 1 / CLKIN_PERIOD 4 // F(VCO) = F(CLKIN) * ( VCOMUL / VCODIV ) 5 // F(CLKn) = F(VCO) / OUTnDIV 6 7 module mmcm_1in_3out( 8 input i_clk, 9 output o_clk0, 10 output o_clk1, 11 output o_clk2 12 ); 13 14 parameter CLKIN_PERIOD = 10.0; 15 parameter VCO_MUL = 10.000; 16 parameter VCO_DIV = 2; 17 parameter OUT0_DIV = 2.000; 18 parameter OUT1_DIV = 2; 19 parameter OUT2_DIV = 2; 20 21 wire clkfb, clkfb_i, clk0, clk1, clk2; 22 23 BUFG bufg_fb(.I(clkfb_i), .O(clkfb)); 24 BUFG bufg_clk0(.I(clk0), .O(o_clk0)); 25 BUFG bufg_clk1(.I(clk1), .O(o_clk1)); 26 BUFG bufg_clk2(.I(clk2), .O(o_clk2)); 27 28 MMCME2_ADV #( 29 .BANDWIDTH("OPTIMIZED"), 30 .CLKOUT4_CASCADE("FALSE"), 31 .COMPENSATION("ZHOLD"), 32 .STARTUP_WAIT("FALSE"), 33 .DIVCLK_DIVIDE(VCO_DIV), 34 .CLKFBOUT_MULT_F(VCO_MUL), 35 .CLKFBOUT_PHASE(0.000), 36 .CLKFBOUT_USE_FINE_PS("FALSE"), 37 .CLKOUT0_DIVIDE_F(OUT0_DIV), 38 .CLKOUT0_PHASE(0.000), 39 .CLKOUT0_DUTY_CYCLE(0.500), 40 .CLKOUT0_USE_FINE_PS("FALSE"), 41 .CLKOUT1_DIVIDE(OUT1_DIV), 42 .CLKOUT1_PHASE(0.000), 43 .CLKOUT1_DUTY_CYCLE(0.500), 44 .CLKOUT1_USE_FINE_PS("FALSE"), 45 .CLKOUT2_DIVIDE(OUT2_DIV), 46 .CLKOUT2_PHASE(0.000), 47 .CLKOUT2_DUTY_CYCLE(0.500), 48 .CLKOUT2_USE_FINE_PS("FALSE"), 49 .CLKIN1_PERIOD(CLKIN_PERIOD), 50 .REF_JITTER1(0.010) 51 ) mmcm_adv_inst ( 52 .CLKFBOUT(clkfb_i), 53 .CLKFBOUTB(), 54 .CLKOUT0(clk0), 55 .CLKOUT0B(), 56 .CLKOUT1(clk1), 57 .CLKOUT1B(), 58 .CLKOUT2(clk2), 59 .CLKOUT2B(), 60 .CLKOUT3(), 61 .CLKOUT3B(), 62 .CLKOUT4(), 63 .CLKOUT5(), 64 .CLKOUT6(), 65 66 .CLKFBIN(clkfb), 67 .CLKIN1(i_clk), 68 .CLKIN2(0), 69 70 .CLKINSEL(1), 71 72 .DADDR(0), 73 .DCLK(0), 74 .DEN(0), 75 .DI(0), 76 .DO(), 77 .DRDY(), 78 .DWE(0), 79 80 .PSCLK(0), 81 .PSEN(0), 82 .PSINCDEC(0), 83 .PSDONE(), 84 85 .LOCKED(), 86 .CLKINSTOPPED(), 87 .CLKFBSTOPPED(), 88 .PWRDWN(0), 89 .RST(0) 90 ); 91 92 endmodule