Gast
#4875446
In meiner Schaltung benutze ich einen RAM-Baustein, der von einem
Schreiber gefüllt und von einem Leser ausgelesen wird. Während des
Füllens darf der Leser nicht zugreifen, sonst gibt es Murks.
+---------+ +-----------+
| | | |
| RAM +---+---+ Leser |
| | | | |
+---------+ | +-----------+
| SO NICHT!
| +-----------+
| | |
+---+ Schreiber |
| |
+-----------+
Also benutze ich einen XC9572XL, der als Vermittler für den RAM-Baustein
dienen soll. (Natürlich macht der 9572 noch viel mehr.)
+---------+ +---------+ +-----------+
| | | | | |
| RAM +-------+ PROXY +-------+ Leser |
| | | (9572) | | |
+---------+ +----+----+ +-----------+
|
| +-----------+
| | |
+------------+ Schreiber |
| |
+-----------+
Das Problem ist nun, wenn ich meine Schaltung laufen lasse (also NICHT
in der Simulation), funktioniert zunächst alles wunderbar, aber jeweils
nach durchschnittlich 5-10 Minuten erhalte ich einen Lesefehler.
Hier ist die Implementierung von Lesen und Schreiben (soweit relevant):
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 | |
Der Schreiber setzt zu Beginn LOAD auf 0 und füllt das RAM. Nach einer Sekunde geht LOAD auf 1 und ändert sich nicht mehr. Das funktioniert problemlos. Der Leser legt pro Lesevorgang PROXY_ADDR an und setzt PROXY_SEL auf 0. Nach kurzer Zeit geht dann auch PROXY_READ auf 0, und die Daten werden gelesen. Danach geht erst PROXY_READ und dann PROXY_SEL auf 1. Ich freue mich, daß noch jemand bis hierhin mitgelesen hat. :-) Aber hat der- oder diejenige auch eine Idee, was diese sporadischen Lesefehler verursachen kann? Selbst wenn der Code wie oben reduziert ist, treten sie auf. Ich selbst habe nur zwei Theorien, die aber für mich unwahrscheinlich klingen. (1) Irgendeines der Signal kommt zu früh/zu spät an, bevor sich alles stabilisieren kann. Ich wüßte nur nicht, welches Signal das sein sollte. Die Bedingungen von RAM_ADDR und RAM_OE erfüllen sich früher, damit sich das RAM stabilisieren kann. (2) Die Signale kommen nicht rechtzeitig an. Es dauert einige Zeit, bis sich die Leseanforderung zum RAM und wieder zurück gekämpft hat. Aber PROXY_READ ist ca. 500 ns auf 0, was doch ausreichen sollte?! Ich bin noch ein ziemlicher VHDL-Anfänger und arbeite schon zwei Wochen an dem Problem, aber ohne Ideen komme ich hier nicht mehr weiter.