// 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 и т.п.) ); // ========================== // Сброс (reset) // ========================== // Предположим, что KEY0 замыкает на 0, когда нажата → делаем rst = !KEY0. wire rst = ~KEY0; // ========================== // Сигнал запуска плеера // ========================== // Для начала можем просто держать start = 1, // чтобы паттерн проигрывался один раз после сброса. // Если нужен запуск по кнопке — можно сделать простую логіку отдельно. wire start = 1'b1; // ========================== // Параметры должны совпадать с pattern_rom.v // ========================== localparam TICKS_WIDTH = 32; // DEPTH возьми из комментария в созданном pattern_rom.v // (Python-скрипт его печатает). Например: localparam DEPTH = 128; // ========================== // Соединения с pattern_player // ========================== wire out_sig; wire busy; pattern_player #( .TICKS_WIDTH(TICKS_WIDTH), .DEPTH(DEPTH) ) u_player ( .clk (CLK50), // тот же клок, что и в Python (F_CLK_HZ = 50e6) // если F_CLK_HZ другое — нужен PLL и другой сигнал clk .rst (rst), .start (start), .out (out_sig), .busy (busy) ); // Выводим сигнал на внешний пин assign GPIO0 = out_sig; endmodule