Open Cores MAC mit Avalon Schnittstelle auf NIOSII EPM Demo Board

#1204645
Lesenswert?

Hallo, ich weiss das viele Ähnliche fragen dieser Art schon beantwortet 
wurden, aber ein Forenbeitrag hilft mir machmal meine Probleme zu lösen.

ich versuche schon seit einiger Zeit den
Avalon OpenCores 10/100 Ethernet MAC:
http://www.niosforum.com/pages/project_details.php?p_id=115&t_id=18

auf meinen NIOS-II EPM Demo Board zu betreiben.

Der MAC auf deisem Board ist zum glück mit MII angebunden, aber ich
habe immer noch probleme ihn anzuklemmen:

1. Ich weiss nciht wozu der ausgang padOE gedacht ist (den gibt es im 
Schaltplan
des Demo Board nicht.)- kann ich den einfach offen lassen?
2. MDIO ist ein Bidirektionaler pin, wie wurstel ich den an den
ip-Core(Md_pad_from_ocm und Md_pad_to_ocm).

Liebe Grüsse
#1205512
Lesenswert?

Ok- er will den altsyncram für den Speicher des MAC auf eine weise 
initialisieren wie so mein alter
Cyclone 1 nicht unterstützt:

altsyncram  altsyncram_component (
    .wren_a         (wren_a     ),
    .clock0         (clock      ),
    .wren_b         (wren_b     ),
    .address_a      (address_a  ),
    .address_b      (address_b  ),
    .data_a         (data_a     ),
    .data_b         (data_b     ),
    .q_a            (q_a        ),
    .q_b            (q_b        ),
    .aclr0          (1'b0       ),
    .aclr1          (1'b0       ),
    .addressstall_a (1'b0       ),
    .addressstall_b (1'b0       ),
    .byteena_a      (1'b1       ),
    .byteena_b      (1'b1       ),
    .clock1         (1'b1       ),
    .clocken0       (1'b1       ),
    .clocken1       (1'b1       ),
    .clocken2       (1'b1       ),
    .clocken3       (1'b1       ),
    .eccstatus      (           ),
    .rden_a         (1'b1       ),
    .rden_b         (1'b1       )
);

was wäre eine alternative?
#1205538
Lesenswert?

Ah-- jetz komm ich der sache shcon näher:

unter "defparam" habe ich  altsyncram_component.intended_device_family = 
"Cyclone" gesetzt aber ich weiss nicht wodurch ich die BYPASS ersetzt 
soll-
die Dokumentation für Cyclon1 macht mich auch nciht schlauer....

 defparam
       CLOCK0_component.address_reg_b = "CLOCK0",
        altsyncram_component.clock_enable_input_a = "BYPASS",
        altsyncram_component.clock_enable_input_b = "BYPASS",
        altsyncram_component.clock_enable_output_a = "BYPASS",
        altsyncram_component.clock_enable_output_b = "BYPASS",
        altsyncram_component.indata_reg_b = "CLOCK0",
        altsyncram_component.intended_device_family = "Cyclone",
        altsyncram_component.lpm_type = "altsyncram",
        altsyncram_component.numwords_a = DEPTH,
        altsyncram_component.numwords_b = DEPTH,
        altsyncram_component.operation_mode = "BIDIR_DUAL_PORT",
        altsyncram_component.outdata_aclr_a = "NONE",
        altsyncram_component.outdata_aclr_b = "NONE",
        altsyncram_component.outdata_reg_a = "UNREGISTERED",
        altsyncram_component.outdata_reg_b = "UNREGISTERED",
        altsyncram_component.power_up_uninitialized = "FALSE",
        altsyncram_component.read_during_write_mode_mixed_ports = 
"DONT_CARE",
        altsyncram_component.widthad_a = clogb2(DEPTH-1),
        altsyncram_component.widthad_b = clogb2(DEPTH-1),
        altsyncram_component.width_a = 32,
        altsyncram_component.width_b = 32,
        altsyncram_component.width_byteena_a = 1,
        altsyncram_component.width_byteena_b = 1,
        altsyncram_component.wrcontrol_wraddress_reg_b = "CLOCK0";
#1205545
Lesenswert?

Ich habe jetzt einfach mal die "Bypass" durch "Normal" ersetzt:

 altsyncram_component.clock_enable_input_a = "NORMAL",
 altsyncram_component.clock_enable_input_b = "NORMAL",
 altsyncram_component.clock_enable_output_a = "NORMAL",
 altsyncram_component.clock_enable_output_b = "NORMAL",

Ich behersche keine Verilog und weiss nciht was das für auswirkungen 
haben kann.
Die Zeile
 CLOCK0_component.address_reg_b = "CLOCK0",
hatte ich falsch gepostet, es muss
altsyncram_component.address_reg_b = "CLOCK0",
  heissen.
#1213517
Lesenswert?

hmm jetzt hänge ich an der nächsten stellt-
es geht um einen Treiber für den TDK 78Q2120C Phy um ihn mit dem 
OpenCores MAC zubetreiben.... hat da jemand erfahrungen mit?

Laut dokumentation werden ja nur diese 4 Phys von dieser 
eth_ocm_phy_init();
auf anhiep unterstütz:

1.The Intel LXT972A 10/100 Ethernet PHY.
2.The Marvell 88E1111 10/100/1000 Ethernet PHY (used on the StratixIIGX 
Audio/Video development board).
3.The National Semiconductor DP83848C 10/100 PHY (used on the Cyclone 
III embedded development kit).
4.The Vitesse 8641 10/100/1000 Ethernet PHY.
#1214981
Lesenswert?

ok- ich versuche jetzt selbst einen treiber zu schreiben-
dabei ist mir aufgefallen das ich die register des Phy nicht
auslesen kann.
Diese werden doch über die diesen MDIO gelesen, der
eigendlich wie eine sPI schnittstelle funktioniert.

da der OpenCores MAC keinen Bidirektionalen MDIO hat,
sondern einen MDI und MDO wird wohl dieser MDOE nach dem ich
oben gefragt hatte, dafür
sein festzulegen wann geschrieben wird, und wann gelesen wir (????)

ich habs jetzt einfach mal mit VHDL so verdrahtet:
if (mOE = '0') then mio <= mO; else mI <= mio;  end if;
#1214993
Lesenswert?

> ich habs jetzt einfach mal mit VHDL so verdrahtet:
> if (mOE = '0') then mio <= mO; else mI <= mio;  end if;

das funktioniert so nicht, da der Ausgangstreiber nicht abgeschaltet
wird.

Mach es so, als concurrent statement:
1
MI <= mio;
2
mio <= mO when mOE = '0' else 'Z';

Cheers, Roger
#1217016
Lesenswert?

oh-- danke das war mir nicht richtig klar..
es wurde zwar übersetzt, aber der wert den ich dann aus dem
register gelesen habe war  immer 1 ... :-P

wenn ich ihn hochomig schalt wie du geraten hast bekomm ich aber
trotzdem einen festen wert (7FEF) für alle register... ?!??!

ich vermute ich hab da noch einen groben fehler....
#1222530
Lesenswert?

Hallo!

entschuldige die späte Rückmeldung- aber ich musste erst ein paar Sachen 
austesten-
Ich bin fast ab verzweifeln.

Oben der Trace war falsch-  wenn ich allerdings auf moE='1' reagiere
sieht das ergebnis- nicht besser aus (Anhang)

Das komische ist, das es hin und wieder funktioniert- ich hab schon das
Datenblatt von dem Phy rauf und runter gelesen, und alles mögliche 
versucht...
Es geht mal, und mal liest er nur 0xFFFF aus dem Phy Register.

Ich hab sogar mal ein Oszi an den MIO angeschlossen, und da kommt 
wirklich nichts raus,
genau wie im trace -- komisch ist nur, das ich zwischen takt 382 und 408
so ein komisches rauschen  (bis 50 mVolt)auf dem MIO pin hab - wo er ja 
eigentlich auf "hochohmig" geschaltet sein sollte...

ich denke mal es liegt am Phy? ich hab schon den resetausgang von dem
Phy auf den Ausgang geführt, und den Mac und den Phy gleichzeitig 
Resetet.
Ich habe verschiedene Netzteile probiert... ich weiß nicht mehr was ich 
noch testen soll...

Als ausgangstandart für MIO hab ich LVTTL 3,3 Volt ... könnte es damit
irgendwie zusammenhängen?
Im Phy Datenblatt steht CMOS....
Angehängte Dateien:
#1223965
Lesenswert?

Hallo!

jetzt hab ich die lösung gefunden --> eine kombination aus falschem 
datenblatt
und meiner Dummheit.

Die haben den quarz für den 25 Mhz takt von dem Phy einfach waggelassen 
(im datenblatt ist er aber eingezeichnet!)
wenn ich ihn mit ner PPL vom FPGA takte geht es dann ohne probleme....

...ich fragm ich nur warum es vorher auch manchmal funktioniert hat... 
;o)
#1224050
Lesenswert?

Das sieht schonmal ganz gut aus....

eth_ocm_phy_init(&ETHCHIP)

meldet:

[eth_ocm_phy_init] Found THK 78Q2120C PHY.
[eth_ocm_phy_init] Waiting on PHY link...OK. x=5558, PHY STATUS=782d
[eth_ocm_phy_init] Full Duplex is 0


ich frag mich jetzt wie es weiter geht----

Bevor ich einen Stack darauf aufsetzte sollte ich da nicht
besser versuchen von hand ein packet zu verschicken und
es z.B mit etherReal zu emfangen.....
Gast #1236083
Lesenswert?

Ich versuche jetzt den Niche-Stack zum laufen zu bringen,
aber ich beomme einen Transmit error geliefert:
1
  alt_iniche_init();
2
  netmain();


1
Copyright 1996-2008 by InterNiche Technologies. All rights reserved. 
2
eth_ocm_prep
3
Could not locate flash sector with MAC address.
4
prepped 1 interface, initializing...
5
[eth_ocm_init]
6
[eth_ocm_phy_init] PHY ID 0x0 e 70c5
7
[eth_ocm_phy_init] LXT972A not found!
8
[eth_ocm_phy_init] Found THK 78Q2120C PHY.
9
[eth_ocm_phy_init] Marvell 88E1111 PHY not found!
10
[eth_ocm_phy_init] DP83848C PHY not found!
11
[eth_ocm_phy_init] Waiting on PHY link...OK. x=18188, PHY STATUS=782d
12
[eth_ocm_phy_init] Full Duplex is 0
13

14
[eth_ocm_init] Configuring MAC address 26:d6:3f:10:3a:88
15

16
Opencores MAC post-init: MODER = 0x0000a003
17
IP address of et1 : 192.168.1.234
18
[eth_ocm_tx_isr] Transmit error 0x1627901


Ich denke mal das liegt an diesem selbsteingefügen   THK  phy...

bisher führe ich folgende befehle in ocm_phy_init aus:
1
 if (phyid == ETH_OCM_PHYID_TDK){
2
        found = 1;
3
        #if(ETH_OCM_DBG_LVL > 0)
4
        printf("[eth_ocm_phy_init] Found THK 78Q2120C PHY.\n");
5
        #endif
6
         
7
        // Restart autonegotiation
8
        dat = eth_ocm_read_phy_reg(base, phyadd, ETH_OCM_PHY_ADDR_CONTROL);
9
        dat |=  PCS_CTL_an_restart;
10
        eth_ocm_write_phy_reg(base, phyadd, ETH_OCM_PHY_ADDR_CONTROL, dat);
11
    }
12
    else{
13
        #if(ETH_OCM_DBG_LVL > 0)
14
        printf("[eth_ocm_phy_init] THK 78Q2120C not found!\n");
15
        #endif
16
    }
17
    #endif //ifdef ETH_OCM_PHYID_MVL
Gast #1236148
Lesenswert?

so- ich hatte das controllregister des TDK phy falsch beschrieben?

ich habe ihn jetzt auf halb Duplex und 100 Mbit/s gestellt- dann ist 
zumindest dieser fehler weg- aber das ergebniss ist das selbe, es gibt
irgendwann einen pufferüberlauf:
1
[eth_ocm_phy_init] Found THK 78Q2120C PHY.
2
[eth_ocm_phy_init] Waiting on PHY link... Autoneg FAILED, continuing anyway ...
3
OK. x=100002, PHY STATUS=780d
4
[eth_ocm_phy_init] Full Duplex is 0
5
[eth_ocm_init] Configuring MAC address 00:00:00:00:00:00
6

7
Opencores MAC post-init: MODER = 0x0000a003
8
IP address of et1 : 192.168.1.234
9
[eth_ocm_rx_isr] No free RX buffers (Swamping the NicheStack)
10
[eth_ocm_rx_isr] No free RX buffers (Swamping the NicheStack)
11
[eth_ocm_rx_isr] No free RX buffers (Swamping the NicheStack)
12
.
13
.
14
.
15
.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren