Verwendung des AC97-Codec auf einem Atlys Spartan 6-Board

Ich bin ein Anfänger in der FPGA-Programmierung. Ich habe gerade mit der Programmierung eines Atlys Spartan 6-Boards begonnen und bisher ein Programm geschrieben, um LEDs in einem Zählermuster zu blinken.

Jetzt versuche ich, das auf Audiofrequenzen heruntergesampelte Taktsignal an den AC97-Codec zu senden. Hier ist das Verilog-Programm, das ich geschrieben habe:

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

Die Generierung der Bitdatei ist in Ordnung, aber der Code scheint nicht zu funktionieren - ich höre nichts, weder auf Line Out noch auf HP Out (ich weiß auch nicht, wie ich die Ausgabe steuern soll), und ich tue es Ich habe nicht genug Erfahrung mit der AC97-Spezifikation, um dies herauszufinden. Der Audioteil des UCF ist:

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;

Muss ich die Bituhr, Synchronisierung, Zurücksetzung usw. verwenden, damit dies funktioniert? Wenn ja, wie kann ich vorgehen?

Ich konnte keine detaillierten Informationen im Atlys-Referenzhandbuch finden.

Bitte helfen Sie!

Danke schön.

Suchen Sie im Datenblatt des IC nach Hinweisen und verwenden Sie ein Oszilloskop für die Ausgangssignale, um sicherzustellen, dass sie so aussehen, wie Sie es möchten. Übrigens, Sie erhöhen und setzen count_aud zurück, wenn es 50000 entspricht; benutze 'sonst'.
Es gibt einen neuen Vorschlag in Areas 51: Broadcast and Media Technologies , wo wir Experten für Codec-Entwicklungsarbeit einladen. Bitte machen Sie mit und laden Sie andere ein.

Antworten (1)

Die Schnittstelle zu einem AC97-Codec ist etwas komplizierter als reines digitales Audio. Die seriellen Daten bestehen aus 256-Bit-Datenrahmen; Jeder Rahmen enthält mehrere Kanäle mit 20-Bit-Abtastwerten. Die Gesamtdatenrate beträgt 12,288 MHz; Division durch 256 ergibt die Abtastrate von 48 kHz. Ein Teil des 256-Bit-Rahmens ist Steuernachrichten gewidmet, zB zum Setzen von Mischerregistern. Möglicherweise müssen Sie dies einmal nach dem Einschalten/Zurücksetzen tun, um die Lautstärke einzustellen.

Die AC97-Spezifikation ist von Intel erhältlich . Einen eigenen Master zu schreiben ist nicht unvernünftig, aber es wird einige Zeit dauern. Möglicherweise finden Sie auch eine, die Sie wiederverwenden können. OpenCores hat eine . Es gibt einen sehr Barebone AC97-Controller und einige allgemeine Informationen über das Protokoll hier .

Ich kann mich nicht erinnern, wie viele der AC97-Register standardisiert sind. Das Handbuch, das ich online für Ihr Board gefunden habe, besagt, dass es einen LM4550-Codec hat. Unter der Annahme, dass dies richtig ist, möchten Sie möglicherweise im Datenblatt des LM4550 nachsehen , um eine vollständige Liste der Konfigurationsregister zu erhalten.

@Icarus Wenn Sie den LM4550 auf Ihrem Board haben, lesen Sie unbedingt den Link zu allgemeinen Informationen, da es sich um denselben Chip handelt
Danke, obwohl ich gehofft hatte, dass es etwas Einfacheres geben könnte, wie das Zurücksetzen gedrückt halten oder so etwas! Werde mal die Links checken!