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?
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 ...
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.
Bart van Ingen-Schenau
derjohnny
Bart van Ingen-Schenau
Zack
derjohnny