2.06 - DCA

Цифровой VCA. Целочисленно перемножает сигналы с двух своих входов in и cv.

module vca8(clk, in, cv, sout);input wire clk;input wire [7:0] in, cv;output reg [7:0] sout;reg [15:0] result;always @(posedge clk) begin result = in * cv; sout = result[15:8];endendmodule

Пример пила 220 Гц перемноженная на обратную пилу 1 Гц.

// DDS - расчет значения регистра для заданной частоты//32 бита это 4294967296//делим 220Hz / 50 000 000 Hz / 2 * 4294967296 => 9448,9280512//делим 1Hz / 50 000 000 Hz / 2 * 4294967296 => 42,94967296//DCO 220 Гцwire [31:0] fout220; dds32 dds1(clk50M, 9449, fout220);//DCO 1 Гцwire [31:0] fout1; dds32 dds2(clk50M, 43, fout1);//подаем оба сигнала на DCAwire [7:0] vcaout1; vca8 vca_1(clk50M, fout220[31:24], 255-fout1[31:24], vcaout1);//ШИМ для выводаwire pwm_out; pwm8dac1 dac1(clk50M, vcaout1, pwm_out);//вывод наружуalways @(posedge clk50M) begin snd_R <= pwm_out; snd_L <= pwm_out; end

Результат

Сигнал получился не очень симметричный. Пожалуй, надо будет поставить ОУ в линейный выход.