Hi,
ich bin derzeit dabei mit einem XUPV5 Board via Ethernet zu
kommunzieren.
Zum Einstieg habe ich dieses Projekt durchgemacht:
http://www.fpgadeveloper.com/2008/10/tri-mode-ethernet-mac.html
Das funktioniert einwandfrei. Alle Pakete die ich mittels RAW-Ethernet
(also ich baue die Pakete manuell in einem c Programm zusammen) bekomme
ich mit vertauschten Adressen zurück.
Nun wollte ich das address_swap_module durch mein eigenes Modul
ersetzen. Dieses besteht aus 2 Komponenten: Einem Receiver der ein
Datenpaket annimmt und ins BRAM schreibt und einen Transceiver der den
BRAM ausliest und Pakete versendet.
Der Receiver teilt dem Transceiver mittels eines "finish"-Signals mit
wenn er fertig ist so dass der Transceiver beginnen kann.
Aber anscheinend bekommt der Receiver das Start-Of-Frame Signal nicht
mit.
Erstmal habe ich folgende Änderung in der user_logic.vhd gemacht:
und zwar von:
1 | ---------------------------------------------------------------------
|
2 | -- Instatiate the address swapping module
|
3 | ---------------------------------------------------------------------
|
4 | client_side_asm_emac0 : address_swap_module_8
|
5 | port map (
|
6 | rx_ll_clock => user_clk,
|
7 | rx_ll_reset => ll_reset_0_i,
|
8 | rx_ll_data_in => rx_ll_data_0_i,
|
9 | rx_ll_sof_in_n => rx_ll_sof_n_0_i,
|
10 | rx_ll_eof_in_n => rx_ll_eof_n_0_i,
|
11 | rx_ll_src_rdy_in_n => rx_ll_src_rdy_n_0_i,
|
12 | rx_ll_data_out => tx_ll_data_0_i,
|
13 | rx_ll_sof_out_n => tx_ll_sof_n_0_i,
|
14 | rx_ll_eof_out_n => tx_ll_eof_n_0_i,
|
15 | rx_ll_src_rdy_out_n => tx_ll_src_rdy_n_0_i,
|
16 | rx_ll_dst_rdy_in_n => tx_ll_dst_rdy_n_0_i
|
17 | );
|
18 |
|
19 | rx_ll_dst_rdy_n_0_i <= tx_ll_dst_rdy_n_0_i;
|
nach:
1 | ---------------------------------------------------------------------
|
2 | -- Instatiate the filter swapping module
|
3 | ---------------------------------------------------------------------
|
4 | client_side_asm_emac0 : filter_module
|
5 | port map (
|
6 | clk => user_clk,
|
7 | reset => ll_reset_0_i,
|
8 | rx_data_in => rx_ll_data_0_i,
|
9 | rx_sof_in_n => rx_ll_sof_n_0_i,
|
10 | rx_eof_in_n => rx_ll_eof_n_0_i,
|
11 | rx_src_rdy_in_n => rx_ll_src_rdy_n_0_i,
|
12 | rx_dst_rdy_out_n => rx_ll_dst_rdy_n_0_i,
|
13 | tx_data_out => tx_ll_data_0_i,
|
14 | tx_sof_out_n => tx_ll_sof_n_0_i,
|
15 | tx_eof_out_n => tx_ll_eof_n_0_i,
|
16 | tx_src_rdy_out_n => tx_ll_src_rdy_n_0_i,
|
17 | tx_dst_rdy_in_n => tx_ll_dst_rdy_n_0_i
|
18 | );
|
und entsprechenden Code für den Receiver findet ihr im Anhang.
Wenn ich in der Data_to_bram.vhd das finish signal manuell auf 1 setze
(also ohne auf SOF zu warten), dann sendet der Transceiver wie zu
erwarten ununterbrochen. Warte ich jedoch wie im Code auf SOF, passiert
garnichts wenn ich ein Paket hinschicke.
Vllt habe ich das Signaldiagramm zum LocalLink Interface falsch
interpretiert.