Datum:
Angehängte Dateien: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
Datum:
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
Datum:
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
);
Datum:
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