Forum Discussion

Altera_Forum's avatar
Altera_Forum
Icon for Honored Contributor rankHonored Contributor
7 years ago

DE1 AUDIO CODEC help needed

Hello,

I am using DE1-SOC audio codec. I have sound by linking ADCDAT to DACDAT. I do this with a switch. So I can disable sound or listen to it by using this switch.

The next step is to make a 24 bits left and right data from ADCDAT and then manipulate it and get it back to DACDAT.

So I made 2 processes:

The following converting ADCDAT to 24 bits data left and right

PROCESS(BCLK,NRST)

BEGIN

if NRST = '0' then

AUD_DACLRCK_OLD <= '1';

GO <= '0' ;

index <= 0 ;

ch <= 0;

temp <= conv_std_logic_vector(0, 24) ;

elsif rising_edge(BCLK) then

if AUD_DACLRCK_OLD = '1' AND AUD_DACLRCK = '0' then

ch <= 1;

AUD_DACLRCK_OLD <= '0' ;

index <= 24;

end if;

if AUD_DACLRCK_OLD = '0' AND AUD_DACLRCK = '1' then

AUD_DACLRCK_OLD <= '1' ;

ch <= 2;

index <= 24 ;

end if;

if ch = 1 then

if index >= 0 then

temp(index) <= AUD_ADCDAT ;

end if;

index <= index - 1 ;

if index = -1 then RES_LEFT <= temp(23 downto 0) ; ch <= 0;end if;

end if;

if ch = 2 then

if index >= 0 then

temp(index) <= AUD_ADCDAT ; end if;

index <= index - 1 ;

if index = -1 then RES_RIGHT <= temp(23 downto 0) ; ch <= 0; end if;

end if;

end if; --rising_edge

END PROCESS;

For getting it back to 1 bit:

PROCESS(BCLK,NRST)

variable i,j : integer;

BEGIN

if NRST = '0' then

i := 0; j := 0;

LR <= '0';

GO <= '0';

elsif rising_edge(BCLK) then

--if rising_edge(START) and GO = '0' then

AUD_DACLRCK_OLD <= AUD_DACLRCK;

if AUD_DACLRCK_OLD = '0' AND AUD_DACLRCK = '1' then

ch <= 0;ch2 <= 1;

data_left <= datain_left;

data_right <= datain_right;

j := 24 ;

end if;

if AUD_DACLRCK_OLD = '1' AND AUD_DACLRCK = '0' then

ch <= 1; ch2 <= 0;

i := 24;

end if;

if (ch = 1) then

if i >=0 and i <= 23 then AUD_DACDAT <= data_left(i) ;end if;

i:= i-1;

elsif (ch2 = 1) then

if j >=0 and j <= 23 then AUD_DACDAT <= data_right(j) ;end if;

j:= j-1;

end if; --GO

if i <0 then ch <= 0; end if;

if j <0 then ch2 <= 0; end if;

end if;

END PROCESS;

So if I connect ADCDAT to DACDAT I get perfect sound. But if I do it as above I get too much noise.

Any idea?

I appriciate your help...
No RepliesBe the first to reply