// top.v — верхний уровень для Cyclone IV (OMDAZZ) // Внутри — pattern_player + pattern_rom (ROM сгенерирован Python-скриптом) module top ( input wire CLK50, // системный клок с платы (например, 50 МГц) input wire KEY0, // кнопка reset (на OMDAZZ часто активный низ) output wire GPIO0, // выход на пин (оптопара/LED и т.п.) output wire GPIO1 // ДОП. выход для clk50_div2 (подвесь на свободный пин) ); // ========================== // Сброс (reset) // ========================== wire rst = ~KEY0; // ========================== // Делитель такта CLK50 / 2 // ========================== reg clk50_div2 = 1'b0; always @(posedge CLK50 or posedge rst) begin if (rst) clk50_div2 <= 1'b0; else clk50_div2 <= ~clk50_div2; end // ========================== // Сигнал запуска плеера // ========================== wire start = 1'b1; // ========================== // Параметры должны совпадать с pattern_rom.v // ========================== localparam TICKS_WIDTH = 32; localparam DEPTH = 128; // ========================== // Соединения с pattern_player // ========================== wire out_sig; wire busy; pattern_player #( .TICKS_WIDTH(TICKS_WIDTH), .DEPTH (DEPTH) ) u_player ( .clk (CLK50), // такт 50 МГц .rst (rst), .start (start), .out (out_sig), .busy (busy) ); // Выводим сигнал плеера и делитель такта на внешние пины assign GPIO0 = out_sig; assign GPIO1 = clk50_div2; // сюда повесь светодиод или щуп endmodule