www.mikrocontroller.net

Forum: FPGA, VHDL & Co. RGMII mit Cyclone IV + Probleme mit SignalTrap


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: nuts (Gast)
Datum:
Angehängte Dateien:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Moin Jungs,
ihr könnt mir bestimmt helfen, da ihr bestimmt auch schon auf solche 
Phänomene getroffen seid.

Ich wollte die letzte Zeit bisschen Ethernet mit meinem FPGA (speedgrade 
7) machen (welcher mit einem Mavell 88E1111 quatschen soll). MII 100M 
hab ich implementiert - geht auch. RGMII 100M hab ich implementiert und 
geht auch. Es gibt keine Widersprüche zwischen Modelsim, Signaltrap und 
Wireshark. Funktioniert alles soweit.
Ich hab allerdings jetzt beim Gigabit meine Probleme.

Weil 1GE mit RGMII ja gezeitmultiplext werden muss und kein 
doppelflankengesteuertes FF vorhanden ist, kann man ja entweder mit --> 
"case clk is when 1/0 => dann blaa;" multiplexen oder zwei Zähler, wobei 
der eine bei rising und der andere bei falling edge zählt, nehmen. Bei 
den Zählern hab ich dann eine "case ($Wert mod 2) is" angehängt.
Der Frame ist schon fertig in der architecure als vektor hinterlegt. 
Erste Variante sieht dann z.B. so aus :

transmit_data_muxed : process (tx_clk, frame_counter, start_tx, error_tx)
begin
  if start_tx = '1' then
    case tx_clk is 
      when '0' => 
        tx_data <= framedata_neu  (to_integer(frame_counter)*8 + 3 downto (to_integer(frame_counter)*8));
      when '1' =>
        tx_en <= '1';
        tx_data <= framedata_neu  (to_integer(frame_counter)*8 + 7 downto (to_integer(frame_counter)*8+4));
      when others =>
    end case;
  else 
    if tx_clk = '1' then 
      tx_en <= '0';
    end if;
  end if;
end process;


Die Startbedingung und Abbruchbedingung wird von einer FSM aus einem 
anderen Prozess gemacht.

when txSTATE =>
  if frame_counter = unsigned(framelength_in) then 
    tx_successful <= '1';
    start_tx <= '0';
    nextstate <= ifgSTATE;
  else 
    if start_tx = '1' then 
      frame_counter <= frame_counter + 1;
    end if;
    start_tx <= '1';
  end if;



tx_clk ist via PLL auf 125MHz geschraubt und der gtx_clk der am PHY 
anliegt ist um +90° Phasenverschoben 125MHz.

Nun sieht die ModelSim(ulation) auch sehr gut aus - tx_en geht mit der 
ersten x"5" an und hört mit dem letzten CRC-Nibbel auf.

Wireshark hat allerdings kein Paket empfangen, sondern lediglich CRC 
Fehler gemeldet, weswegen ich mit Signaltrap nach geschaut habe.

Mit Signaltrap messe ich eigentlich nur die Signale am PHY. Wenn ich nun 
Signaltrap mit 25MHz gtx_clk und 100MHz Referenztakt laufen lasse, sieht 
die Messung wie im Modelsim aus (siehe Bild). Sollte also passen.
Wenn ich aber auf 125MHz hoch gehe und als Referenztakt 250MHz angebe 
(ich muss ja bei steigender und bei fallender Flanke vom Sendetakt was 
messen/abtasten) kommt nur noch Bullshit raus. Ich schätze mal der 
Signaltrap macht da Scheiße und meine Ergebisse sind nicht brauchbar ?!


Ja, genau -
mich verwirren die Ergebnisse vom SignalTrap. Sind die wirklich kacke, 
oder ich einfach zu doof?
Seht ihr auf anhieb, warum mein RGMII nich funktionieren mag?

lg

Autor: Marius Wensing (mw1987)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Wieso nimmst du zur Ausgabe keinen DDR-Buffer? Das ist doch genau das, 
was du brauchst?! Also ein ALTDDIO_OUT... Kannst du dir im Megawizard 
erstellen.

Gruß
Marius

Autor: PittyJ (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Ich habe das auch mit einem vom Megawizard erstellten DDR Out Port 
gemacht.
Funktionierte am besten.


  -- this component is generated by the megawizard
  -- 3 downto 0 is the data nibble,
  -- 4 is the TX_Enable bit
  component DDR_OUT IS
    PORT
    (
      datain_h    : IN STD_LOGIC_VECTOR (4 DOWNTO 0);
      datain_l    : IN STD_LOGIC_VECTOR (4 DOWNTO 0);
      outclock    : IN STD_LOGIC ;
      dataout    : OUT STD_LOGIC_VECTOR (4 DOWNTO 0)
    );
  END Component DDR_OUT;



  DDROutport : DDR_OUT
  port map
  (
    datain_h(3 downto 0) => OutByte(3 downto 0),    -- lower data nibble
    datain_h(4)          => TXOut,            -- tx out
    datain_l(3 downto 0) => OutByte(7 downto 4),    -- upper data nibble
    datain_l(4)          => TXOut,            -- tx out
    outclock             => Clock_125MHz,        -- 125 mhz
    dataout(3 downto 0)   => NibbleOut,          -- data to the phy
    dataout(4)           => TX_CTL            -- tx enable to the phy
  );

Autor: nuts (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
ah Interessant. Von dem ALTDDIO hab ich im Alterapaper schon was gelesen 
und wollte das auch irgendwann mal noch ausprobieren. Werd ich wohl nun 
sicher machen ^^

Hehe, ich steh halt immer auf das "selber schreiben" aber bei 1GE weiß 
ich nicht woran es hängt und hab auch noch keine Idee wie ich es heraus 
finden kann.


Un zu SignalTrap - scheint nicht das Non-Plus-Ultra zu sein (zumindest 
wenn ich mich bei der Anwendung nicht zu blöd angestellt habe)


Grüße

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net