4.12 - MIDI_IN monitor

Для получения данных из аппаратного модуля 1.2 - MIDI вход нужно написать модуль на Verilog.

Ссылки, которые я почитал

http://www.muzoborudovanie.ru/articles/midi/midi1.php - пробежал, потому что читал давно, это матчасть

http://www.marsohod.org/index.php/projects/marsohod2/229-midi-sync - это реальный пример использования

Суть в том, что аппаратно мы уже получили поток данных с MIDI входа. Протокол аналогичен UART на скорости 31250. То есть, для работы нужен модуль приема данных по UART.

http://opencores.org/project,uart2bus - основа приемника - модули генератора и приемника

Сигнал с MIDI входа инвертирован и в таком виде подается на вход UART.

module gen( input wire clk50M, input wire key0, input wire key1, //output reg snd_L, //output reg snd_R, input wire MIDI_IN, output led0, output led1, output [7:0] SEG );//генератор 50 МГцwire clk50PLL;wire locked; nco clk50M_PLL(clk50M, clk50PLL, locked);wire GATE;wire [3:0] CHAN;wire [6:0] NOTE;wire [6:0] VELOCITY; midi_in midiin(clk50PLL, ~locked, MIDI_IN, GATE, CHAN, NOTE, VELOCITY);assign led0 = GATE;assign led1 = ~MIDI_IN;assign SEG = (GATE) ? {1'b0,SEG_buf} : 8'd0;reg [6:0] SEG_buf;//вывод номера канала ноты//always @ (CHAN) begin// case(CHAN)//вывод номера нотыalways @ (NOTE[3:0]) begin case(NOTE[3:0])//вывод velocity//always @ (VELOCITY[3:0]) begin// case(VELOCITY[3:0]) 4'h0: SEG_buf <= 7'b0111111; 4'h1: SEG_buf <= 7'b0000110; 4'h2: SEG_buf <= 7'b1011011; 4'h3: SEG_buf <= 7'b1001111; 4'h4: SEG_buf <= 7'b1100110; 4'h5: SEG_buf <= 7'b1101101; 4'h6: SEG_buf <= 7'b1111101; 4'h7: SEG_buf <= 7'b0000111; 4'h8: SEG_buf <= 7'b1111111; 4'h9: SEG_buf <= 7'b1101111; 4'hA: SEG_buf <= 7'b1110111; 4'hB: SEG_buf <= 7'b1111100; 4'hC: SEG_buf <= 7'b0111001; 4'hD: SEG_buf <= 7'b1011110; 4'hE: SEG_buf <= 7'b1111001; 4'hF: SEG_buf <= 7'b1110001; default: SEG_buf <= 7'b0111111; endcaseend initial begin SEG_buf <= 7'd0;end endmodule

Нажимаем кнопочки в FL Studio, видим загорающиеся лампочки: MIDI, GATE и почти номер ноты. Радуемся. Идем дальше - делаем модуль 2.13 - MIDI_IN

Ps. Забавно, клавиатура axelvox наблюдается уже не в первый раз в самоделках на ПЛИС:

1. Марсоходовый MIDI синтезатор (http://www.marsohod.org/index.php/projects/marsohod2/229-midi-sync)

2. GameBoy Advance as a MIDI synthesizer - Introduction (http://spritesmods.com/?art=gbamidi)

И У МЕНЯ ТАКАЯ ЖЕ.