Hello, Guest the thread was called529 times and contains 20 replays

last post from andi6510 at the

Verilog always Block aus dem Block heraus triggern

  • 8\| Den always block ab Zeile 60 wirst Du so nicht durch die Synthese bringen. 8\|


    Mag sein, dass ein Verilog Simulator das sogar wie von die beabsichtigt simuliert, aber das Problem ist, dass dort eine algebraische Schleife entsteht, die spaetestens das Synthesetool abweisen wird.


    Wenn man sowas in Hardware bauen wuerde, dann ware das groesste Problem, dass die einzelnen bits eines grosseren Wortes nach einer Rechenoperation niemals genau gleichzeitig irgendwo ankommen. jedes bit hat seine eigene Laufzeit. Das Synthesetool stellt nur sicher, dass alle bits innerhalb einer clockperiode beim nachsten Flip-Flop angekommen sind. In deinem Fall gibt es dieses FF aber nicht, sondern das Ergebnis wird einfach gleich wieder verwendet. Jetzt stell Dir mal vor, was mit deiner Schaltung passiert, wenn ueberall Laufzeiten waeren und alle bits irgenwie unterschiedlich ankommen. Da kommt nur noch Kuddelmuddel raus.


    Der Verilogsimulator beruecksichtigt keine Laufzeiten. Daher kann es sein, dass es damit sogar funktioniert, denn er unterteilt die Simulation in Simulationsschritte, die dann streng genommen die Logik wieder synchron machen, weil ja nach jedem Schritt wieder ein sauberer Zustand hergestellt ist, so als wenn eine clock im Spiel waere.


    Ich wuerde den shifter direkt in verilog formulieren, so dass er in einem Clockzyklus berechnet wird. Generiert zwar relativ viel Logik gemessen an den Verilogzeilen, die hin geschrieben werden, aber alles andere wuerde auch den Risc-Gedanken (ein Zyklus pro Opcode) widersprechen.


    Oder Du machst es wie die alten 8-Bitter: Der 6502 kennt auch nur den shift um ein bit (ASL/ROL/LSR/ROR) - will man mehrere bits schieben, dann musst Du eben mehrmals den opcode ins Programm schreiben (LSR; LSR; LSR;)