Ich versuche, einen ziemlich einfachen Handshake zwischen zwei Modulen zu verifizieren. Ein Modul ist auf einem langsamen Takt und löst "req" aus, das schnellere Modul sollte "ack" auf dem nächsten schnellen Takt erhöhen und es bis zum nächsten langsamen Takt posege halten. Das Endergebnis sieht wie folgt aus:e HVL (IEEE 1647): Expect-Ausdruck schlägt unerwartet fehl
Dies ist, wie ich schrieb das erwarten:
expect expect_ack_when_req_go is
(@req_rise_e) => @ack_rise_e
else dut_error("ERROR: ack expected to be asserted when req rises!");
* beide @req_rise_e und @ack_rise_e sind auf langsamen Takt abgetastet.
Das Ausführen des Simulators ergibt den Fehler, da der erste Ausdruck erfolgreich zu sein scheint, der zweite jedoch nicht. Dies ist trotz der Tatsache, dass wenn ich Ereignisse auf die Welle verfolgt, ich sehe, dass beide Ereignisse zusammen auftreten (wie in der Welle gesehen: event_req, event_ack).
Ich würde zuerst versuchen, eine Sampling Clock zum TE hinzufügen, dh 'erwarten ... (@req_rise_e => @ack_rise_e) @slow_clk;' – Thorsten
Bereits versucht es, und es hat nicht gut ... Außerdem denke ich, dass es redundant ist, da beide Ereignisse bereits durch langsamen Takt abgetastet werden: 'Ereignis req_rise_e ist Anstieg (smp.port_req $) @slow_clk_e;' 'Ereignis ack_rise_e ist Anstieg (smp.port_ack $) @slow_clk_e;' –
Ok, @ Thorsten es scheint, du hattest Recht! Es scheint, dass das Hinzufügen eines Abtasttakts für ** beide ** Signale zusammen etwas an der Art und Weise ändert, wie der Simulator den Prüfausdruck versteht. Ich habe es so geändert, wie Sie es vorgeschlagen haben, und es hat funktioniert ... Ich kann es aber nicht erklären ... Wenn Sie es verstehen können, sollten Sie es vielleicht als Lösung veröffentlichen? –