53 lines
2.1 KiB
Verilog
53 lines
2.1 KiB
Verilog
// 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 |