59 lines
1.9 KiB
Verilog
59 lines
1.9 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 и т.п.)
|
||
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 |