| `default_nettype none |
| |
| module plle2_test |
| ( |
| input wire CLK, |
| input wire RST, |
| |
| input wire I_CLKINSEL, |
| output wire O_LOCKED, |
| output wire [5:0] O_CNT |
| ); |
| |
| // ============================================================================ |
| // Input clock divider (to get different clkins) |
| wire clk100; |
| reg clk50; |
| |
| assign clk100 = CLK; |
| |
| always @(posedge clk100) |
| clk50 <= !clk50; |
| |
| // ============================================================================ |
| // The PLL |
| wire clk_fb_o; |
| wire clk_fb_i; |
| |
| wire [5:0] clk; |
| |
| PLLE2_ADV # |
| ( |
| .BANDWIDTH ("HIGH"), |
| .COMPENSATION ("BUF_IN"), |
| |
| .CLKIN1_PERIOD (20.0), // 50MHz |
| .CLKIN2_PERIOD (10.0), // 100MHz |
| |
| .CLKFBOUT_MULT (16), |
| .CLKFBOUT_PHASE (0.0), |
| |
| .CLKOUT0_DIVIDE (16), |
| .CLKOUT0_DUTY_CYCLE (0.53125), |
| .CLKOUT0_PHASE (45.0), |
| |
| .CLKOUT1_DIVIDE (32), |
| .CLKOUT1_DUTY_CYCLE (0.5), |
| .CLKOUT1_PHASE (90.0), |
| |
| .CLKOUT2_DIVIDE (48), |
| .CLKOUT2_DUTY_CYCLE (0.5), |
| .CLKOUT2_PHASE (135.0), |
| |
| .CLKOUT3_DIVIDE (64), |
| .CLKOUT3_DUTY_CYCLE (0.5), |
| .CLKOUT3_PHASE (-45.0), |
| |
| .CLKOUT4_DIVIDE (80), |
| .CLKOUT4_DUTY_CYCLE (0.5), |
| .CLKOUT4_PHASE (-90.0), |
| |
| .CLKOUT5_DIVIDE (96), |
| .CLKOUT5_DUTY_CYCLE (0.5), |
| .CLKOUT5_PHASE (-135.0), |
| |
| .STARTUP_WAIT ("FALSE") |
| ) |
| pll |
| ( |
| .CLKIN1 (clk50), |
| .CLKIN2 (clk100), |
| .CLKINSEL (I_CLKINSEL), |
| |
| .RST (RST), |
| .LOCKED (O_LOCKED), |
| |
| .CLKFBIN (clk_fb_i), |
| .CLKFBOUT (clk_fb_o), |
| |
| .CLKOUT0 (clk[0]), |
| .CLKOUT1 (clk[1]), |
| .CLKOUT2 (clk[2]), |
| .CLKOUT3 (clk[3]), |
| .CLKOUT4 (clk[4]), |
| .CLKOUT5 (clk[5]) |
| ); |
| |
| BUFG clk_fb_buf (.I(clk_fb_o), .O(clk_fb_i)); |
| |
| // ============================================================================ |
| // Counters |
| |
| wire rst = RST || !O_LOCKED; |
| |
| genvar i; |
| generate for (i=0; i<6; i=i+1) begin |
| |
| reg [23:0] counter; |
| |
| always @(posedge clk[i] or posedge rst) |
| if (rst) counter <= 0; |
| else counter <= counter + 1; |
| |
| assign O_CNT[i] = counter[21]; |
| |
| end endgenerate |
| |
| endmodule |