Hallo alle,
ich habe eine Frage zur Flankenerkennung bzw. der Kommunikation zwischen
Prozessen.
Folgendes Szenario:
Ein Prozess, sensitiv auf ein Sensor Eingangssignal, das einen high /
low Pegel liefert. Dieser soll die Anzahl der Kanten auf diesem Signal
liefern, also mit jeder Flanke um eins erhöhen und bei vier wieder auf
Null zurücksetzen. Das Signal edgeCounter wird nur in diesem Prozess
beschrieben.
1 | process (oneorzero)
|
2 | --constant maxEdges : natural := 4;
|
3 | begin
|
4 | if (blockOccured = true) then
|
5 | if (edgeCounter = 4) then
|
6 | --edgeCounter <= 0;
|
7 | edgeCounter <= (others => '0');
|
8 | else
|
9 | edgeCounter <= edgeCounter + 1;
|
10 | end if;
|
11 | elsif (blockOccured = false) then
|
12 | --edgeCounter <= 0;
|
13 | edgeCounter <= (others => '0');
|
14 | end if;
|
15 | end process;
|
In einem anderen, synchronen Prozess möchte ich das Signal edgeCounter
lesen und das Signal blockOccured, vom typ boolean schreiben.
Quartus synthetisiert mir das ohne zu meckern. Wenn ich das jedoch das
Signal Tap Tool benutze und mir das ganze damit anschaue, sieht man,
dass der edgeCounter scheinbar willkürlich mit jeder Taktflanke der
Clock des synchronen Prozesses auf irgendwelche Werte gesetzt wird.
Jemand ne Idee?
Viele Grüße