Hallo leute, Ich habe mein custom design(Lattice ECP3-LFE3-35EA-7FTN256I) aus ein vom Lattice Reference Design(Versa ECP3-LFE3-35EA-8FN484C) abgeleitet. Natürlich musste ich dann die Projekte-Eigenschafte anpassen: Family Device Performance grade Package type Operation condition Damit diese an mein neuen Baustein stimmen. Bisher war die Entwicklung und einfacher Test super gelaufen. Die großte Änderung die ich implementiert habe betrifft nur das wb_tlc_dec.v module in dem die IORequest übertragen werden im gegensatz zu Reference Design wo nur Memory Request behandelt werden. 4000-43ff: IO MAP (UART1,UART2) 5000-xxxx: MMAP (sonstige) Dann habe ich seit letzter Montag das folgende Problem: 1)Lesen aus ein UART-Register durch loop bis 1000 klappt nicht Er liest problemlos bis 237 dann 5 Mal 0xFF danach bleibt das System hangen. 2)Wenn ich nun der Memory-Space 4000-43ff als MMAP definiere und der Test durclaufen lasse (20Uhr - 7 Uhr Morgen), wird die richtige Werte 0xC1 gelesen bis 4000 000 loops dann meldest sich der Test Treiber ab. (Kling für mich as Timer Lattice IPCore bin ich nicht sicher) Deswegen hätte ich gern ein Feedback von euch. Woran kann es liegen ? beigefügt ist das einzige Module das ich geändert habe um die IO Request zu ermöglichen. Ich bitte um Hinweise schon 4 Tagen ohne Lösung..... es gelingt mir bis(UART1,UART2)
Gast
#3552738
Sind alle asynchronen Signale richtig einsynchronisiert? Duke
Mein Logik Analyser sieht gut aus. Da ich mit dem Counter bis 234 getriggert habe.(Reveal_Inserter.PNG und LogikAnalyser_Output.png) Und 0xC1 Data ist im TLP Packet.(Sieht Bilder) Hinzu habe ich auch mein topdesign damit du siehst wie die Clock verteilt sind. Die UARTs brauchen 25 MHz. Die habe ich über PLL erzeugt. Ich möchte mal das Lattice Basic Reference Design machen und nur IO Request im Module wb_tlc_dec.v zulassen. Und der selbe Test beim Lesen GPIO Adresse 0002 durführen. Ob ich problemlos 04 bis 1000 gelesen wird? Im gpio Module steht :
1 | |
2 | |
3 | |
Oder bin ich auf dem falschen Lösungsweg ? vielleicht Routing Problem ?
Gast
#3552843
Das Verhalten deutet auf einen PCIe Protokollfehler. Erstens, das Naheliegende: Was sagt die Timinganalyse. sind die für PCIe nötigen 125 MHz noch erfüllt? Zweitens: Änderung Memory Access auf IO Access ist nicht trivial, IO Writes brauchen im Gegensatz zu Memory Writes eine Completion. Und Intelchipsätze reagieren allergisch auf fehlende Completions. Die Erzeugung von Completions ist beim Lattice Core in der Verantwortung des Userscodes. Ob der Latticewrapper dessen Source du hast, die Erzeugung von Completions für IO Writes enthält habe ich nicht nachgeprüft. Davon abgesehen: IO Access ist angefaultes Legacy!
OK ! beigefügt ist meine Timing Analysis: sieht diese versprechend aus oder sieht man kritishe Punkte drin ? Nach der Lattice Beschreibungen sind die Completions TLP in folgende Module behandelt: wb_tlc_cpld.v und wb_tlc_cpld_fifo.v Und es scheint als Memory sowie IO TLP Completion generiert werden. Aber ich bin noch nicht ganz sicher, ich analysiere noch den Inhalt.
Gast
#3552927
Es geht nicht um die IO Timing Analyse, die ist relativ unwichtig. Place&Route Trace ist was du dir anschauen MUSST
Gast
#3552944
> > Und es scheint als Memory sowie IO TLP Completion generiert werden. Aber > ich bin noch nicht ganz sicher, ich analysiere noch den Inhalt. Bei Memoryaccess braucht nur Read eine Completion, die gelesenen Daten müssen ja zurück :-) Memory Write ist postet und braucht keine. Bei IO Access mus auch für Write eine Completion erzeugt werden, ohne Daten. (siehe PCIe Spec 2.2.9)
Danke für den Hinweis! Hier meine Routing Report. Gibt es Problem damit ? Wenn ja wie kann man es verbessern ?
OK , Wenn ich ein IORead mache, habe ich den richtige Daten. Das Problem tritt nur wenn nacheinander gelesen wird. Also in meinem Verstandnis werden IO TLP vom cpld Module behandelt aber nicht vollstanding oder bist du andere Meinung ?
Gast
#3553009
keller thomas schrieb: > Danke für den Hinweis! > > Hier meine Routing Report. Gibt es Problem damit ? > Wenn ja wie kann man es verbessern ?
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
Das sieht ok, aus. Aber die 125 MHz sind nur ganz knapp erfüllt, d.h. du musst bei jedem bauen überprüfen ob nich alles in Ordnung ist.
1 | |
2 | |
3 | |
Ausserdem:
1 | |
96% ist IMO zu wenig, da fehlen Constraints.
Gast
#3553018
keller thomas schrieb: > OK , > > Wenn ich ein IORead mache, habe ich den richtige Daten. Das Problem > tritt nur wenn nacheinander gelesen wird. > Also in meinem Verstandnis werden IO TLP vom cpld Module behandelt aber > nicht vollstanding oder bist du andere Meinung ? Dein wb_tlc_cpld.v erzeugt nur die Completions für die WB Lesezugriffe. Überprüfe mal ob für die IO Zugriffe eventuell auch UR Completions erzeugt werden (UR = Unsupported Request) (Das ganze schreit nach einem PCIe Analyzer)
Nach deiner Anmerkung habe ich nochmals das ganze angeschaut. Die Äderung die ich im Module wb_tlc_dec.v gemacht habe allein reicht nicht für eine effiziente Behandlung der IO TLP Transaction. Sondern folgende Module sollen auch entprechend für eine effiziente IO Completion geändert werden: UR.v ip_rx_crpr.v 1 ) also insgesamt 3 Module meiner Meinung nach angepasst werden. Bisher habe ich nur wb_tlc_dec.v mit folgende hinzugefügt um IO Request zu laasen:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
2) Wie kann man die Contraints verbessern ?
Ich habe folgende Ändeung gemacht und hoffe das Problem gelöst zu haben. Also ich bin gespannt auf das Ergebnis mit dem Test. Im UR.v Module:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
Und im iprxcrpr.v Module:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
Und die damalige Änderung gilt immer also im wb_tlc_dec.v Module
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
Gast
#3553520
Das ist falsch!
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
IO Writes sind im Gegensatzt zu Memorywrites NON POSTET, d.h. dier muss genau wie im UR stehen:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
Ausserdem fehlt noch die Erzeugung der IO Write Completions, dafür gibt es im Latticecode kein Vorbild! (Memory Writes brauchen das nicht)
IO transactions requests are restricted to 32 bits of address using the 3DW TLP Header format, and should only target legacy devices. Since PCI Express still permits either 32 bit or 64 bit memory addressing but the size of System IO Map is limited to 32 bits(4GB),although in many system only lower 16 bits(i.e 64 KBs) are used. So you can customize the existing code as per your requirement in order to account for IO request and should be responsible for sending an Unsupported Request completion based on the capabilities of your customized design. For example, if in case your custom design only works with IO transactions and not memory transactions, then memory transactions are unsupported. These types of transactions require an Unsupported Request completion. However there are several instances in which an Unsupported Request must be generated by the user. These conditions are listed below. • rx_us_req port goes high with rx_st indicating a Memory Read Locked, Completion Locked, or Vendor Defined Message. • Type of TLP is not supported by the user's design (I/O or memory request) Table 2 in ipug75 on page 35 shows the types of unsupported TLPs which can be received by the IP core and the user interaction. Link to download ipug75 http://www.latticesemi.com/~/media/Documents/UserManuals/MQ/PCIExpress11x1x4IPCoreUsersGuide.PDF#search=%22ipug75%22
Hallo Hier die Anworte vom Lattice Support: IO transactions requests are restricted to 32 bits of address using the 3DW TLP Header format, and should only target legacy devices. Since PCI Express still permits either 32 bit or 64 bit memory addressing but the size of System IO Map is limited to 32 bits(4GB),although in many system only lower 16 bits(i.e 64 KBs) are used. So you can customize the existing code as per your requirement in order to account for IO request and should be responsible for sending an Unsupported Request completion based on the capabilities of your customized design. For example, if in case your custom design only works with IO transactions and not memory transactions, then memory transactions are unsupported. These types of transactions require an Unsupported Request completion. However there are several instances in which an Unsupported Request must be generated by the user. These conditions are listed below. • rx_us_req port goes high with rx_st indicating a Memory Read Locked, Completion Locked, or Vendor Defined Message. • Type of TLP is not supported by the user's design (I/O or memory request) Table 2 in ipug75 on page 35 shows the types of unsupported TLPs which can be received by the IP core and the user interaction. Link to download ipug75 http://www.latticesemi.com/~/media/Documents/UserManuals/MQ/PCIExpress11x1x4IPCoreUsersGuide.PDF#search=%22ipug75%22
Hallo, nun meine Frage glaubst du dass, das Problem nur mit Änderungen von 2 Modules: UR.v und wb_tlc_dec.v gelöst wird ? Da Lattice Support nicht über das Module iprxcrpr.v spricht ?
Hallo Ich verstehe nicht was ich falsch gemacht, da du das selbe Code eingefügt hast. Kannst du bitte genauer meinen Fehler erlautern ?
Gast
#3554474
keller thomas schrieb: > Hallo > > Ich verstehe nicht was ich falsch gemacht, da du das selbe Code > eingefügt hast. Du musst genauer hinschauen, ist nicht derselbe.
1 | |
2 | |
versus
1 | |
2 | |
> Kannst du bitte genauer meinen Fehler erlautern ?
Das geht sehr ins Eingemachte, und nur einfach zu erkären wenn du weisst
wie bei PCIe Flusskontrolle implementiert wird, was der Unterschied
zwischen Postet und Non Postet Requests ist, und noch einiges mehr.
Hallo Gute Nachricht! Es tut schon beim Lesen!!!!!!!!! Habe ich 100 000 000 Loop problemlos gelesen! Nun soll ich auch Write schaffen und da ist mir beim Credit Processing noch nicht klar. reicht folgende Code für IO Write ?
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
Gast
#3554490
keller thomas schrieb: > Hallo Hier die Anworte vom Lattice Support: > IO transactions requests are restricted to 32 bits of address using the > 3DW TLP Header format, and should only target legacy devices. Dem schliesse ich mich an, angefaultes stinkendes Legacy. Warum willst du es eigentlich machen? DOS 3.3? Windows 95/98? > > Since PCI Express still permits either 32 bit or 64 bit memory > addressing but the size of System IO Map is limited to 32 > bits(4GB),although in many system only lower 16 bits(i.e 64 KBs) are > used. > Das bedeutet nur, dass du IO Requests mit 4 DW Headern als UR ablehnen sollst. Ist relativ unkritisch, da diese normalerweise nicht vorkommen sollten. (Ausser in Verifications Umgebungen)
Gast
#3554494
keller thomas schrieb: > Hallo Gute Nachricht! > > Es tut schon beim Lesen!!!!!!!!! > Habe ich 100 000 000 Loop problemlos gelesen! > Nun soll ich auch Write schaffen und da ist mir beim Credit Processing > noch nicht klar. > > reicht folgende Code für IO Write ? Nein, IO Write braucht wie schon mehrmals erwähnt eine Completion (nur Header ohne Daten)!
Hilfe! Es klappt immer noch nicht mit dem IO-Write: So sieht mein ip_rx_crpr.v Module aus. Aber dann hat mein Board nicht mehr gebootet:
1 | |
2 | |
3 | |
4 | |
BAR-0 is IO MAP BAR-1 is MMAP Was mache ich falsch da. Ich habe nur Header da gelassen oder fehlt mir noch was ?
Gast
#3554889
Du hast etwas falsch verstanden, es geht nicht um den empfangenen Header der war vorher schon in Ordnung. Completion ist ein Antwortpacket das NACH einem IO Write generiert werden muss, genau wie bei IO Read aber ohne Daten. Am einfachsten dürfte es sein, das in wb_tlc_cpld.v und wb_tlc_cpld_fifo.v mit einzubauen, aber beachten dass es bei Memory Writes NICHT gemacht wird.
Hallo, letztendlich habe ich das Module ip_rx_crpr.v wie folgenden gelassen. Folglich klappt es im UART-Register zu schreiben.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
Gast
#3560775
Was ist mit der Completion?
Es hat geklappt aber ich habe das Gefühl dass, es eine kleine Verzögerung beim IOWrite gibt. Sonst es funktioniert... Hat das wahrscheinlich mit der Completion zu tun ? Wenn dann wie kann ich diese verbessern ?
Hallo, bitte wie kann ich IO Completion implementieren, dafür habe ich leider kein Ausgangspunkt.
Gast
#3561771
keller thomas schrieb: > Es hat geklappt aber ich habe das Gefühl dass, es eine kleine > Verzögerung beim IOWrite gibt. > Sonst es funktioniert... > Hat das wahrscheinlich mit der Completion zu tun ? Ja hat es. Der Intelchipsatz, ist da gutmütig, d.h. er macht nach einem Completion Timeout einfach weiter. (Beim Lesen bekommt man dann 0xFFFFFFFF). Es gibt aber andere. (Nvidia Ion friert ein). Siehe auch ein frühres Posting: Beitrag "Re: Lattice ECP3: IO Read Begrenzung"
OK das habe ich auch verstanden! Wo was getan werden soll ist meine Frage. Also ich weiße nicht wo ich damit anfangen soll.
Gast
#3562706
keller thomas schrieb: > OK das habe ich auch verstanden! > Wo was getan werden soll ist meine Frage. Also ich weiße nicht wo ich > damit anfangen soll. Chapter 2.2.9 in der PCIe Spec 2.1 lesen und verstehen. Dannach verstehen was in der wb_tlc_cpld.v genau gemacht wird. Wenn das klar ist, versuchen die FSM in der wb_tlc_cpld.v zu ergänzen.
Danke für den Hinweis und ich werde es machen. Nach der Implementierung und Test melde ich mich......
Hallo, Nach dem Lesen von soll folgende angepasst werden:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
man soll IO Write auch hier berücksichtigen also nicht nur Memory Read wie jetzt der Fall ist oder ? Das werde ich Morgen implementieren und testen ..
So sieht meine Completion für IOWrite TLP aus:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
Damit bin ich mit der IOWrite Completion fertig oder hast du weitere Anmerkung?
Hat leider nicht geklappt, IORead klappt damit nicht mehr Hier meine neue Implementierung:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
Auf Hinweis würde ich mich freuen...
Gast
#3571613
rx_din[15:8] und rx_bar_hit sind ganz sicher nicht mehr gültig. Du brauchst ein zusätzliches Signal entsprechend "read", das ein iowrite durchreicht. tran_length muss bei write completions auf 0 gesetzt werde, es wird ja nur der Header gesendet. "bc" muss 4 sein, aber ob für "la" die byte enables ausgwertet werden sollen kann ich dir jetzt nicht mit Sicherheit sagen, ich vermute nein. (Immer daran denken, iowrite ist verfaultest Legacy, und die Behandlung von cfgwrites nimmt uns der core ab)
Es gelingt mir nicht Tabelle 2-21 und 2-22 in der Spezifikation zu finden. schaue Mal http://iu4ever.org/files/Skhemotekhnika_JEVS9/1697_Skhemotekhnika_JEVS9_PCI_Express_Base_r2_1.pdf Kannst du bitte mir diese 2 Tabelle zukommen lassen ? Ich wäre denkbar
Wenn dies sich au Power Management Messages bezieht dann habe ich.... Ich habe mit TLP gerechnet und nicht mit Power Message da ich keine Zusammenhang sehe.
Gast
#3571737
Die Tabellennumerierung im Latticecode bezieht sich offensichtlich noch auf die PCIe Spec 1.1 In der 2.1 Spec sind das jetzt die Tabellen 2.31 und 2.32
Danke, Mit tran_length = 0 verstehe ich aber bc =4 ist mir unklar weil: wenn First_BE = 0xF = 1111 dann BC=4 aber hier habe ich mein IOWr Paket angeschaut und First_BE=0x1=0001 also würde ich damit BC= 1 erwarten oder ?
Gast
#3571884
> > Mit tran_length = 0 verstehe ich aber bc =4 ist mir unklar weil: > wenn First_BE = 0xF = 1111 dann BC=4 > > aber hier habe ich mein IOWr Paket angeschaut und First_BE=0x1=0001 also > würde ich damit BC= 1 erwarten oder ? In 2.9 Completion Rules steht, dass der BC für alle Completions ausser Memory Reads (und AtomicOPs hier irrelevant) 4 sein muss. Das schliesst auch IO Reads mit ein!
Hallo , Ich habe schon fast alles bisher probiert. Leider klappt es immer noch nicht. Ich bitte um Hilfe!
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
68 | |
69 | |
70 | |
71 | |
72 | |
73 | |
74 | |
75 | |
76 | |
77 | |
78 | |
79 | |
80 | |
81 | |
82 | |
83 | |
84 | |
85 | |
86 | |
87 | |
88 | |
89 | |
90 | |
91 | |
92 | |
93 | |
94 | |
95 | |
96 | |
97 | |
98 | |
99 | |
100 | |
101 | |
102 | |
103 | |
104 | |
105 | |
106 | |
107 | |
108 | |
109 | |
110 | |
111 | |
112 | |
113 | |
114 | |
115 | |
116 | |
117 | |
118 | |
119 | |
120 | |
121 | |
122 | |
123 | |
124 | |
125 | |
126 | |
127 | |
128 | |
129 | |
130 | |
131 | |
132 | |
133 | |
134 | |
135 | |
136 | |
137 | |
138 | |
139 | |
140 | |
141 | |
142 | |
143 | |
144 | |
145 | |
146 | |
147 | |
148 | |
149 | |
150 | |
151 | |
152 | |
153 | |
154 | |
155 | |
156 | |
157 | |
158 | |
159 | |
160 | |
161 | |
162 | |
163 | |
164 | |
165 | |
166 | |
167 | |
168 | |
169 | |
170 | |
171 | |
172 | |
173 | |
174 | |
175 | |
176 | |
177 | |
178 | |
179 | |
180 | |
181 | |
182 | |
183 | |
184 | |
185 | |
186 | |
187 | |
188 | |
189 | |
190 | |
191 | |
192 | |
193 | |
194 | |
195 | |
196 | |
197 | |
198 | |
199 | |
200 | |
201 | |
Gast
#3574593
Wo kommt "rx_din" her? wenn es einfach rx_din vom PCIe core ist, kann es nicht gehen. Der Wert den du da abfragen willst, liegt da schon seit vielen Takten nicht mehr an.
Schau Mal ganz unten dem folgende Module. Ich habe einfach rx_din hinzugefügt als neu input für das Module wb_tlc_cpld. Es wäre vielleicht einfacher wenn man folgende Signale ausnutzen würde:
1 | |
2 | |
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
68 | |
69 | |
70 | |
71 | |
72 | |
73 | |
74 | |
75 | |
76 | |
77 | |
78 | |
79 | |
80 | |
81 | |
82 | |
83 | |
84 | |
85 | |
86 | |
87 | |
88 | |
89 | |
90 | |
91 | |
92 | |
93 | |
94 | |
95 | |
96 | |
97 | |
98 | |
99 | |
100 | |
101 | |
102 | |
103 | |
104 | |
105 | |
106 | |
107 | |
108 | |
109 | |
110 | |
111 | |
112 | |
113 | |
114 | |
115 | |
116 | |
117 | |
118 | |
119 | |
120 | |
121 | |
122 | |
123 | |
124 | |
125 | |
126 | |
127 | |
128 | |
129 | |
130 | |
131 | |
132 | |
133 | |
134 | |
135 | |
136 | |
137 | |
138 | |
139 | |
140 | |
141 | |
142 | |
143 | |
144 | |
145 | |
146 | |
147 | |
148 | |
149 | |
150 | |
151 | |
152 | |
153 | |
154 | |
155 | |
156 | |
Hallo hier einen Hinweis zu la Signal:(2.2.9 Completion Rules im PCIe Specification 2.1) Damit muss man la =0 • Lower Address[6:0] – lower byte address for starting byte of Completion ♦ For Memory Read Completions, the value in this field is the byte address for the first enabled byte of data returned with the Completion (see the rules in Section 2.3.1.1) ♦ For AtomicOp Completions, the Lower Address field is reserved. 5 ♦ This field is set to all 0’s for all remaining types of Completions. Receivers may optionally check for violations of this rule. See Section 2.3.2, second bullet, for details. Ich habe auch dies aus von Xilinx Completion Module (Sieh unten)
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
Gast
#3578453
keller thomas schrieb: > Schau Mal ganz unten dem folgende Module. Ich habe einfach rx_din > hinzugefügt als neu input für das Module wb_tlc_cpld. rx_din ist wie schon mehrfach gesagt ungeignet. Du musst dir den ganzen Ablauf in Takten vor Augen halten, sonst wird das nichts mit deiner Zukunft als VHDL/Verilog Entwickler. > Es wäre vielleicht einfacher wenn man folgende Signale ausnutzen würde: >
1 | |
2 | |
3 | |
Schon besser, aber beachte dass das write das dem cpld übergibst nur einen Takt lang sein sollte, (am Ende des WB Cycles) Ausserdem ganz wichtig, wenn du es wie bei read nur aus den Whishbone signalen generierts, kannst du nicht zwischen Mem und IO Writes unterscheiden. Und bei Mem Writes darfst du keine Completions generieren. keller thomas schrieb: > Hallo hier einen Hinweis zu la Signal:(2.2.9 Completion Rules im PCIe > Specification 2.1) > Damit muss man la =0 Da bin ich mir nicht sicher, aber ich habe bislang keine Write Completions (IO bzw CFG) implementieren müssen, und damit das ganze auch nicht detailiert untersucht. Leg dir einen PCIe Analyzer zu, dann kannst du schauen was bei CFG Writes gemacht wird.
Hallo , Habe was festgestellt, beim Read aus MemoryMap Bereiche also BAR1 wird das Signal read gesetzt und Completion auch. Aber beim Read aus IO-Bereiche wird das Signal Read niemals gesetzt. Es scheint als es ein Filter irgendwo noch gibt der nur MWr/Mrd ermöglicht. Schaue Mal bitte kurz die Bilder aus LogicAnalyser aus
Gast
#3578722
keller thomas schrieb: > Hallo , > > Habe was festgestellt, beim Read aus MemoryMap Bereiche also BAR1 wird > das Signal read gesetzt und Completion auch. > Aber beim Read aus IO-Bereiche wird das Signal Read niemals gesetzt. > Es scheint als es ein Filter irgendwo noch gibt der nur MWr/Mrd > ermöglicht. Da es schon mal funktioniert hat, mit Backup bzw älterem Zustände aus der Versionsverwaltung vergleichen. > Schaue Mal bitte kurz die Bilder aus LogicAnalyser aus Um aus denen schlau zu werden, müsste ich mich mit allen Details der Implementation beschäftigen. Dazu habe ich keine Zeit. Davon abgesehen ist der Ausschnutt zu kurz: Wo ist der empfangene Request? (Ich habe einen eigenen Wrapper und verwende nicht den von Lattice).
Hallo Hier ein voll Ausschnutt (Request+ Completion) Bei IO-Read TLP wird die richtige Wert gelesen (cpld_fifo/din = cpld/dout = 0x0303)ohne Header. Read Signal wird niemals gesetzt obwohl die richtige Data zuruckkommen. Bei Memory-Read wird 0xFF00 mit entprechende Header gelesen als Completion. Hat diese vielleicht mit meinen ip_rx_crpr.v und UR_gen.v Module? Auf Hinweis werde ich denkbar da, ich seit 1 Woche daran arbeite.
Zusammengefasst unten Linux Ausgabe: Beim IO-Read wird 0x03 an die Adresse 0x4000 gelesen und Beim Memory-Read wird 0xFF an die Adresse 0x106004 gelesen
Bei IO-Read bleibt der Counter ( word_cnt ) vom cpld.v Module bei 0 aber trotzdem wird die richtige Daten gelesen. Und beim IO-Write bleibt der Counter immerhin bei 0
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
68 | |
69 | |
70 | |
71 | |
72 | |
73 | |
74 | |
75 | |
Dann lässt sich die Frage stellen Warum ? Wie soll ich ihm erzwingen rein zu gehen ? Es gibt meiner Meinung nach eine Zeilecode wo nur Memory Requests erlauben werden. Auf Hinweise würde ich mich freuen
Ich hätte erwartet dass, das read Signale beim IO-Read zu 1 geht . Mein naschter Schritt ist der Grund zu verstehen oder ?
Gast
#3582111
keller thomas schrieb: > Ich hätte erwartet dass, das read Signale beim IO-Read zu 1 geht . > Mein naschter Schritt ist der Grund zu verstehen oder ? Offensichtlich wird in wb_intf der IORead nicht erkannt
Hallo, Ich habe aus ein ECP3 PCI Express Basic Demo Design mein Design abgeleitet(also MMAP basiert ohne IO). Beim Test lauft alles gut bis etwa 8 Stunden und bleibt hangen. Ist dies ein Hardware Timer oder Timing Constrainsts ? beigefügt is mein Place_Route_Trace_Report zu finden. Auf Anmerkungen würde ich mich freuen..
Gast
#3704355
keller thomas schrieb: > Beim Test lauft alles gut bis etwa 8 Stunden und bleibt hangen. Hört sich nach fehlender PCI Express Lizens an. (Eval Timer) Disable mal in den Strategy Settings unter Translate Design die Hardware Evaluation.
Eigentlich habe ich eine Lizenz. Nur habe ich mein Design vom ReferenzDesign danach zusatzliche Komponente addiert. Wie komme ich drauf also unter welche Menu (Sieh Bild)
Hallo, Unter Project/Active Strategy/Translate Design Setting habe ich folgende: Name Type Value Hardware Evaluation List Enable Was soll ich denn hier ändern durch was ??
OK habe ich es Disable Nun teste ich wieder .........
Hallo, Nach der Änderung Hardware Evaluation List Disable Habe ich während der neuen Kopilierung folgende Meldung erhalten: Your License has expired. Feature has expired. Feature: LSC_IP_pcie_x1_e3_ipe Expired date 16-jan-2013 Danach bleibt meine Kompilierung hängen.Somit ist mir klar dass, es um eine Lizenz Problem geht oder ?
keller thomas schrieb: > Your License has expired. > Somit ist mir klar dass, es um eine Lizenz Problem geht oder ? Sieht wohl so aus... Die Lizenz des Versa-Kits gilt nur für 1 Jahr. Dann musst du dir ein neues Kit kaufen... ;-)
Gast
#3704530
Lothar Miller schrieb: > keller thomas schrieb: >> Your License has expired. >> Somit ist mir klar dass, es um eine Lizenz Problem geht oder ? > Sieht wohl so aus... > > Die Lizenz des Versa-Kits gilt nur für 1 Jahr. Dann musst du dir ein > neues Kit kaufen... ;-) Für Diamond selbst hat er ja eine gültige Versa-spezifische Lizenz, die freie Weblizenz gilt normalerweise nicht für die ECP3. Also einfach mal nachfragen. Auch bei der Verlängerung regulären Volllizenz für Diamond, muss man die IP Lizenzen jedesmal manuell nachtragen lassen.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.






