К сожалению код из статьи книги не прокатил. На ЦАП шла полная 64 битовая белеберда.
Написал свою прошивку. По образу и подобию - максимально стремился приблизиться к картинкам от ЦФ sm5842. Поет
Правда с хипами и хрюками, но поет
На джитер пока не оптимизровал, единственное могу сказать -
Нельзя так просто взять и оторвать от хвоста даты 4 бита! Это сильно влияет на громкость (увеличило раз в 10). Может потому и хрипит.
А как тогда превести 24 бит даные в 20 бит?
module DigitalFilter
(
input wire LR, BCLK, MCLK, DATA,
output reg LR_out, BCLK_out, DATA_R, DATA_L
);
reg[0:31] buffer_data_L, buffer_data_R;
reg[0:6] buffer_data_count;
reg[0:23] data_out_L, data_out_R;
always @(posedge BCLK) // по восходящему фронту записываем 1:0 в буфер данных
begin
if(LR)
begin
buffer_data_L[buffer_data_count] = DATA;
end
if(!LR)
begin
buffer_data_R[buffer_data_count] = DATA;
end
buffer_data_count = (buffer_data_count == 32)? 1 : buffer_data_count + 1;
end
always @(posedge LR) // по восходящему фронту L/R сбрасываем данные буфера приемника в буфер отправителя.
begin
data_out_L = buffer_data_L[8:31];
data_out_R = buffer_data_R[8:31];
end
//Вычисление тактовых сигналов ЦФ, и отправка данных в ЦАП. Формат: LR=44.1, BCLK=24*LR
reg BCLK_buf = 1'b1;
reg[0:4] MCLK_tic; //16
always @(posedge MCLK) // преобразуем частоту BCLK_out (mclk/16 = bclk)
begin
if(MCLK_tic == 7)
begin
MCLK_tic = 0;
BCLK_buf = ~BCLK_buf;
BCLK_out = ~BCLK_out;
end
else
MCLK_tic = MCLK_tic + 1;
end
reg[0:5] BCLK_tic; //24
always @(negedge BCLK_buf) // синтезируем LR_out
begin
BCLK_tic = (BCLK_tic == 23) ? 0 : BCLK_tic + 1;
if(BCLK_tic <= 12)
LR_out = 0;
else
LR_out = 1;
//if((BCLK_tic == 0)||(BCLK_tic >= 21)) // по идее 1 бит и более 21 бит BCLK_out = 0; но почему то все время BCLK_out держит в нуле.
//BCLK_out = 0;
//else // отправка данных в ЦАП
begin
//BCLK_out = BCLK_buf;
DATA_R = data_out_R[BCLK_tic - 1];
DATA_L = data_out_L[BCLK_tic - 1];
end
end
endmodule
и добавил...плис пока стоит ЕРМ570, код занял 170 вентилей.
и добавил...Проинвертировал клок
BCLK_out, хрипы ушли.
Не плохо поет, помоему по лучше чем с ЦФ на sm5842, покрайней мере НЧ не выпячивает, звук более натурален. Хотя смогу сравнить работу ЦФ на плис и sm5842 когда буду переключать на плис и sm5842