1.1 - Вывод 1 битного звука
Проверенная более качественная схема
Простая схема, которая в принципе выдает какой-то звук:
Подключаю выход ТТЛ ножки ПЛИС к линейному входу звуковой платы. Плюсом в сторону ПЛИС.
Для проверки подойдет, например, простейший генератор 440 Гц на Verilog.
module synth(
input wire clk, //вход тактового генератора на 50 МГц
output reg snd //выход меандра 440 Гц
);
//440 Hz generator целочисленный. В моей плате генератор на 50 МГц
// 50000000 hz / 440 hz = 113636
reg[24:0] note_counter; // счетчик до 113636
//Инициализация
initial
begin
snd = 0;
snd_sig = 0;
note_counter = 113636;
end
//При каждом такте
always @ (posedge clk)
begin
//целочисленное деление
if (note_counter == 0) begin
//Генерим целочисленно
snd = ~snd;
note_counter = 113636;
end else begin
note_counter = note_counter -1;
end
end
endmodule
Такой вывод подходит, как для ШИМ, так и для дельтасигма. Стоит заметить, что дополнительного ФНЧ на схеме нет. Делать ФНЧ для ШИМ трудно, потому что чем больше бит, тем ниже частота. Чтобы сохранить высокую частоту, можно разделить сигнал на младшую и старшую части (http://spritesmods.com/?art=bwidow_fpga&page=4).
Еще страница http://www.openmusiclabs.com/learning/digital/pwm-dac/dual-pwm-circuits/
Проект, приложенный внизу, собран под Quartus 11.1, для платы на Cyclone EP4CE10E22C8N
В проекте есть ошибки: моно вариант был записан при не правильном подключении ПЛИС на вход звуковой платы, стерео вариант дает уже чистый меандр на записи; при рассчетах ошибка, за период частоты 440 Гц полярность меняется 1 раз, а должен быть целый период, поэтому в результате получается 220 Гц.