Hallo, sorry für diesen weiteren Thread aber ich habe einen komischen
Fehler bei dem ich nicht weiß wie man den debuggen kann:
Die ganzen Einzelteile funktionieren, aber zusammen funktioniert es
nicht.
Ich habe:
FT232H im FIFO Modus (liefert 60MHz Clock)
FT232R als UART
6 ADCs in 3 AD7356
80MHz Clock im FPGA
Einen Zähler als Datengenerator für Testdaten im FPGA
Einen dual Clock FIFO (Xilinx) im FPGA
Viel BRAM um Samples zu speichern für das UART.
Über UART kann ich eine Datenquelle im FPGA auswählen. Deren Samples
werden dann gleichzeitig über den FT232H gestreamt, also Sample mit
80MHz in das FIFO und mit 60MHz wieder raus zum FT232H.
Und gleichzeitig werden immer Samples in BRAM abgelegt und dann langsam
über das UART rausgeschrieben.
Nun, über das UART bekomme ich immer alles in richtig. Die Daten vom ADC
sehen gut aus und wenn ich den Zähler als Quelle wähle kommen da auch
die entsprechenden Daten raus, wunderbar.
Über den FT232H FIFO bekomme ich auch ADC und Zähler, aber auch sehr
viele Fehler. ADC- und Zähler Werte sind 12Bit, die Teile ich auf zwei
Bytes auf:
fifo_din <= "00" & ADC_data(11 downto 7) & '1';
und
fifo_din <= ADC_data(6 downto 0) & '0';
Die Fehler betreffen gar nicht die Nutzdaten, sondern schon die 1 oder 0
am Ende sind oft falsch bzw. zwei am PC nacheinander empfangene Bytes
enthalten eine 1 oder 0 am Ende.
Das seltsame ist, dass ich das das hier im Code drin habe um die Quelle
auszuwählen:
1 | case ADC_select is
|
2 | when "001" => ADC_data <= AD7356_1_data; ADC_data_ready <= AD7356_12_data_ready;
|
3 | when "010" => ADC_data <= AD7356_2_data; ADC_data_ready <= AD7356_12_data_ready;
|
4 | when "011" => ADC_data <= AD7356_3_data; ADC_data_ready <= AD7356_34_data_ready;
|
5 | when "100" => ADC_data <= AD7356_4_data; ADC_data_ready <= AD7356_34_data_ready;
|
6 | when "101" => ADC_data <= AD7356_5_data; ADC_data_ready <= AD7356_56_data_ready;
|
7 | when "110" => ADC_data <= AD7356_6_data; ADC_data_ready <= AD7356_56_data_ready;
|
8 | when others => ADC_data <= fifo_counter; ADC_data_ready <= fifo_counter_ready;
|
9 | end case;
|
Wenn ich das feste auf den Zähler als Datengenerator verbinde
1 | ADC_data <= fifo_counter; ADC_data_ready <= fifo_counter_ready;
|
Gibt es genau keine Fehler, ich kann mehrere Gigabytes an Zählerwerten
über den FT232H zum PC schieben ohne einen einzigen Bitfehler. Wobei das
aber natürlich nur die Nutzdaten ändert und sonst nichts.
Wie debuggt man sowas?
Im Anhang mal das Projekt.