Здравствуйте.
Такой вопрос:
Делаю DDS синтезатор на Cyclone3.
Есть таблица синуса.
При таком варианте кода, когда используется четверть периода:
Код
always @(posedge areset or posedge c0)
begin
if(areset)
begin
PhaseAcc = 2'h0;
ResolutionCounter = 8'h00;
end
else
begin
case (PhaseAcc)
2'b00:
begin
DAC_Data <= SinRom[ResolutionCounter];
end
2'b01:
begin
DAC_Data <= SinRom[63 - ResolutionCounter];
end
2'b10:
begin
DAC_Data <= SinRom[63 - ResolutionCounter] - 127;
end
2'b11:
begin
DAC_Data <= 254 - SinRom[63 - ResolutionCounter];
end
endcase
ResolutionCounter <= ResolutionCounter + STEP;
if (ResolutionCounter == 64)
begin
PhaseAcc <= (PhaseAcc == 2'b11) ? 2'b00 : PhaseAcc + 2'b01;
ResolutionCounter <= 8'h00;
end
end
end
assign DAC = DAC_Data;
происходит искажение синусоиды. Я так понимаю, из-за разной задержки путей case. Подскажите, как задать общую задержку этого участка?
PS С констрейнами пока на "ВЫ"