{"id":933,"date":"2015-11-12T15:42:00","date_gmt":"2015-11-12T15:42:00","guid":{"rendered":"http:\/\/coolt.ch\/notizen\/?p=933"},"modified":"2015-11-13T15:13:02","modified_gmt":"2015-11-13T15:13:02","slug":"vhdl-simulation-wait-statements","status":"publish","type":"post","link":"https:\/\/coolt.ch\/notizen\/vhdl-simulation-wait-statements\/","title":{"rendered":"VHDL Simulation: Wait statements"},"content":{"rendered":"<p>Neben den <a href=\"http:\/\/coolt.ch\/notizen\/vhdl-simulation-debuggen-per-konsole\/\">Assert statements<\/a> (Vergleiche) basiert die Simulation vor allem auf den richtigen Pausen.<\/p>\n<p><strong>Warten bis&#8230;<\/strong><br \/>\n&#8211;\u00a0 Zustand eintrifft \u00a0 <span class=\"lang:sh decode:true crayon-inline \">WAIT UNTIL (s_midi = &#8222;1011);<\/span>\u00a0 <span class=\"lang:sh decode:true crayon-inline\">wait until (clk = &#8218;1&#8216;)<\/span><br \/>\n.\u00a0 sehr wichtig f\u00fcr <strong>Koordination<\/strong> unter <strong>parallelen Prozessen<\/strong>.<br \/>\n&#8211;\u00a0 Signal wechselt \u00a0 \u00a0 <span class=\"lang:sh decode:true crayon-inline \">wait on s_enable_datat;<\/span><br \/>\n&#8211;\u00a0 Eines der Signale wechselt\u00a0 <span class=\"lang:sh decode:true crayon-inline  \">wait on s_note_1, s_note_2, s_note_3;<\/span><br \/>\n.\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (nicht 100% sicher, ob nur 1 Signale oder alle)<br \/>\n&#8211;\u00a0 Eine gewisse Zeit verstrichen ist <span class=\"lang:sh decode:true crayon-inline \">wait for 10 us<\/span>\u00a0 <span class=\"lang:sh decode:true crayon-inline\">wait for 1 * CLK_HALFPERIOD<\/span><br \/>\n&#8211;\u00a0 Unbestimmt <span class=\"lang:sh decode:true crayon-inline\">wait;<\/span>\u00a0 Hilft Simulation bei internen timing.<br \/>\n.\u00a0\u00a0 (Falls ein parameter noch nicht frei ist, wird gewartet.)<br \/>\n.\u00a0\u00a0 Ist z. B. sinnvoll nach <span class=\"lang:sh decode:true  crayon-inline \">read(file)<\/span>\u00a0;<\/p>\n<blockquote><p>waits d\u00fcrfen nur in processen eingebaut werden<\/p><\/blockquote>\n<p><strong>Einfluss auf den Programmfluss<\/strong><br \/>\n&#8211;\u00a0 Wait-Statements sind sequentiell und stoppen den laufenden Prozess f\u00fcr diese Zeit<br \/>\n&#8211;\u00a0 Stoppt der Prozess, werden die <strong>davor <\/strong>zugewiesenen<strong> Signale zugewiesen<\/strong><br \/>\n&#8211; Ein <em>wait<\/em> aktualisert auch den Zeitstempel. Ohne waits in einem <strong>Process<\/strong>, kann nie die abgelaufene <strong>Zeit<\/strong> zum Simulieren<strong> \u00fcbergeben<\/strong> (und das Programm beendet) werden. Der Prozess h\u00e4ngt in einem <em>endlos loop<\/em>.<br \/>\n&#8211; Ein (unbestimmtes) wait am Ende eines loop regelt selbst\u00e4ndig, wie lang das Programm warten kann, bis wieder oben begonnen werden kann. (So entfiel z.B. die Fehlermeldung: &#8222;Can&#8217;t open file. Already used.&#8220; Sobal die Datei wieder frei war, machte die Simulation weiter.<\/p>\n<p>&#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Neben den Assert statements (Vergleiche) basiert die Simulation vor allem auf den richtigen Pausen. Warten bis&#8230; &#8211;\u00a0 Zustand eintrifft \u00a0 WAIT UNTIL (s_midi = &#8222;1011);\u00a0 wait until (clk = &#8218;1&#8216;) .\u00a0 sehr wichtig f\u00fcr Koordination unter parallelen Prozessen. &#8211;\u00a0 Signal wechselt \u00a0 \u00a0 wait on s_enable_datat; &#8211;\u00a0 Eines der Signale wechselt\u00a0 wait on s_note_1, s_note_2, &hellip; <a href=\"https:\/\/coolt.ch\/notizen\/vhdl-simulation-wait-statements\/\" class=\"more-link\"><span class=\"screen-reader-text\">VHDL Simulation: Wait statements<\/span> weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[60,59],"tags":[],"_links":{"self":[{"href":"https:\/\/coolt.ch\/notizen\/wp-json\/wp\/v2\/posts\/933"}],"collection":[{"href":"https:\/\/coolt.ch\/notizen\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/coolt.ch\/notizen\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/coolt.ch\/notizen\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/coolt.ch\/notizen\/wp-json\/wp\/v2\/comments?post=933"}],"version-history":[{"count":4,"href":"https:\/\/coolt.ch\/notizen\/wp-json\/wp\/v2\/posts\/933\/revisions"}],"predecessor-version":[{"id":956,"href":"https:\/\/coolt.ch\/notizen\/wp-json\/wp\/v2\/posts\/933\/revisions\/956"}],"wp:attachment":[{"href":"https:\/\/coolt.ch\/notizen\/wp-json\/wp\/v2\/media?parent=933"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/coolt.ch\/notizen\/wp-json\/wp\/v2\/categories?post=933"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/coolt.ch\/notizen\/wp-json\/wp\/v2\/tags?post=933"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}