FPGA kann Daten senden, aber keine Daten empfangen. (UART-RS232)

Ich habe ein DE0-nano-FPGA-Board und versuche, eine serielle Verbindung mit meinem PC herzustellen.

Ich verwende die RS232-Implementierung von hier: http://www.fpga4fun.com/SerialInterface.html

Ich habe das Senden vom FPGA getestet und es hat perfekt funktioniert. Wenn ich jedoch versuche, an das FPGA zu senden, scheint es nicht zu funktionieren.

Hier ist mein Verilog-Code:

module Learning(
    input clk,
    input RxD,
     output LED
);

wire RxD_data_ready;
wire [7:0] RxD_data;
reg [7:0] data;

async_receiver RX(.clk(clk), .RxD(RxD), .RxD_data_ready(RxD_data_ready), .RxD_data(RxD_data));

always @(posedge clk) if(RxD_data_ready) data <= RxD_data;

assign LED = (data == 8'h24);

endmodule

Grundsätzlich habe ich es so entworfen, dass eine bestimmte LED auf meiner Platine aufleuchtet, während ich den Hexadezimalwert 24 sende. Da ich diesen Wert mit einer sehr hohen Frequenz sende, erwarte ich, dass die LED für die gesamte Übertragung eingeschaltet bleibt. Es tut sich jedoch nichts. Es bleibt aus.

Ich habe bereits die Reverse-Bit-Option aus meinem RS232-Programm ausprobiert. Auch die Verwendung eines symmetrischen Werts wie 0x55 funktionierte nicht.

Was könnte das Problem sein?

Nur ein paar zufällige Gedanken: Könnte es ein Problem mit der Bitreihenfolge sein (Sie senden zuerst MSB, lesen aber zuerst LSB oder umgekehrt)? Was passiert, wenn Sie mit Bitmustern wie 0x00, 0xFF, 0x55 oder 0xAA testen?
@BartvanIngenSchenau Ja, ich habe bereits die Reverse-Bit-Option aus meinem RS232-Programm ausprobiert. Auch die Verwendung eines symmetrischen Werts wie 0x55 funktionierte nicht.
Ich habe Ihre Erklärung der Frage hinzugefügt.
Sind Sie sicher, dass sich Ihre LED einige Millisekunden lang nicht einschaltet und dann nach Abschluss ausschaltet?
@Zack ja ich bin mir sicher. Die Übertragung kann so lange dauern, wie ich will, und ich lasse sie lange laufen.

Antworten (2)

Da Sie Verilog nicht so debuggen können, wie Sie es mit C und einem Mikrocontroller können, müssen Sie inkrementelle Debugging-Schritte unternehmen ...

  • Wenn Sie nur LED 1 zuweisen, schaltet sich die LED ein und bleibt eingeschaltet?
  • Werden überhaupt Daten gelesen? Schalten Sie vielleicht einfach die LED um, wenn ein Zeichen hereinkommt
  • Stellen Sie sicher, dass diese funktionieren und sie zu 0x24 weitergehen

Mein Rat ist, beim Debuggen kleine Schritte zu unternehmen, insbesondere bei einer Hardwarebeschreibungssprache.

Ich habe es geschafft, es herauszufinden.

Es stellt sich heraus, dass das spezielle RS232-Modul, das ich verwende, optimal mit einem Eingangstakt von 25 MHz funktioniert. Mein FPGA-Haupttakt beträgt 50 MHz, also habe ich ihn einfach durch einen 1-Bit-Teiler laufen lassen, um einen 25-MHz-Takt zu erhalten. Die Verwendung als meine UART-Uhr funktionierte perfekt.

Ich habe auch die 8 LEDs verwendet, um die 8 empfangenen Datenbits anzuzeigen, was immens geholfen hat.