Uso del códec AC97 en una placa Atlys Spartan 6

Soy un principiante en la programación de FPGA. Acabo de empezar a programar una placa Atlys Spartan 6 y hasta ahora he escrito un programa para hacer parpadear los LED en un patrón de contador.

Ahora estoy tratando de enviar la señal del reloj muestreada a frecuencias de audio al códec AC97. Aquí está el programa Verilog que he escrito:

module music(
    input clk,
    output ac97_sdo
    );
reg [25:0] count_aud;
reg clk_aud;

assign ac97_sdo = clk_aud;

/* down-sample the 100MHz system clock to 1kHz */
always @(posedge clk)
begin
    count_aud <= count_aud + 1;
    if (50000 == count_aud)
    begin
        clk_aud <= !clk_aud;
        count_aud <= 0;
    end
end

endmodule

La generación de archivos de bits está bien, pero el código no parece funcionar: no escucho nada ni en Line Out ni en HP Out (tampoco sé cómo controlar la salida), y no No tengo suficiente experiencia con la especificación AC97 para resolver esto. La parte de audio de la UCF es:

NET ac97_bitclk LOC = L13;
NET ac97_sdi LOC = T18;
NET ac97_sdo LOC = N16;
NET ac97_sync LOC = U17;
NET ac97_reset LOC = T17;

¿Necesito usar el reloj de bits, sincronización, reinicio, etc. para que esto funcione? Si es así, ¿cómo puedo hacerlo?

No pude encontrar ninguna información detallada sobre el Manual de referencia de Atlys.

¡Por favor ayuda!

Gracias.

Mire la hoja de datos del IC en busca de pistas y use un osciloscopio en las señales de salida para asegurarse de que se vean como usted quiere que se vean. Por cierto, está incrementando y restableciendo count_aud cuando es igual a 50000; usa 'otro'.
Hay una nueva propuesta en las Áreas 51: Broadcast and Media Technologies donde invitamos a expertos en el trabajo de desarrollo de códecs. Únase e invite a otros.

Respuestas (1)

La interfaz de un códec AC97 es un poco más complicada que el audio digital directo. Los datos en serie consisten en tramas de datos de 256 bits; cada cuadro contiene varios canales de muestras de 20 bits. La velocidad de datos general es de 12,288 MHz; dividir por 256 da la frecuencia de muestreo de 48 kHz. Parte de la trama de 256 bits está dedicada a mensajes de control, por ejemplo, para establecer registros mezcladores. Es posible que deba hacer esto una vez después de encender/reiniciar para configurar el volumen.

La especificación AC97 está disponible en Intel . Escribir su propio maestro no es irrazonable, pero llevará algún tiempo. También puede encontrar uno que pueda reutilizar. OpenCores tiene uno . Hay un controlador AC97 muy básico y alguna información general sobre el protocolo aquí .

No recuerdo cuántos de los registros AC97 están estandarizados. El manual que encontré en línea para su placa dice que tiene un códec LM4550. Suponiendo que sea correcto, es posible que desee consultar la hoja de datos del LM4550 para obtener una lista completa de los registros de configuración.

@Icarus si tiene el LM4550 en su placa, definitivamente consulte el enlace de información general, ya que se trata del mismo chip
Gracias, aunque esperaba que hubiera algo más simple, como mantener presionado el reinicio o algo así. ¡Revisaré los enlaces!