module blink #( // Выбор частоты мигания (F_BLINK), Гц: // 1 -> 1 // 2.5 -> 25 (см. ниже, делим на 10) // 5 -> 5 // 10 -> 10 parameter integer MODE = 4 // по умолчанию 1 Гц )( input wire clk, // 50 MHz output reg led, output reg pin, output reg pin_10 ); localparam integer F_CLK = 50_000_000; // Предрасчитанные MAX_COUNT для половины периода: // // 1 Гц: T=1 c → T/2=0.5 c → 25_000_000 // 2.5 Гц: T=0.4 c → T/2=0.2 c → 10_000_000 // 5 Гц: T=0.2 c → T/2=0.1 c → 5_000_000 // 10 Гц: T=0.1 c → T/2=0.05 c → 2_500_000 localparam integer MAX_1HZ = 25_000_000 - 1; localparam integer MAX_2_5HZ = 10_000_000 - 1; localparam integer MAX_5HZ = 5_000_000 - 1; localparam integer MAX_10HZ = 2_500_000 - 1; // Выбор MAX_COUNT по MODE // MODE: // 1 -> 1 Гц // 2 -> 2.5 Гц // 3 -> 5 Гц // 4 -> 10 Гц localparam integer MAX_COUNT = (MODE == 1) ? MAX_1HZ : (MODE == 2) ? MAX_2_5HZ : (MODE == 3) ? MAX_5HZ : (MODE == 4) ? MAX_10HZ : MAX_1HZ; // по умолчанию 1 Гц reg [25:0] cnt; // хватает до > 33 млн (2^25 = 33_554_432) always @(posedge clk) begin if (cnt >= MAX_COUNT) begin cnt <= 0; led <= ~led; pin <= led; pin_10 <= led; end else begin cnt <= cnt + 1; end end endmodule