1 | if RST_IN = '1' or (CNT_EN = '1' and (RDCK_EN'event and RDCK_EN = '0')) then
|
2 | :
|
3 | elsif RDCK_EN = '1' and CNT_EN = '0' then
|
4 | :
|
Extreme-VHDL...
Das hast du selber erdacht, stimmts?
Sieh dir mal "übliche" funktionsfähige VHDL-Beschreibungen an, und
kontrollier die insbesondere auf den Takt. Kannst du deinen
Beschreibungsstil wiederfinden? Nein?
In dem Reset-Zweig ist Kombinatorik (und zudem ein Takt), das ist sehr
sehr bedenklich...
Und danach kommt kein Takt, sondern schlichte Kombinatorik...
Das hier ist sind gleich zwei Kombinatorische Schleifen:
1 | :
|
2 | elsif RDCK_EN = '1' and CNT_EN = '0' then
|
3 | RD_ADR <= RD_ADR - "1";
|
4 | RD_BIT_CNT <= RD_BIT_CNT + 1;
|
5 | :
|
6 | end if;
|
7 | :
|
Solange RDCK_EN = '1' und CNT_EN = '0' zählt RD_ADR Vollgas runter und
RD_BIT_CNT Vollgas hoch.
Weil deine Sensitivliste diese beiden Signale nicht enthält, ist die
Simulation falsch. Dort mehr zum Thema:
http://www.lothar-miller.de/s9y/categories/36-Kombinatorische-Schleife
EDIT: vergiss die Kombinatorische Schleife, da war ja nochmal ein Takt
versteckt...
1 | if RD_CLK_IN'event and RD_CLK_IN = '0' then
|
Das beste wäre an dieser Stelle ein Buch:
Reichardt&Schwarz, VHDL-Synthese