Funktionale und zeitliche Genauigkeit eines RTL-Modells

Ich bin manchmal wirklich verwirrt über die missbräuchliche Verwendung von Fachjargon in EDA/VLSI-Designartikeln und -Büchern. Ohne genaue Definitionen ist es Sache des Lesers, Interpretationen vorzunehmen, die manchmal sehr mehrdeutig und falsch sind

Wie,

  1. Was ist der Unterschied zwischen Pin-Genauigkeit und Bit-Genauigkeit?

    Gilt Pin-Genauigkeit für Kommunikationsschnittstellen und Bit-Genauigkeit für Berechnungen? Können sie nicht austauschbar verwendet werden?

  2. Ist es richtig zu sagen, dass ein RTL-Modell hat

    - Functional accuracy == Pin/Bit-accurate
    - Timing accuracy == cycle-accurate ??
    

    Das bedeutet, dass ein simuliertes RTL-Modell bei jedem einzelnen Taktzyklus präzise Ergebnisse liefert. Ich bin auf Artikel gestoßen, in denen der Autor sagt, Bit- und zyklusgenaue Modelle simulieren schneller als RTL-Modelle - was darauf hindeutet, dass RTL-Modellsimulationen relativ langsam sind, weil sie in Bezug auf Funktions- und Zeitgenauigkeit präziser sind.

Kann jemand erklären, wie (mit VHDL- oder Verilog-Code) ?

Link zu einem bestimmten Artikel oder zwei wäre nützlich. Ohne Kontext habe auch ich einige Schwierigkeiten, "Pin-Genauigkeit" zu interpretieren.

Antworten (1)

Die Begriffe ändern sich mit der Zeit, aber man muss sich zunächst die Definitionen ansehen, die von der Standardisierungsgruppe von SystemC TLM2.0 angenommen wurden. Die Arbeit führte zur Definition von zwei Codierungsstilen:

  • Locker getimt (zeitliche Entkopplung, nur ausreichende Timing-Details zum Booten von Betriebssystemen und zum Ausführen von Multi-Core-Systemen)
  • Ungefähr zeitgesteuert (Zyklus ungefähr, Zykluszählung genau, genügend Details für die Architekturerkundung)

1) Die Pin-Genauigkeit liegt auf der Schnittstellenebene, die der Kommunikationsteil des Modells ist. Die Modellierung auf Transaktionsebene verbirgt die Pins durch Verwendung von Funktionsaufrufen zwischen verschiedenen Prozessen. Die Funktionen werden entweder auf Kanalebene implementiert oder durch Exportmechanismen bereitgestellt. Solange Ihre Testbench/Modell nicht den Zweck hat, mit synthesebereitem RTL mit echten Pins zu kommunizieren, ist TLM in der Regel ausreichend und schneller in Bezug auf die Simulationszeit. Bit-Genauigkeit gibt an, wie Ihre Daten in Ihren Berechnungsprozessen dargestellt werden. Es ist die Genauigkeit Ihrer verschiedenen Datenpfade, seien es ALU-Operationen, DSP-Operationen, Pixeldarstellungen usw. Wenn Sie sich beispielsweise in SystemC nicht sehr um das Format Ihrer Daten kümmern, können Sie auch die integrierten verwenden C++-Datentypen wie int, um die Simulationszeit zu beschleunigen. Aber wenn Sie die Daten aus Sicht der Bitbreite, Trunkierung, Sättigung usw. untersuchen möchten, sollten Sie die in SystemC integrierten Datentypen verwenden und Ihre eigene Größe der Vektoren definieren. Nachteil: langsamere Simulationszeit. Nun können Sie sehen, dass beide Konzepte nicht unbedingt korreliert sind, da Sie beispielsweise in einer Situation sein können, in der Sie möchten, dass Ihr Berechnungsmodell datenformatgenau ist (Bit-Genauigkeit), während es Ihnen egal oder weniger wichtig ist, wie Sie es senden/produzieren für andere Prozesse und verwenden am Ende TLM-Funktionen (keine Pin-Genauigkeit) und umgekehrt.

2) Bei einem RTL-Modell bedeutet funktionale Genauigkeit nicht unbedingt Bit-Genauigkeit. (Wir waren uns einig, dass die Pin-Genauigkeit hier aus dem Spiel ist). Sie können die Korrektheit der Funktionalität sicherstellen, ohne eine definierte Bitbreite in Ihrem Modell zu verwenden. Wenn Sie einen Multiplikator modellieren, dann können Sie C=A*B in Ihr Modell schreiben und das Ergebnis wird mittels Simulationssoftware berechnet und mit dem Ergebnis Ihres vielleicht Pipelined RTL-Multiplikators verglichen. Die Funktion/das Ergebnis ist immer noch korrekt, solange Sie genügend Bits in Ihrem Modell verwenden, muss aber nicht genau gleich sein. Stellen Sie sich nun für die Timing-Genauigkeit vor, Sie hätten eine SPI-Schnittstelle, die alle 40 ns abgetastete Daten von einem ADC liest. In Ihrer RTL verwenden Sie eine Uhr, einen Zähler und eine Bedingung, um zu überprüfen, ob der Zähler genügend Zyklen erreicht hat, um 40 ns zu machen, und dann den Lesevorgang einzuleiten. Sie können dasselbe in Ihrem Modell mit einer einzigen Wait-Anweisung tun, ohne auch nur eine Uhr zu verwenden. Jetzt ist Ihr Modell nicht zyklusgenau, aber zeitlich genau :)

Danke für so eine schöne ausführliche Antwort. Ich bin mir bei TLM ein bisschen bewusst, dass Berechnung und Kommunikation orthogonale Anliegen sind. Daher verstehe ich Ihre Antwort auf die erste Frage. Aber ich bin etwas verwirrt über die Antwort auf die 2. Frage. Soweit ich weiß, kann in VHDL oder Verilog geschriebener Code als RTL bezeichnet werden, wenn er bitgenau, pingenau und zyklusgenau ist.
In einem Online-Artikel eetimes.com/document.asp?doc_id=1216014 heißt es: „Zyklus- und bitgenaue Modelle simulieren etwa 30- bis 100-mal schneller als die RTL-Modelle, die traditionell für die Verifizierung integrierter Schaltkreise verwendet wurden.“ - Es vergleicht RTL eindeutig mit dem zyklus- und bitgenauen Modell, als ob diese beiden Modelle unterschiedlich wären? Ich möchte wissen, warum die RTL-Simulation im Hinblick auf den Zyklus und das bitgenaue Modell langsam wird und wie unterscheiden sie sich?
Das folgende Dokument carbondesignsystems.com/… enthält drei Definitionen der Zyklusgenauigkeit, von denen eine die Genauigkeit der Zykluszählung ist.