blob: 2d090c022bae2363c5619a6536230a5fa01416c6 [file] [log] [blame] [edit]
`default_nettype none
// ============================================================================
module top
(
input wire clk,
input wire [7:0] sw,
output wire [7:0] led,
input wire jc1,
output wire jc2,
input wire jc3,
output wire jc4
);
// ============================================================================
// MMCM
wire clk_fb;
wire [3:0] oclk;
wire [3:0] gclk;
MMCME2_ADV #
(
.BANDWIDTH ("HIGH"),
.COMPENSATION ("INTERNAL"),
.CLKIN1_PERIOD (10.0),
.CLKIN2_PERIOD (10.0),
.CLKFBOUT_MULT_F (10.5),
.CLKFBOUT_PHASE (0),
.CLKOUT0_DIVIDE_F (12.5),
.CLKOUT0_DUTY_CYCLE (0.50),
.CLKOUT0_PHASE (45.0),
.CLKOUT1_DIVIDE (32),
.CLKOUT1_DUTY_CYCLE (0.53125),
.CLKOUT1_PHASE (90.0),
.CLKOUT2_DIVIDE (48),
.CLKOUT2_DUTY_CYCLE (0.50),
.CLKOUT2_PHASE (135.0),
.CLKOUT3_DIVIDE (64),
.CLKOUT3_DUTY_CYCLE (0.50),
.CLKOUT3_PHASE (45.0),
.STARTUP_WAIT ("FALSE")
)
mmcm
(
.CLKIN1 (clk),
.CLKIN2 (clk),
.CLKINSEL (1'b0),
.RST (sw[0]),
.PWRDWN (1'b0),
.CLKFBIN (clk_fb),
.CLKFBOUT (clk_fb),
.CLKOUT0 (oclk[0]),
.CLKOUT1 (oclk[1]),
.CLKOUT2 (oclk[2]),
.CLKOUT3 (oclk[3])
);
// ============================================================================
// Outputs
genvar i;
generate for (i=0; i<4; i=i+1) begin
BUFG bufg (.I(oclk[i]), .O(gclk[i]));
reg r;
always @(posedge gclk[i])
r <= ~r;
assign led[i] = r;
end endgenerate
// Unused
assign led[4] = 1'b0;
assign led[5] = 1'b0;
assign led[6] = 1'b0;
assign led[7] = |sw;
assign jc2 = jc1;
assign jc4 = jc3;
endmodule