DE202015009978U1 - Programmcode zum Implementieren eines effizienten Entropie-Decoders unter Verwendung von High-Level-Synthese - Google Patents

Programmcode zum Implementieren eines effizienten Entropie-Decoders unter Verwendung von High-Level-Synthese Download PDF

Info

Publication number
DE202015009978U1
DE202015009978U1 DE202015009978.5U DE202015009978U DE202015009978U1 DE 202015009978 U1 DE202015009978 U1 DE 202015009978U1 DE 202015009978 U DE202015009978 U DE 202015009978U DE 202015009978 U1 DE202015009978 U1 DE 202015009978U1
Authority
DE
Germany
Prior art keywords
integrated circuit
output
source code
input
rtl
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
DE202015009978.5U
Other languages
English (en)
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Google LLC
Original Assignee
Google LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Google LLC filed Critical Google LLC
Publication of DE202015009978U1 publication Critical patent/DE202015009978U1/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/34Circuit design for reconfigurable circuits, e.g. field programmable gate arrays [FPGA] or programmable logic devices [PLD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/32Circuit design at the digital level
    • G06F30/327Logic synthesis; Behaviour synthesis, e.g. mapping logic, HDL to netlist, high-level language to RTL or netlist

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Evolutionary Computation (AREA)
  • Geometry (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Design And Manufacture Of Integrated Circuits (AREA)

Abstract

Nicht transientes, computerlesbares Speichermedium, auf welchem durch einen Computer ausführbarer Programmcode gespeichert ist, welcher, wenn er auf einem Computersystem ausgeführt wird, eine Registertransferebenen-(RTL)Beschreibung eines integrierten Schaltkreises erzeugt, indem er das Computersystem dazu veranlasst, Schritte auszuführen, welche Folgendes umfassen:
Empfangen (S405) eines Teils eines Quellcodes, welcher ein erstes Programmmodell einschließt, welches ein Element eines integrierten Schaltkreises definiert;
Erzeugen (S410) einer ersten Registertransferebenen-(RTL)Beschreibung, basierend auf dem Teil des Quellcodes;
Definieren (415) einer Library-Komponente, basierend auf der ersten RTL-Beschreibung, wobei die Library-Komponente Folgendes einschließt:
eine Eingabeschnittstelle, welche dem Element des integrierten Schaltkreises zugeordnet ist, wobei die Eingabeschnittstelle konfiguriert ist, um mindestens eine Eingabevariable einem ersten Speicherplatz zuzuordnen, und
eine Ausgabeschnittstelle, welche dem Element des integrierten Schaltkreises zugeordnet ist, wobei die Ausgabeschnittstelle konfiguriert ist, um mindestens eine Ausgabevariable einem zweiten Speicherplatz zuzuordnen;
Empfangen (S420) des Quellcodes, welcher ein zweites Programmmodell einschließt, welches den integrierten Schaltkreis definiert; und
Ersetzen (S425) des Teils des Quellcodes, welcher dem ersten Programmmodell entspricht, durch die Library-Komponente,
wobei das Aufzeichnungsmedium zusätzlich dadurch gekennzeichnet ist, dass es das Computersystem zu Folgendem veranlasst:
Erzeugen (S430) einer zweiten RTL-Beschreibung des integrierten Schaltkreises, basierend auf dem Quellcode, in welchem der Teil durch die Library-Komponente ersetzt wurde, wobei beim Erzeugen der zweiten RTL-Beschreibung die Eingabe- und Ausgabeschnittstellen der Library-Komponente geeignet sind, um eine Ausgabe in einem gleichen Taktzyklus wie demjenigen einer empfangenen Eingabe zu erzeugen.

Description

  • QUERVERWEIS AUF VERWANDTE ANWENDUNGEN
  • Diese Anmeldung erhebt Anspruch auf Priorität gegenüber, und ist eine Fortsetzung der nichtvorläufigen U.S.-Patentanmeldung Nr. 14/317.860 , eingereicht am 27. Juni 2014, mit dem Titel „METHOD FOR IMPLEMENTING EFFICIENT ENTROPY DECODER BY USING HIGH LEVEL SYNTHESIS“, deren Offenlegungsschrift durch Bezugnahme hierauf in vollem Umfang hierin aufgenommen wird.
  • HINTERGRUND
  • High-Level-Synthesewerkzeuge können einen Registertransferebenen-(RTL) (beispielsweise VHDL/verilog/systemVerilog)Code anhand von High-Level-Quellcode (beispielsweise C, C++) schaffen. High-Level-Synthese gestaltet das Testen und Ändern von RTL-Hardware effizient, da Änderungen in High-Level-Quellcode vorgenommen werden können, anstatt RTL neu zu schreiben, was ein langsamer und fehleranfälliger Prozess ist. Arithmetische Codierung kann ein komplexes Element moderner Videokompressionsstandards (beispielsweise VP8/VP9/HEVC/H264) sein, und das Debugging/Testen von arithmetischer Codierung kann eine langwierige Aufgabe sein, wenn ein Hardwarebeschleuniger in der RTL implementiert ist. Um dieses Problem anzugehen, wird High-Level-Synthese verwendet. Arithmetische Codierung kann stark datenabhängig sein und High-Level-Synthesewerkzeuge mit nicht linearen Algorithmen können Probleme antreffen, während sie versuchen, den RTL-Code anhand des High-Level-Quellcodes zu erzeugen.
  • Daher schlägt High-Level-Synthese eines Hardwarebeschleunigers typischerweise fehl, da die Synthetisierung der arithmetischen Codierung fehlschlägt. Diese Fehlschläge bewirken übermäßigen Debugging-/Testungsaufwand von Hardwarebeschleuniger-Designs. Ähnlich komplexe Systeme weisen entsprechende Nachteile auf, wenn Teilelemente wiederholt während der Systemsynthese ausfallen, was übermäßigen Debugging-/Testungsaufwand des Systems bewirkt.
  • ZUSAMMENFASSUNG
  • Diese Offenlegungsschrift bezieht sich auf das Ersetzen eines Quellcode-Elements, welches einer Hardwaredefinition entspricht, durch eine Registertransferebenen-(RTL)Definition, welche anhand des Quellcodes vor dem Synthetisieren von Quellcode für ein System synthetisiert wurde, welches die Hardwaredefinition einschließt.
  • In einem allgemeinen Aspekt wird ein nicht transientes, computerlesbares Speichermedium offenbart, auf welchem durch einen Computer ausführbarer Programmcode gespeichert ist, welcher, wenn er auf einem Computersystem ausgeführt wird, das Computersystem dazu veranlasst, Schritte auszuführen. Die Schritte schließen Empfangen eines Teils eines Quellcodes ein, welcher ein erstes Programmmodell einschließt, welches ein Element eines integrierten Schaltkreises definiert, Erzeugen einer ersten Registertransferebenen-(RTL)Beschreibung, basierend auf dem Teil des Quellcodes, Definieren einer Library-Komponente, basierend auf der ersten RTL-Beschreibung, Empfangen des Quellcodes, welcher ein zweites Programmmodell einschließt, welches den integrierten Schaltkreis definiert, Ersetzen des Teils des Quellcodes, welcher dem ersten Programmmodell entspricht, durch die Library-Komponente, und Erzeugen einer zweiten Registertransferebenen-(RTL)Beschreibung, basierend auf dem Quellcode. Die Library-Komponente schließt eine Eingabeschnittstelle ein, welche dem Element des integrierten Schaltkreises zugeordnet ist, wobei die Eingabeschnittstelle konfiguriert ist, um mindestens eine Eingabevariable einem ersten Speicherplatz zuzuordnen, und eine Ausgabeschnittstelle, welche dem Element des integrierten Schaltkreises zugeordnet ist, wobei die Ausgabeschnittstelle konfiguriert ist, um mindestens eine Ausgabevariable einem zweiten Speicherplatz zuzuordnen.
  • In einem anderen allgemeinen Aspekt wird ein High-Level-Synthese-(HLS)Werkzeug offenbart, welches konfiguriert ist, um eine Registertransferebenen-(RTL)Beschreibung eines integrierten Schaltkreises zu erzeugen. Die HLS schließt ein Library-Verarbeitungsmodul ein, welches konfiguriert ist, um eine Library-Komponente basierend auf einer ersten RTL zu definieren, welche ein Element des integrierten Schaltkreises definiert. Die Library-Komponente schließt eine Eingabeschnittstelle ein, welche dem Element des integrierten Schaltkreises zugeordnet ist, wobei die Eingabeschnittstelle konfiguriert ist, um mindestens eine Eingabevariable einem ersten Speicherplatz zuzuordnen, und eine Ausgabeschnittstelle, welche dem Element des integrierten Schaltkreises zugeordnet ist, wobei die Ausgabeschnittstelle konfiguriert ist, um mindestens eine Ausgabevariable einem zweiten Speicherplatz zuzuordnen. Die HLS schließt ein Synthesemodul ein, welches konfiguriert ist, um einen Teil eines Quellcodes, welcher einem ersten Programmmodell entspricht, durch die Library-Komponente zu ersetzen, wobei der Quellcode den integrierten Schaltkreis definiert, und um die RTL-Beschreibung des integrierten Schaltkreises basierend auf dem Quellcode zu erzeugen.
  • In wiederum einem anderen allgemeinen Aspekt wird ein Verfahren zur Konstruktion eines integrierten Schaltkreises unter Verwendung eines High-Level-Synthese-(HLS)Werkzeugs offenbart. Das Verfahren schließt Definieren, durch ein Synthesewerkzeugmodul, einer Library-Komponente ein, basierend auf einer ersten Registertransferebene (RTL), welche konfiguriert ist, um ein Element des integrierten Schaltkreises zu definieren, Ersetzen, durch das Synthesewerkzeugmodul, eines Teils eines Quellcodes, welche einem ersten Programmmodell entspricht, durch die Library-Komponente, wobei der Quellcode den integrierten Schaltkreis definiert, und Erzeugen, durch das Synthesewerkzeugmodul, einer zweiten RTL-Beschreibung, welche den integrierten Schaltkreis basierend auf dem Quellcode darstellt, wobei während der Erzeugung der zweiten RTL-Beschreibung eine Ausgabe in einen ersten Speicherplatz in einem gleichen Taktzyklus geschrieben wird wie demjenigen des Lesens einer Eingabe aus einem zweiten Speicherplatz.
  • Implementierungen können eines oder mehrere der folgenden Merkmale einschließen. Beispielsweise kann das erste Programmmodell eine Zustandsmaschine definieren, welche eine Multiplexer-Logik einschließt. Das erste Programmmodell kann einen arithmetischen Decoder definieren. Die Erzeugung der ersten RTL-Beschreibung kann erstes Simulieren des ersten Programmmodells, basierend auf dem Teil des Quellcodes in einer High-Level-Sprache und zweites Simulieren des ersten Programmmodells basierend auf der ersten RTL-Beschreibung und Vergleichen einer Ausgabe der ersten Simulation mit einer Ausgabe der zweiten Simulation einschließen. Die Erzeugung der ersten RTL-Beschreibung schließt Vergleichen der ersten RTL-Beschreibung mit einer Design-Spezifikation von mindestens einem von dem Element des integrierten Schaltkreises und dem integrierten Schaltkreis ein. Die Eingabeschnittstelle und die Ausgabeschnittstelle sind Hardware-Schnittstellen, welche durch eine High-Level-Programmiersprache definiert sind.
  • Beispielsweise kann während der Erzeugung der zweiten RTL-Beschreibung die Library-Komponente eine Ausgabe in einem gleichen Taktzyklus wie demjenigen einer empfangenen Eingabe erzeugen. Während der Erzeugung der zweiten RTL-Beschreibung kann die Library-Komponente eine Ausgabe in einen ersten Speicherplatz schreiben, in einem gleichen Taktzyklus wie demjenigen des Lesens einer Eingabe aus einem zweiten Speicherplatz. Während der Erzeugung der zweiten RTL-Beschreibung kann die Library-Komponente eine Eingabe basierend auf einer Synthetisierung des zweiten Programms empfangen und erzeugt eine zeitunabhängige Ausgabe basierend auf der Eingabe.
  • Beispielsweise können die Eingabeschnittstelle und die Ausgabeschnittstelle Hardware-Schnittstellen sein, welche in einer High-Level-Programmiersprache definiert sind. Das Synthesemodul kann ferner konfiguriert sein, um, bei der Schnittstellenverbindung mit der Library-Komponente, eine Ausgabe in demselben Taktzyklus zu erzeugen wie demjenigen einer empfangenen Eingabe während der Erzeugung der RTL-Beschreibung des integrierten Schaltkreises. Das Synthesemodul kann ferner konfiguriert sein, um, bei der Schnittstellenverbindung mit der Library-Komponente, eine Ausgabe in einen ersten Speicherplatz zu schreiben, in einem gleichen Taktzyklus wie demjenigen des Lesens einer Eingabe aus einem zweiten Speicherplatz.
  • Figurenliste
    • 1 ist ein Flussdiagramm eines Verfahrens zum Synthetisieren von Software-Code, welcher Hardware nach mindestens einem Ausführungsbeispiel darstellt.
    • Die 2, 3A und 3B veranschaulichen Blockdiagramme eines arithmetischen Decodersystems nach mindestens einem Ausführungsbeispiel.
    • 4 ist ein Flussdiagramm eines Verfahrens zum Synthetisieren von Software-Code, welcher Hardware nach mindestens einem Ausführungsbeispiel darstellt.
    • 5 ist ein Blockdiagramm eines Systems nach mindestens einem Ausführungsbeispiel.
    • 6 ist ein schematisches Blockdiagramm einer Rechnervorrichtung und einer mobilen Rechnervorrichtung, welche zur Implementierung der hierin beschriebenen Techniken verwendet werden können.
  • DETAILLIERTE BESCHREIBUNG DER AUSFÜHRUNGSFORMEN
  • Obwohl Ausführungsbeispiele zahlreiche Änderungen und alternative Formen einschließen können, werden Ausführungsformen davon exemplarisch in den Zeichnungen gezeigt und werden hierin detailliert beschrieben. Es versteht sich jedoch, dass es nicht beabsichtigt ist, Ausführungsbeispiele auf die besonderen offenbarten Formen zu beschränken, sondern Ausführungsbeispiele sollen im Gegenteil alle Modifizierungen, Äquivalente und Alternativen abdecken, welche in den Anwendungsbereich der Ansprüche fallen.
  • Ferner sind die Figuren dazu bestimmt, die allgemeinen Merkmale von Verfahren und/oder Strukturen zu veranschaulichen, welche in bestimmten Ausführungsbeispielen verwendet werden und um die nachstehend bereitgestellte schriftliche Beschreibung zu ergänzen. Diese Figuren sind jedoch nicht maßstabsgetreu und spiegeln möglicherweise nicht die genauen strukturellen oder Leistungsmerkmale einer gegebenen Ausführungsform wieder und sollten nicht dahingehend ausgelegt werden, als würden sie den Bereich von Werten oder Eigenschaften definieren oder begrenzen, welcher durch Ausführungsbeispiele umschlossen wird. Beispielsweise können die strukturellen Elemente der Klarheit halber reduziert oder übertrieben sein. Der Gebrauch von ähnlichen oder gleichen Bezugsziffern in den unterschiedlichen Zeichnungen dient als Hinweis auf das Vorhandensein ähnlicher oder gleicher Elemente oder Merkmale.
  • 1 ist ein Flussdiagramm eines Verfahrens zum Synthetisieren von Software-Code, welcher Hardware nach mindestens einem Ausführungsbeispiel darstellt. Die in Bezug auf 1 beschriebenen Schritte können aufgrund der Ausführung von Software-Code durchgeführt werden, welcher in einem Speicher (beispielsweise mindestens einem Speicher 510 und/oder 604) gespeichert ist, welcher einem Gerät (beispielsweise wie in den 5 und 6 gezeigt) zugeordnet ist, und durch mindestens einen Prozessor (mindestens einen Prozessor 505 und/oder 602), welcher dem Gerät zugeordnet ist, ausgeführt wird. Es werden jedoch alternative Ausführungsformen betrachtet, wie beispielsweise ein System, welches als ein Prozessor für besondere Zwecke ausgeführt ist Obwohl die nachstehend beschriebenen Schritte als durch einen Prozessor ausgeführte Schritte beschrieben werden, werden die Schritte nicht unbedingt durch einen gleichen Prozessor ausgeführt. Anders ausgedrückt kann mindestens ein Prozessor die nachstehend in Bezug auf 1 beschriebenen Schritte ausführen.
  • Ferner können die nachstehend beschriebenen Schritte mit Bezug auf eine Beispielimplementierung eines Decoders oder eines Entropie-Decoders beschrieben werden. Hingegen sind Ausführungsbeispiele nicht hierauf begrenzt. Beispielsweise können die beschriebenen Techniken zum Synthetisieren einer Beschreibung/Konstruktion eines beliebigen integrierten Schaltkreises oder ASIC (application specific integrated circuits) verwendet werden. Entsprechend können die hierin beschriebenen Techniken zur Konstruktion eines Codierers oder eines Decoders gleichermaßen verwendet werden. Die Synthese kann das Verfahren der Umwandlung eines digitalen Systems anhand einer Verhaltensspezifikation in eine Struktur sein, welche zum Implementieren des Verhaltens konfiguriert ist. Die Verhaltensspezifikation kann unter Verwendung eines High-Level-Quellcodes (beispielsweise C, C++) entwickelt werden. Die Struktur kann eine Registertransferebenen-(RTL)Beschreibung sein, welche Hardware (beispielsweise Register) und den Datenfluss zwischen Registern definiert. Im Gegensatz dazu verwendet Kompilierungs-Software-Code einen Compiler, welcher eine Quellcode-(beispielsweise C, C++)Beschreibung in Assemblercode kompiliert, der auf einem Zielprozessor (beispielsweise X86) läuft.
  • Wie in 1 gezeigt wird in Schritt 5105 ein Teil eines Software-Codes vor dem Synthetisieren des Software-Codes isoliert. Das Isolieren von Software-Code kann Identifizieren von Software-Code einschließen, welcher eine spezifische Funktion oder Gruppe von Funktionen ausführt, und Entfernen dieses Codes aus einem Softwaresystem, welches die Funktion oder die Gruppe von Funktionen verwendet. Beispielsweise kann der Teil des Software-Codes einer komplexen oder verarbeitungsintensiven Synthese zugeordnet sein. Anders ausgedrückt kann der Teil des Software-Codes anfällig für Codierungsfehler und zeitaufwendig zu synthetisieren sein. Der Teil des Software-Codes selbst kann ein Modell definieren, welches einem integrierten Schaltkreis oder ASIC zugeordnet ist. Alternativ kann der Teil des Software-Codes selbst ein Modell definieren, welches einem Element und/oder einer Teilkomponente eines integrierten Schaltkreises oder ASIC zugeordnet ist.
  • Folglich kann Isolieren des Teils von Software-Code einen Entwickler und/oder Hardware-Designer in die Lage versetzen, ein oder mehrere Synthesewerkzeug(e) an dem isolierten Teil des Software-Codes einzusetzen. Entsprechend wird in Schritt 5110 der isolierte Teil des Software-Codes synthetisiert. In einer Beispielimplementierung kann der isolierte Teil des Software-Codes durch das Synthesewerkzeug gelesen werden (beispielsweise aus einem Speicher). Anschließend kann das Synthesewerkzeug verwendet werden, um den isolierten Teil des Software-Codes zu synthetisieren. Synthetisieren des isolierten Teils des Software-Codes kann Erzeugen einer Registertransferebenen-(RTL)Beschreibung eines integrierten Schaltkreises einschließen, welcher durch den isolierten Teil des Software-Codes definiert wird.
  • In Schritt 5115 wird eine Schnittstelle zwischen dem synthetisierten, isolierten Teil des Software-Codes und dem Software-Code entwickelt. Beispielsweise kann die Schnittstelle eine Eingabe-/Ausgabe-(I/O)Schnittstelle sein. Anders ausgedrückt kann die Schnittstelle konfiguriert sein, um eine Eingabe (beispielsweise Daten, ein Signal, ein Bild, einen Bitstrom, ein Byte, einen Registerwert und dergleichen) zu empfangen. Die Schnittstelle kann konfiguriert sein, um eine Ausgabe (beispielsweise Daten, ein Signal, ein Bild, einen Bitstrom, 1 Byte, einen Registerwert und dergleichen) zu kommunizieren. Die Schnittstelle kann eine Software-Schnittstelle (beispielsweise eine Speicher-Lese-/Schreibfunktion) und/oder eine Hardware-Schnittstelle (beispielsweise eine Pinbelegung oder eine Busverbindung) sein.
  • In Schritt 5120 wird der Software-Code, welcher den isolierten Teil einschließt, dergestalt synthetisiert, dass der synthetisierte, isolierte Teil als eine zeitunabhängige Eingabe- und/oder zeitunabhängige Ausgabe-Komponente konfiguriert ist. Beispielsweise kann unter Verwendung des Synthesewerkzeugs der synthetisierte, isolierte Teil des Software-Codes mit dem Software-Code integriert werden. Die Integration kann Ersetzen des isolierten Teils des Software-Codes durch den synthetisierten, isolierten Teil des Software-Codes einschließen. Die Integration kann Konfigurieren der Schnittstelle und/oder des Software-Codes (beispielsweise unter Verwendung des Synthesewerkzeugs) einschließen, um Kommunikation zwischen dem Software-Code mit dem synthetisierten, isolierten Teil des Software-Codes zu ermöglichen. In einer Beispielimplementierung, wenn der Software-Code mit dem synthetisierten, isolierten Teil des Software-Codes kommuniziert, verwendet der Software-Code die Schnittstelle. Entsprechend kann die Kommunikation zeitunabhängig erfolgen (beispielsweise, innerhalb eines einzigen Taktzyklus eintreten). Anders ausgedrückt wird die Ausgabe im gleichen Taktzyklus erzeugt (und geschrieben) wie demjenigen, in welchem die Eingabe empfangen (und gelesen) wird.
  • Entsprechend ermöglichen es Ausführungsbeispiele einem Entwickler, ein komplexes Element einer Verhaltensspezifikation (beispielsweise einen Algorithmus) zu synthetisieren und zu entstören und anschließend das komplexe Element in der Verhaltensspezifikation durch eine RTL-Definition zu ersetzen. Die RTL-Definition sollte ein Ergebnis im gleichen Taktzyklus wie demjenigen zurückmelden, in welchem sie eine Eingabe während einer Synthese der Verhaltensspezifikation empfängt. Entsprechend können Entwickler sich auf das Systemverhalten konzentrieren, wohl wissend, dass das komplexe Element wunschgemäß funktioniert.
  • Die 2, 3A und 3B veranschaulichen Blockdiagramme eines arithmetischen Decodersystems nach mindestens einem Ausführungsbeispiel. Wie in 2 gezeigt schließt ein arithmetischer Decoder 205 eine Zustandsmaschinen-Multiplexer-(Mux)Logik 210, einen Motor 215 und einen Strompufferungs-Schieber 220 ein.
  • Die Zustandsmaschinen-Mux-Logik 210 ist konfiguriert, um mindestens einen Ausgabewert basierend auf mindestens einem Eingabewert auszuwählen. In einer Beispielimplementierung kann die Zustandsmaschinen-Mux-Logik 210 als eine Zustandsmaschine oder eine finite Zustandsmaschine (FSM) implementiert sein. Entsprechend kann der Ausgabewert basierend auf einem augenblicklichen Zustand und dem Eingabewert bestimmt werden. Bei Auslösen eines Taktgebers schaltet die FSM in einen neuen Zustand um, welcher den Ausgabewert einschließt. Die FSM kann als Software oder Hardware implementiert sein. Beispielsweise kann die FSM als ein Satz von Anweisungen für einen Mikroprozessor implementiert sein. Beispielsweise kann der FSM-Schaltkreis aus mehreren Flip-Flops bestehen, welche konfiguriert sind, um den vorherigen Zustand zu halten, und aus mehreren Decodierungs-Logikgattern, welche konfiguriert sind, um die Eingabe zu empfangen. Der Ausgabezustand oder das Signal können gleichermaßen vom vorherigen Zustand und von der Eingabe zu demjenigen Zeitpunkt abhängen, an welchem die Flip-Flops getaktet werden. Die FSM kann dadurch festgelegt sein, dass jedes Mal, wenn die FSM in einem bestimmten Zustand ist und eine besondere Eingabe empfängt, das Ausgabesignal stets dasselbe sein soll.
  • Der Motor 215 ist dazu konfiguriert, um Videodekompression durchzuführen. Beispielsweise kann der Motor 215 ein Prozessor sein, welcher spezifisch konfiguriert ist, um Videodekompression durchzuführen. Der Motor 215 kann eine Dekompression von der Bildschicht abwärts durchführen. Beispielsweise kann der Motor 215 eine Dekompression der Bildschicht, der Sliceschicht, der Makroblockschicht und der Blockschicht durchführen. Anders ausgedrückt kann der Motor programmiert sein, um auf einer Frame-für Frame-Basis zu decodieren (Dekomprimieren), und um die Decodierung mit variabler Länge beginnend bei der Bildschicht mit inversem Zickzack, inverser Quantisierung und inverser diskreter Kosinus-Transformation und Frame-Rekonstruktion (Bewegungsvektor Ausgleich) auf einer Blockfür-Block-Basis bis zum Ende eines Bildes auszuführen. Der Motor 215 ist konfiguriert, um decodierte Bins zu erzeugen, welche als Eingabe in die Zustandsmaschinen-Mux-Logik 210 verwendet werden.
  • Der Strompufferungs-Schieber 220 ist konfiguriert, um als Cache des Code-Stroms zu fungieren, welcher in den Motor 215 geladen wird. Beispielsweise kann der Strompufferungs-Schieber 220 einen decodierten/dekomprimierten Code-Strom speichern, welcher von der Zustandsmaschinen-Mux-Logik 210 empfangen wurde. Eine Ausgabe des Strompufferungs-Schiebers 220 kann eine Ausgabe des arithmetischen Decoders 205 sein.
  • Wie in 3A gezeigt schließt die Zustandsmaschinen-Mux-Logik 210 ferner eine Vielzahl von Zustandsmaschinen 305 (gezeigt als Zustand 1, Zustand 2, Zustand 3 und Zustand 4) ein. Wie oben erörtert kann jede der Vielzahl von Zustandsmaschinen 305 einen Ausgabezustand oder ein Signal einschließen, welcher/s gleichermaßen von einem vorherigen Zustand und einer Eingabe abhängig sein kann, welche/r sich ändert, wenn die Zustandsmaschinen-Mux-Logik 210 getaktet wird. Die Vielzahl von Zustandsmaschinen kann unter Verwendung einer RTL-Beschreibung modelliert sein.
  • Entsprechend kann die Vielzahl von Zustandsmaschinen 305 aus High-Level-Quellcode (beispielsweise C, C++) unter Verwendung eines High-Level-Synthese-(HLS)Werkzeugs (Catapult-C (Calypto), Acce1FPGA, (AccelChip), SystemC Compiler (Synopsys) für Werbesendungen und GAUT, SPARK, Cathedral und dergleichen) synthetisiert werden.
  • HLS-Werkzeuge erzeugen eine RTL-Beschreibung für eine Architektur, welche auf Designer- und Systemvorgaben beruht. Die RTL-Beschreibung sollte zuverlässig sein (beispielsweise ohne Fehler) im Vergleich zu einem manuell codierten Design (beispielsweise, direktes Codieren in RTL). Anders ausgedrückt können HLS-Werkzeuge die Konstruktionszeit im Vergleich zu manuellem Registertransferebenen-Codieren beschleunigen. High-Level-Synthese kann analog zur Software-Kompilierung sein, übertragen auf den Hardwarebereich. Die Quellspezifikation ist in einer High-Level-Sprache geschrieben (beispielsweise Matlab, C, C++ und dergleichen), welche das algorithmische Verhalten einer komplexen Hardwarekomponente modelliert. Ein automatischer Verfeinerungsprozess ermöglicht die Zuordnung des beschriebenen Verhaltens zu einer spezifischen Zieltechnologie, abhängig von Zielvorgaben.
  • Entsprechend kann die Vielzahl von Zustandsmaschinen 305 das Ergebnis (beispielsweise eine RTL-Definition) einer Synthese von in einer High-Level-Sprache geschriebenem Quellcode sein. Beispielsweise kann ein Algorithmus, welcher eine Schleife und/oder eine Fall-Anweisung verwendet, zu der Vielzahl von Statusmaschinen 305 synthetisiert werden. Eine der vorgenannten Vorgaben kann darin bestehen, dass, wenn eine Zustandsmaschine in einem besonderen Zustand ist und eine besondere Eingabe empfängt, das Ausgabesignal dasselbe für jede der Vielzahl von Zustandsmaschinen 305 sein soll. Zusätzlich kann die Architektur ein oder mehrere Flip-Flops einschließen.
  • Im Fall einer bedingten Anweisung kann HLS sämtliche oder mindestens einen Teil der durch jeden Zweig der bedingten Anweisung beschriebenen Schaltkreise schaffen. Folglich beinhaltet die Laufzeit-Ausführung einer bedingten Software-Anweisung die Auswahl zwischen zwei möglichen Ergebnissen (beispielsweise Zuständen). Wenn das HLS-Werkzeug den Quellcode zu der RTL-Beschreibung synthetisiert, kann eine signifikante Anzahl an Zweigen erzeugt werden. Sollte ein Zweig ausfallen, könnte die Synthese fehlschlagen. Ferner kann das HLS möglicherweise nicht das beste/optimale Ergebnis erbringen (beispielsweise, dem optimalen Zweig folgen). Ferner kann die Vielzahl von Zustandsmaschinen 305 einer FSM entsprechen. Folglich kann es sein, dass eine Anzahl der Zweige möglicherweise keinem Zustand innerhalb der FSM entspricht. Entsprechend müsste Quellcode möglicherweise entstört werden und/oder ein nicht optimales Ergebnis müsste entfernt werden, bevor eine neue Synthese initiiert wird. Ferner bewirkt ein nicht linearer Algorithmus zusätzliche Komplexität, da das HLS-Werkzeug möglicherweise versuchen würde, den nicht linearen Algorithmus in eine lineare (oder ungefähr lineare) Algorithmusdefinition zu zwängen.
  • Folglich kann in Beispielimplementierungen die Vielzahl von Zustandsmaschinen 305 separat synthetisiert werden. Wie in 3B gezeigt wird die Zustandsmaschinen-Mux-Logik 210 in dem arithmetischen Decoder 205 durch eine finite Zustandsmaschinen-Library-Komponente 310 ersetzt. Die finite Zustandsmaschinen-Library-Komponente 310 kann auf einer RTL-Definition einer isolierten Synthese von Quellcode basieren, welcher die Zustandsmaschinen-Mux-Logik 210 darstellt. Die finite Zustandsmaschinen-Library-Komponente 310 kann eine zugeordnete Eingabe-Hardwareschnittstelle einschließen. Die Eingabe-Hardwareschnittstelle kann in einer High-Level-Programmiersprache definiert sein. Die finite Zustandsmaschinen-Library-Komponente 310 kann eine zugeordnete Ausgabe-Hardwareschnittstelle einschließen. Die Ausgabe-Hardwareschnittstelle kann in der High-Level-Programmiersprache definiert sein. Die Eingabe-/Ausgabe-Hardwareschnittstelle kann einem Bus und/oder einer Pinposition eines IC oder ASIC entsprechen. Die Eingabe-/Ausgabe-Hardwareschnittstelle kann konfiguriert sein, um eine Ausgabe in einem gleichen Taktzyklus zu erzeugen wie demjenigen einer empfangenen Eingabe während der Erzeugung der RTL-Beschreibung des IC oder ASIC durch das HLS-Werkzeug während der Synthetisierung von Quellcode, welcher dem arithmetischen Decoder 205 zugeordnet ist.
  • Alternativ (oder zusätzlich) kann die finite Zustandsmaschinen-Library-Komponente 310 eine zugeordnete Software-Eingabeschnittstelle einschließen. Die Software-Eingabeschnittstelle kann konfiguriert sein, um mindestens eine Eingabevariable einem Speicherplatz zuzuordnen (beispielsweise Register 565). Die finite Zustandsmaschinen-Library-Komponente 310 kann eine zugeordnete Software-Ausgabeschnittstelle einschließen, welche konfiguriert ist, um mindestens eine Ausgabevariable einem Speicherplatz zuzuordnen. Die Eingabe-/Ausgabe-Softwareschnittstelle kann Registerpositionen und/oder Speicherplatz-Zeigern zugeordnet sein und entsprechende Lese-/Schreibverfahren aufweisen. Die Eingabe-/Ausgabe-Softwareschnittstelle kann konfiguriert sein, um eine Ausgabe in einem gleichen Taktzyklus zu erzeugen wie demjenigen einer empfangenen Eingabe während der Erzeugung der RTL-Beschreibung des IC oder ASIC durch das HLS-Werkzeug. Anders ausgedrückt kann die Eingabe-/Ausgabe-Softwareschnittstelle konfiguriert sein, um eine Ausgabe in einen Speicherplatz in einem gleichen Taktzyklus wie demjenigen des Lesens einer Eingabe aus einem anderen Speicherplatz (beispielsweise Register 570) zu schreiben, wenn das HLS-Werkzeug Quellcode synthetisiert, welcher dem arithmetischen Decoder 205 zugeordnet ist.
  • 4 ist ein Flussdiagramm eines Verfahrens zum Synthetisieren von Software-Code, welcher Hardware nach mindestens einem Ausführungsbeispiel darstellt. Die in Bezug auf 4 beschriebenen Schritte können aufgrund der Ausführung von Software-Code durchgeführt werden, welcher in einem Speicher (beispielsweise mindestens einem Speicher 510 und/oder 604) gespeichert ist, welcher einem Gerät (beispielsweise wie in den 5 und 6 gezeigt) zugeordnet ist, und durch mindestens einen Prozessor (mindestens einen Prozessor 505 und/oder 602), welcher dem Gerät zugeordnet ist, ausgeführt wird. Es werden jedoch alternative Ausführungsformen betrachtet, wie beispielsweise ein System, welches als ein Prozessor für besondere Zwecke ausgeführt ist. Obwohl die nachstehend beschriebenen Schritte als durch einen Prozessor ausgeführte Schritte beschrieben werden, werden die Schritte nicht unbedingt durch einen gleichen Prozessor ausgeführt. Anders ausgedrückt kann mindestens ein Prozessor die nachstehend in Bezug auf 4 beschriebenen Schritte ausführen.
  • Ferner können die nachstehend beschriebenen Schritte mit Bezug auf eine Beispielimplementierung eines Decoders oder eines Entropie-Decoders beschrieben werden. Hingegen sind Ausführungsbeispiele nicht hierauf begrenzt. Beispielsweise können die beschriebenen Techniken zum Synthetisieren einer Beschreibung/Konstruktion eines beliebigen integrierten Schaltkreises oder ASIC (application specific integrated circuits) verwendet werden.
  • Wie in 4 gezeigt, wird in Schritt 5405 ein Teil des Quellcodes, welcher ein erstes Programmmodell einschließt, welches ein Element eines integrierten Schaltkreises definiert, empfangen. Beispielsweise kann ein HLS-Werkzeug einen Code-Teil aus einem Speicherplatz lesen, welcher eine FSM darstellt. Das HLS-Werkzeug kann Code lesen, welcher die dem arithmetischen Decoders 210 zugeordnete Zustandsmaschinen-Mux-Logik 210 darstellt. Alternativ kann das HLS-Werkzeug den gesamten dem arithmetischen Decoder 205 zugeordneten Quellcode lesen und den der Zustandsmaschinen-Mux-Logik 210 des arithmetische Decoders 205 zugeordneten Quellcode trennen/isolieren.
  • In Schritt 5410 wird der Teil des Quellcodes zu einer ersten Registertransferebenen-(RTL)Beschreibung synthetisiert. Synthetisieren des Teils des Quellcodes kann Erzeugen einer Registertransferebenen-(RTL)Beschreibung eines integrierten Schaltkreises einschließen, welcher durch den Teil des Quellcodes definiert wird. Beispielsweise kann die RTL-Beschreibung des Teils des Quellcodes ein Element eines Entropie-Dekodierers definieren, welches ein Element eines größeren integrierten Schaltkreises (beispielsweise eines Videodecoders) sein kann oder nicht. In einer Beispielimplementierung kann die RTL-Beschreibung des isolierten Teils des Software-Codes einen arithmetischen Decoder und/oder ein Element oder eine Teilkomponente davon (beispielsweise eine Zustandsmaschine) definieren.
  • Beispielsweise kann das HLS-Werkzeug den Lese-Teil des Codes synthetisieren, welcher die FSM darstellt. Synthetisieren des Teils des Quellcodes kann Optimieren der resultierenden RTL-Beschreibung einschließen, beispielsweise in Bezug auf Chipgröße, Geschwindigkeit, Taktrate und dergleichen. Synthetisieren des Quellcodes kann Modifizieren des resultierenden RTL-Codes einschließen, beispielsweise durch Zuordnen einer Anzahl von Zuständen zu einem gleichen oder Default-Zustand. Die Zuordnung kann auf der Kenntnis eines Standards (beispielsweise eines Video-Codierungsstandards) eines Designers basieren.
  • In einer Beispielimplementierung wird die erste RTL-Beschreibung mit einer Design-Spezifikation von mindestens einem von dem Element des integrierten Schaltkreises und dem integrierten Schaltkreis verglichen. In einer Beispielimplementierung wird die RTL-Beschreibung getestet oder am Prüfstand getestet. Testen der RTL-Beschreibung kann erstes Simulieren des Programmmodells (welches beispielsweise die FSM darstellt) basierend auf dem Teil des Quellcodes in einer High-Level-Sprache und zweites Simulieren des ersten Programmmodells basierend auf der ersten RTL-Beschreibung und Vergleichen einer Ausgabe der ersten Simulation mit einer Ausgabe der zweiten Simulation einschließen.
  • In Schritt 5415 wird eine Library-Komponente basierend auf der ersten RTL-Beschreibung definiert. Beispielsweise kann der synthetisierte Teil des Codes, welcher die FSM darstellt, zu einer existierenden Library hinzugefügt oder als ein Anfangselement einer neuen Code-Library verwendet werden. Der Library-Komponente kann eine Schnittstelle zugeordnet sein. Beispielsweise kann die Schnittstelle eine Eingabe-/Ausgabe-(I/O)Schnittstelle sein. Anders ausgedrückt kann die Schnittstelle konfiguriert sein, um eine Eingabe (beispielsweise Daten, ein Signal, ein Bild, einen Bitstrom, ein Byte, einen Registerwert und dergleichen) zu empfangen. Die Schnittstelle kann konfiguriert sein, um eine Ausgabe (beispielsweise Daten, ein Signal, ein Bild, einen Bitstrom, 1 Byte, einen Registerwert und dergleichen) zu kommunizieren. Die Schnittstelle kann eine Software-Schnittstelle (beispielsweise eine Speicher-Lese-/Schreibfunktion) und/oder eine Hardware-Schnittstelle (beispielsweise eine Pinbelegung oder eine Busverbindung) sein. Die Library-Komponente kann eine finite Zustandsmaschinen-Library-Komponente 310 sein.
  • In Schritt 5420 wird der Quellcode empfangen, welcher ein zweites Programmmodell (bzw. Modelle) einschließt, welche/s den integrierten Schaltkreis definiert bzw. definieren. Beispielsweise kann das HLS-Werkzeug den gesamten Quellcode lesen, welcher dem arithmetischen Decoder 205 zugeordnet ist.
  • In Schritt 5425 wird der Teil des Quellcodes, welcher das erste Programmmodell einschließt, durch die Library-Komponente ersetzt. Beispielsweise kann das HLS-Werkzeug den der Zustandsmaschinen-Mux-Logik 210 zugeordneten Quellcode durch die finite Zustandsmaschinen-Library-Komponente 310 ersetzen. Ersetzen des Quellcodes kann Verlinken einer der Library-Komponente zugeordneten Schnittstelle mit dem Quellcode einschließen. Beispielsweise kann eine der finite Zustandsmaschinen-Library-Komponente 310 zugeordnete IIO-Schnittstelle mit dem Quellcode verlinkt werden, welcher dem arithmetischen Decoder 205 in dem HLS-Werkzeug zugeordnet ist.
  • In Schritt 5430 wird der Quellcode zu einer zweiten Registertransferebenen-(RTL)Beschreibung synthetisiert. Beispielsweise kann das HLS-Werkzeug den dem arithmetischen Decoder 205 zugeordneten Quellcode synthetisieren, welcher die finite Zustandsmaschinen-Library-Komponente 310 einschließt. In einer Beispielimplementierung, während der Synthese von Quellcode zu der zweiten RTL-Beschreibung, kann die finite Zustandsmaschinen-Library-Komponente 310 eine Ausgabe im gleichen Taktzyklus wie demjenigen einer über die I/O-Schnittstelle empfangenen Eingabe erzeugen. Beispielsweise kann die finite Zustandsmaschinen-Library-Komponente 310 eine Ausgabe in einen ersten Speicherplatz in einem gleichen Taktzyklus wie demjenigen des Lesens einer Eingabe aus einem zweiten Speicherplatz schreiben.
  • 5 ist ein Blockdiagramm eines Systems nach mindestens einem Ausführungsbeispiel. Wie in 5 gezeigt schließt das System (oder Gerät) 500 mindestens einen Prozessor 505 und mindestens einen Speicher 510 ein. Der mindestens eine Prozessor 505 und der mindestens eine Speicher 510 sind kommunizierend über den Bus 515 gekoppelt. Das System 500 kann beispielsweise ein Element einer Rechnervorrichtung (einer Cloud-Rechnervorrichtung oder eines Servers) sein.
  • In dem Beispiel von 5 kann das System 500 mindestens eine Rechnervorrichtung sein und ist dahingehend zu verstehen, dass es virtuell jede Rechnervorrichtung darstellt, welche konfiguriert ist, um die hierin beschriebenen Verfahren auszuführen. Daher kann das System 500 dahingehend verstanden werden, dass es diverse Standardkomponenten einschließt, welche verwendet werden können, um die hierin beschriebenen Techniken zu implementieren, oder unterschiedliche oder zukünftige Versionen davon. Beispielsweise ist das System 500 als jeweils mindestens einen Prozessor 505 (beispielsweise einen Siliziumbasierten Prozessor) und gleichermaßen mindestens einen Speicher 510 (beispielsweise ein nicht transientes computerlesbares Speichermedium) einschließend veranschaulicht.
  • Daher mag es sich erschließen, dass der mindestens eine Prozessor 505 verwendet werden kann, um in dem mindestens einen Speicher 510 gespeicherte Anweisungen auszuführen, so dass dadurch die diversen hierin beschriebenen Merkmale und Funktionen oder zusätzliche oder alternative Merkmale und Funktionen implementiert werden. Natürlich können der mindestens eine Prozessor 505 und der mindestens eine Speicher 510 für diverse andere Zwecke verwendet werden. Insbesondere mag es sich erschließen, dass der mindestens eine Speicher 500 dahingehend zu verstehen ist, dass er ein Beispiel für diverse Arten von Speicher und zugehöriger Hardware und Software darstellt, welche verwendet werden können, um ein beliebiges der hierin beschriebenen Module zu implementieren. Die nachstehend beschriebenen Systeme oder Verfahren können Daten- und/oder Speicherelemente einschließen. Die Daten- und/oder Speicherelemente (beispielsweise Datenbanktabellen) können beispielsweise in dem mindestens einen Speicher 510 gespeichert sein.
  • Wie in 5 gezeigt schließt der mindestens eine Speicher 510 ein Synthesewerkzeugmodul 520, einen Quellcodeblock 550 und einen RTL-Beschreibungsblock 560 ein. Das Synthesewerkzeugmodul 520 schließt ein lexikalisches (Lex) Modul 525, ein Synthesemodul 530, ein Optimierungsmodul 535, ein Library-Verarbeitungsmodul 540 und ein Überprüfungsmodul 545 ein.
  • Das Synthesewerkzeugmodul 520 kann konfiguriert sein, um in einer High-Level-Programmiersprache (beispielsweise C, C++ und/oder dergleichen) geschriebenen Quellcode zu synthetisieren. Das Synthesewerkzeugmodul 520 kann das oben beschriebene HLS-Werkzeug sein. Das Synthesewerkzeugmodul 520 kann konfiguriert sein, um eine bzw. einen der oben beschriebenen Funktionen/Schritte auszuführen. Beispielsweise kann das Synthesewerkzeugmodul 520 konfiguriert sein, um eine Library-Komponente basierend auf einer ersten Registertransferebene (RTL) zu definieren, welche konfiguriert ist, um ein Element eines integrierten Schaltkreises zu definieren und einen Teil eines Quellcodes, welcher einem ersten Programmmodell entspricht, durch die Library-Komponente zu ersetzen, wobei der Quellcode den integrierten Schaltkreis definiert.
  • Der Quellcodeblock 550 kann konfiguriert sein, um Quellcode (oder Teile davon) einer High-Level-Programmiersprache (beispielsweise C, C++ und/oder dergleichen) zu speichern. Der Quellcode kann ein Element eines integrierten Schaltkreises (beispielsweise als Quellcode-Teil 555), einen vollständigen integrierten Schaltkreis (beispielsweise ASIC) und/oder mehrere integrierte Schaltkreise definieren. Der Quellcode kann auf einem Programmmodell basieren, beispielsweise für einen Standard (beispielsweise einen Video-Codec-Standard). Der RTL-Beschreibungsblock 560 kann konfiguriert sein, um RTL-Beschreibungen von synthetisiertem Quellcode zu speichern, welcher Speicher einschließt, welcher konfiguriert ist, um die Register 565, 570 einer Softwareschnittstelle zu simulieren, welche oben detaillierter erläutert wurde.
  • Das Lex-Modul 525 kann konfiguriert sein, um den Quellcode als Eingabe (beispielsweise als eine Zeichenkette) zu empfangen und eine Sequenz von Symbol-Token zu erzeugen. Ein Token ist eine Gruppe von Zeichen, welche eine kollektive Bedeutung (beispielsweise ein Wort oder ein Interpunktionszeichen) aufweist. Das Lex-Modul 525 kann Kommentare und Leerstellen in der Form von Leerzeichen, Tabulatorzeichen und Zeilenumbrüchen beseitigen. Das Lex-Modul 525 kann Fehlermeldungen vom Synthesemodul 530 mit dem Quellcode korrelieren (beispielsweise die Zeilennummern im Überblick behalten). Wenn ein Fehler gefunden wird, kann das Lex-Modul 525 die Verarbeitung stoppen. Folglich kann in Beispielimplementierungen erstes Synthetisieren eines komplexen Hardwareelements (beispielsweise arithmetisches Codieren als ein Element eines Video-Kompressions-Codecs) das Debugging von lexikalischen Fehlern ermöglichen, welche dem Quellcode für das komplexe Hardwareelement zugeordnet sind.
  • Das Synthesemodul 530 kann konfiguriert sein, um eine Registertransferebenen-(RTL)Definition basierend auf der High-Level-Programmiersprache (beispielsweise C, C++ und/oder dergleichen) zu erzeugen. Das Optimierungsmodul 535 kann konfiguriert sein, um eine Größe (beispielsweise könnte kleiner besser sein) oder ein Layout (beispielsweise zum Passen auf einen Standard-Chip) eines resultierenden IC zu optimieren. Das Optimierungsmodul 535 kann konfiguriert sein, um ein Temperaturprofil zu optimieren. Beispielsweise können wärmeerzeugende Komponenten in einem Layout ausgebreitet werden. Das Optimierungsmodul 535 kann konfiguriert sein, um eine Speicherverfügbarkeit zu optimieren. Beispielsweise kann zusätzlicher Speicher zu einer RTL-Definition hinzugefügt werden. Optimierung kann manuelles Codieren einer RTL-Definition einschließen.
  • Das Library-Verarbeitungsmodul 540 kann konfiguriert sein, um mindestens eine Library-Komponente zu speichern, welche während der Quellcode-Synthese mit dem Quellcode verlinkt werden kann. Jede Library-Komponente kann eine zugeordnete Schnittstelle einschließen. Beispielsweise kann die Schnittstelle eine Eingabe-/Ausgabe-(I/0) Schnittstelle wie oben näher beschrieben sein. Das Überprüfungsmodul 545 kann konfiguriert sein, um die Funktion einer synthetisierten RTL-Definition zu überprüfen. In einer Beispielimplementierung kann Überprüfen der Funktion einer synthetisierten RTL-Definition Testen oder Testen am Prüfstand einschließen. Testen der RTL-Beschreibung kann erstes Simulieren eines Programmmodells, welches den Quellcode oder einen Teil des Quellcodes in einer High-Level-Sprache darstellt, zweites Simulieren des Programmmodells basierend auf der RTL-Beschreibung und Vergleichen einer Ausgabe der ersten Simulation mit einer Ausgabe der zweiten Simulation einschließen.
  • Es erschließt sich, dass das in 5 veranschaulichte System 500 als ein Element von und/oder eine Erweiterung der generischen Rechnervorrichtung 600 und/oder der generischen mobilen Rechnervorrichtung 650 wie nachstehend in Bezug auf 6 beschrieben implementiert werden kann. Alternativ oder zusätzlich kann das in 5 veranschaulichte System 500 in einem separaten System von der generischen Rechnervorrichtung 600 und/oder der generischen mobilen Rechnervorrichtung 650 implementiert werden, welches einige oder alle nachstehend in Bezug auf die generische Rechnervorrichtung 600 und/oder die generische mobile Computervorrichtung 650 beschriebenen Merkmale aufweist. Alternativ oder zusätzlich das in 5 veranschaulichte System 500 in einem separaten System von der generischen Rechnervorrichtung 600 und/oder der generischen mobilen Rechnervorrichtung 650 und zum Konstruieren und/oder Entwickeln einer Komponente (beispielsweise eines Videodecoders) der generischen Rechnervorrichtung 600 und/oder der generischen mobilen Rechnervorrichtung 650 verwendet werden.
  • 6 ist ein schematisches Blockdiagramm einer Rechnervorrichtung und einer mobilen Rechnervorrichtung, welche zur Implementierung der hierin beschriebenen Techniken verwendet werden können. 6 ist ein Beispiel für eine generische Rechnervorrichtung 600 und eine generische mobile Rechnervorrichtung 650, welche mit den hier beschriebenen Techniken verwendet werden können. Die Rechnervorrichtung 600 ist dazu bestimmt, diverse Formen von digitalen Computern wie beispielsweise von Laptops, Desktops, Workstations, digitalen persönlichen Assistenten, Servern, Blade-Servern, Mainframes und sonstigen geeigneten Computern darzustellen. Die Rechnervorrichtung 650 ist dazu bestimmt, diverse Formen von mobilen Vorrichtungen wie beispielsweise von digitalen persönlichen Assistenten, Mobiltelefonen, Smartphones und anderen ähnlichen Rechnervorrichtungen darzustellen. Die hier gezeigten Komponenten, ihre Verbindungen und Beziehungen und ihre Funktionen sind lediglich exemplarisch gemeint und sind nicht dazu bestimmt, Implementierungen der in diesem Dokument beschriebenen und/oder beanspruchten Erfindungen zu begrenzen.
  • Die Rechnervorrichtung 600 schließt einen Prozessor 602, einen Speicher 604, eine Speichervorrichtung 606, eine Hochgeschwindigkeitsschnittstelle 608, welche sich mit dem Speicher 604 und Hochgeschwindigkeitserweiterungsanschlüssen 610 verbindet, und eine langsame Schnittstelle 612, welche sich mit dem langsamen Bus 614 und der Speichervorrichtung 606 verbindet, ein. Jede der Komponenten 602, 604, 606, 608, 610 und 612 sind miteinander unter Verwendung diverser Busse verbunden und können an einer gemeinsamen Hauptplatine oder je nach Bedarf in anderer Weise montiert sein. Der Prozessor 602 kann Anweisungen zur Ausführung innerhalb der Rechnervorrichtung 600 verarbeiten, darunter Anweisungen, welche in dem Speicher 604 oder in der Speichervorrichtung 606 gespeichert sind, um grafische Informationen für eine GUI an einer externen Eingabe-/Ausgabevorrichtung wie beispielsweise dem Display 616 anzuzeigen, welches mit der Hochgeschwindigkeitsschnittstelle 608 gekoppelt ist. In anderen Implementierungen können mehrere Prozessoren und/oder mehrere Busse je nach Bedarf gleichzeitig mit mehreren Speichern und Speicherarten verwendet werden. Ebenso können mehrere Rechnervorrichtungen 600 verbunden sein, wobei jede Vorrichtung Partitionen der erforderlichen Operationen (beispielsweise als eine Server-Bank, eine Gruppe von Blade-Servern oder ein Multi-ProzessorSystem) bereitstellt.
  • Der Speicher 604 speichert Informationen innerhalb der Rechnervorrichtung 600. In einer Implementierung ist der Speicher 604 eine flüchtige Speichereinheit bzw. mehrere flüchtige Speichereinheiten. In einer anderen Implementierung ist der Speicher 604 eine nichtflüchtige Speichereinheit bzw. mehrere nichtflüchtige Speichereinheiten. Der Speicher 604 kann ebenfalls eine andere Form von computerlesbarem Medium sein, wie beispielsweise eine magnetische oder optische Platte.
  • Die Speichervorrichtung 606 ist in der Lage, Massenspeicherung für die Rechnervorrichtung 600 bereitzustellen. In einer Implementierung kann die Speichervorrichtung 606 ein computerlesbares Medium sein oder enthalten, wie beispielsweise eine Floppy-Disk-Vorrichtung, eine Festplattenvorrichtung, eine optische Plattenvorrichtung oder eine Bandvorrichtung, ein Flash-Speicher oder eine ähnliche Festkörper-Speichervorrichtung, oder eine Anordnung von Vorrichtungen, darin eingeschlossen Vorrichtungen in einem Speicherbereichsnetzwerk oder andere Konfigurationen. Ein Computerprogrammprodukt kann greifbar in einem Informationsträger eingebettet sein. Das Computerprogrammprodukt kann ebenso Anweisungen enthalten, welche, wenn sie ausgeführt werden, ein oder mehrere Verfahren wie beispielsweise die oben beschriebenen ausführen. Der Informationsträger ist ein computer- oder maschinenlesbares Medium, wie beispielsweise der Speicher 604, die Speichervorrichtung 606 oder der Speicher-am-Prozessor 602.
  • Die Hochgeschwindigkeitssteuerung 608 wickelt bandbreitenintensive Operationen für die Rechnervorrichtung 600 ab, während die langsame Steuerung 612 weniger bandbreitenintensive Operationen abwickelt. Eine solche Funktionszuweisung erfolgt lediglich exemplarisch. In einer Implementierung ist die Hochgeschwindigkeitssteuerung 608 mit dem Speicher 604, dem Display 616 (beispielsweise durch einen Grafik-Prozessor oder Beschleuniger) und mit den Hochgeschwindigkeitserweiterungsanschlüssen 610 gekoppelt, welche diverse Erweiterungskarten (nicht gezeigt) aufnehmen können. In der Implementierung ist die langsame Steuerung 612 mit der Speichervorrichtung 606 und mit dem langsamen Erweiterungsanschluss 614 gekoppelt. Der langsame Erweiterungsanschluss, welcher diverse Kommunikationsanschlüsse (beispielsweise USB, Bluetooth, Ethernet, drahtloses Ethernet) einschließen kann, kann mit einer oder mehreren Eingabe-/Ausgabevorrichtungen gekoppelt sein wie beispielsweise einer Tastatur, einer Zeigervorrichtung, einem Scanner oder einer Netzwerkvorrichtung wie beispielsweise einem Switch oder Router, beispielsweise durch einen Netzwerkadapter.
  • Die Rechnervorrichtung 600 kann in einer Reihe unterschiedlicher Formen wie in der Figur gezeigt implementiert werden. Beispielsweise kann sie als ein Standard-Server 620 oder mehrfach in einer Gruppe solcher Server implementiert werden. Sie kann ebenfalls als Bestandteil eines Rack-Server-Systems 624 implementiert werden. Zusätzlich kann sie in einem Personal Computer wie beispielsweise einem Laptop-Computer 622 implementiert werden. Alternativ können Komponenten der Rechnervorrichtung 600 mit anderen Komponenten in einer mobilen Vorrichtung (nicht gezeigt) wie beispielsweise Vorrichtung 650 kombiniert werden. Jede solcher Vorrichtungen kann eine oder mehrere Rechnervorrichtungen 600, 650 enthalten und ein gesamtes System kann aus mehreren Rechnervorrichtungen 600, 650 gebildet sein, welche miteinander kommunizieren.
  • Die Rechnervorrichtung 650 schließt einen Prozessor 652, einen Speicher 664, eine Eingabe-/Ausgabevorrichtung wie beispielsweise ein Display 654, eine Kommunikationsschnittstelle 666 und einen Transceiver 668 unter anderen Komponenten ein. Die Vorrichtung 650 kann ebenfalls mit einer Speichervorrichtung wie beispielsweise einem Mikrolaufwerk oder einer sonstigen Vorrichtung zur Bereitstellung von zusätzlichem Speicher versehen sein. Jede der Komponenten 650, 652, 664, 654, 666 und 668 sind miteinander unter Verwendung diverser Busse verbunden und mehrere andere Komponenten können an einer gemeinsamen Hauptplatine oder je nach Bedarf in anderer Weise montiert sein.
  • Der Prozessor 652 kann Anweisungen innerhalb der Rechnervorrichtung 650 ausführen, darunter Anweisungen, welche in dem Speicher 664 gespeichert sind. Der Prozessor kann als ein Chip-Set aus Chips implementiert sein, welche separate und mehrere analoge und digitale Prozessoren einschließen. Der Prozessor kann beispielsweise für die Koordination der anderen Komponenten der Vorrichtung 605 sorgen, wie beispielsweise Steuerung von Benutzerschnittstellen, von Applikationen, welche durch die Vorrichtung 650 ausgeführt werden, und von drahtloser Kommunikation durch die Vorrichtung 650.
  • Der Prozessor 652 kann mit einem Benutzer über die Steuerungsschnittstelle 658 und die Display-Schnittstelle 656 kommunizieren, welche mit einem Display 654 gekoppelt ist. Das Display 654 kann beispielsweise ein TFT LCD-(Thin-Film-Transistor Liquid Crystal Display) oder ein OLED-(Organic Light Emitting Diode)Display oder jede andere geeignete Displaytechnologie sein. Die Display-Schnittstelle 656 kann geeignete Schaltungen zur Ansteuerung des Displays 654 zum Präsentieren grafischer und anderer Informationen an einen Benutzer umfassen. Die Steuerungsschnittstelle 658 kann Befehle von einem Benutzer empfangen und diese zur Unterbreitung an den Prozessor 652 konvertieren. Zusätzlich kann eine externe Schnittstelle 662 in Kommunikation mit Prozessor 652 bereitgestellt sein, um Nahbereichskommunikation der Vorrichtung 605 mit anderen Vorrichtungen zu ermöglichen. Die externe Schnittstelle 662 kann beispielsweise drahtgebundene Kommunikation in einigen Implementierungen bereitstellen, oder drahtlose Kommunikation in anderen Implementierungen, und es können ebenfalls mehrere Schnittstellen verwendet werden.
  • Der Speicher 664 speichert Informationen innerhalb der Rechnervorrichtung 650. Der Speicher 664 kann als ein computerlesbares Medium oder mehrere computerlesbare Medien, eine flüchtige Speichereinheit oder mehrere flüchtige Speichereinheiten oder eine nichtflüchtige Speichereinheit oder mehrere nichtflüchtige Speichereinheiten implementiert sein. Der Erweiterungsspeicher 674 kann ebenso bereitgestellt und mit der Vorrichtung 650 über die Erweiterungsschnittstelle 672 verbunden sein, welche beispielsweise eine SIMM-(Single In Line Memory Module)Kartenschnittstelle einschließen kann. Ein solcher Erweiterungsspeicher 674 kann extra Speicherplatz für die Vorrichtung 650 bereitstellen oder kann ebenfalls Anwendungen oder andere Informationen für die Vorrichtung 650 speichern. Spezifisch kann der Erweiterungsspeicher 674 Anweisungen einschließen, um die oben beschriebenen Verfahren auszuführen oder zu ergänzen, und kann ebenso sichere Informationen einschließen. So kann beispielsweise der Erweiterungsspeicher 674 als ein Sicherheitsmodul für die Vorrichtung 650 bereitgestellt sein und mit Anweisungen programmiert werden, welche den sicheren Gebrauch der Vorrichtung 650 ermöglichen. Zusätzlich können sichere Anwendungen über die SIMM-Karton bereitgestellt werden, gleichzeitig mit zusätzlichen Informationen wie beispielsweise Platzierungs-Identifizierungsinformationen auf der SIMM-Karte in vor Hacking gesicherter Weise.
  • Der Speicher kann beispielsweise Flash-Speicher und/oder NVRAM-Speicher wie nachstehend erörtert einschließen. In einer Implementierung ist ein Computerprogrammprodukt greifbar in einem Informationsträger eingebettet. Das Computerprogrammprodukt enthält Anweisungen, welche, wenn sie ausgeführt werden, ein oder mehrere Verfahren wie beispielsweise die oben beschriebenen ausführen. Der Informationsträger ist ein computer- oder maschinenlesbares Medium wie beispielsweise der Speicher 664, der Erweiterungsspeicher 674, oder der Speicher-am-Prozessor 652, welcher beispielsweise über den Transceiver 668 oder die externe Schnittstelle 662 aufgenommen werden kann.
  • Die Vorrichtung 650 kann drahtlos über die Kommunikationsschnittstelle 666 kommunizieren, welche nach Bedarf digitale Signalverarbeitungsschaltungen einschließen kann. Die Kommunikationsschnittstelle 666 kann Kommunikationen in diversen Modi oder Protokollen wie beispielsweise unter anderem GSM-Sprachanrufen, SMS, EMS, oder MMS-Messaging, CDMA, TDMA, PDC, WCDMA, CDMA2000, oder GPRS, bereitstellen. Solche Kommunikation kann beispielsweise über den Funkfrequenz-Transceiver 668 erfolgen. Zusätzlich kann Kurzreichweiten-Kommunikation erfolgen, wie beispielsweise unter Verwendung eines Bluetooth-, WiFi,- oder ähnlichen solchen Transceivers (nicht gezeigt). Zusätzlich kann das GPS-(Global Positioning System)Empfängermodul 670 zusätzliche navigations- und lokalisierungsbezügliche drahtlose Daten an die Vorrichtung 650 bereitstellen, welche nach Bedarf durch auf der Vorrichtung 650 laufende Anwendungen verwendet werden können.
  • Die Vorrichtung 650 kann ebenfalls hörbar unter Verwendung des Audio-Codecs 660 kommunizieren, welcher gesprochene Information von einem Benutzer empfängt und diese in verwendbare digitale Informationen umwandelt. Der Audio-Codec 660 kann ebenso hörbaren Klang für einen Benutzer erzeugen, beispielsweise durch einen Lautsprecher, beispielsweise in einem Handgerät von Vorrichtung 650. Solcher Klang kann Klang von Sprachtelefonanrufen einschließen, kann aufgezeichneten Klang einschließen (beispielsweise Sprachnachrichten, Musikdateien usw.) und kann ebenso durch auf der Vorrichtung 650 betriebene Anwendungen erzeugten Klang einschließen.
  • Die Rechnervorrichtung 650 kann in einer Reihe unterschiedlicher Formen wie in der Figur gezeigt implementiert werden. Beispielsweise kann sie als ein Mobiltelefon 680 implementiert sein. Sie kann ebenso als Bestandteil eines Smartphones 682, eines digitalen persönlichen Assistenten oder ähnlicher Mobilvorrichtungen implementiert sein.
  • Einige der obigen Ausführungsbeispiele werden als Prozesse oder Verfahren beschrieben oder als Flussdiagramme abgebildet. Zwar beschreiben die Flussdiagramme die Operationen als sequenzielle Prozesse, doch zahlreiche Operationen können parallel, miteinander oder gleichzeitig ausgeführt werden. Zusätzlich kann die Reihenfolge der Operationen umgeordnet werden. Die Prozesse können beendet werden, wenn ihre Operationen abgeschlossen sind, können jedoch auch zusätzliche Schritte aufweisen, welche nicht in der Figur eingeschlossen sind. Die Prozesse können Verfahren, Funktionen, Prozeduren, Teilroutinen, Teilprogrammen usw. entsprechen.
  • Die oben erörterten Verfahren, wovon einige durch Flussdiagramme veranschaulicht sind, können durch Hardware, Software, Firmware, Middleware, Mikrocode, Hardware-Beschreibungssprachen oder eine beliebige Kombination daraus implementiert werden. Wenn sie durch Software, Firmware, Middleware oder Mikrocode implementiert werden, müssen der Programmcode oder die Code-Segmente zur Ausführung der notwendigen Aufgaben in einem maschinen- oder computerlesbaren Medium wie beispielsweise einem Speichermedium gespeichert werden. Ein oder mehrere Prozessoren) können die notwendigen Aufgaben ausführen.
  • Hierin offenbarte spezifische strukturelle und funktionale Details sind lediglich repräsentativ zum Zwecke der Beschreibung von Ausführungsbeispielen. Ausführungsbeispiele jedoch in vielen alternativen Formen ausgeführt werden und sollten nicht als nur auf die hierin dargelegten Ausführungsformen begrenzt ausgelegt werden.
  • Es versteht sich, dass, obwohl die Begriffe erster, erste, erstes, zweiter, zweite, zweites usw. hierin verwendet werden können, um unterschiedliche Elemente zu beschreiben, diese Elemente nicht durch diese Begriffe begrenzt werden sollten. Diese Begriffe werden lediglich verwendet, um ein Element vom anderen zu unterscheiden. Beispielsweise könnte ein erstes Element als ein zweites Element bezeichnet werden, und in ähnlicher Weise könnte ein zweites Element als ein erstes Element bezeichnet werden, ohne den Anwendungsbereich der Ausführungsformen zu verlassen. Wie hierin verwendet, bezeichnet der Begriff „und/oder“ jedes sowie alle beliebigen Kombinationen eines oder mehrerer der zugeordneten aufgelisteten Elemente.
  • Es versteht sich, dass, wenn ein Element als mit einem anderen Element „verbunden“ oder „gekoppelt“ bezeichnet wird, es direkt mit dem anderen Element verbunden oder gekoppelt sein kann, oder zwischengeschaltete Elemente vorhanden sein können. Im Gegensatz dazu, wenn ein Element als mit einem anderen Element „direkt verbunden“ oder „direkt gekoppelt“ bezeichnet wird, sind keine zwischengeschalteten Elemente vorhanden. Andere Worte, die verwendet werden, um die Beziehung zwischen Elementen zu beschreiben, sollten in ähnlicher Weise ausgelegt werden (beispielsweise „zwischen“ im Gegensatz zu „direkt zwischen“, „angrenzend“ im Gegensatz zu „direkt angrenzend“ usw.).
  • Die hierin verwendete Terminologie dient lediglich der Beschreibung besonderer Ausführungsformen und beabsichtigt keine Begrenzung der Ausführungsbeispiele. Wie hierin verwendet beabsichtigen die Singularformen „ein“, „eine“ und „der, die, das“ gleichermaßen den Einschluss von Pluralformen, es sei denn, der Kontext gäbe deutlich etwas anderes vor. Es versteht sich ferner, dass die Begriffe „umfasst“, „umfassend“, „einschließt“ und/oder „einschließend“, wenn sie in hierin verwendet werden, das Vorliegen von vorgegebenen Merkmalen, Ganzzahlen, Schritten, Arbeitsschritten, Elementen und/oder Komponenten spezifizieren, jedoch nicht das Vorliegen oder die Hinzufügung eines oder mehrerer anderer Merkmale, Ganzzahlen, Schritte, Arbeitsschritte, Elemente, Komponenten und/oder Gruppen davon ausschließen.
  • Ebenso ist zu beachten, dass in einigen Alternativimplementierungen die angegebenen Funktionen/Handlungen außerhalb der Reihenfolge der Angaben in den Figuren eintreten können. Beispielsweise können zwei nacheinander gezeigte Figuren in Wirklichkeit gemeinsam oder manchmal in umgekehrter Reihenfolge ausgeführt werden, abhängig von den involvierten Funktionen/Handlungen.
  • Falls nicht anders definiert, besitzen alle hierin verwendeten Begriffe (darunter technische und wissenschaftliche Begriffe) dieselbe Bedeutung, die gewöhnlich von einer durchschnittlichen Fachperson derjenigen Technik verstanden wird, zu welcher die Ausführungsbeispiele gehören. Es versteht sich ferner, dass Begriffe, beispielsweise diejenigen, die in gewöhnlich verwendeten Wörterbüchern definiert sind, so auszulegen sind, dass sie eine Bedeutung besitzen, welche mit ihrer Bedeutung in dem Kontext der relevanten Technik übereinstimmt, und nicht in einer idealisierten oder übermäßig formalen Weise auszulegen sind, es sei denn, sie wären hierin ausdrücklich so definiert.
  • Partitionen von obigen Ausführungsbeispielen und der entsprechenden detaillierten Beschreibung sind als Software oder als Algorithmen und symbolische Darstellungen von Operationen an Datenbits innerhalb eines Computerspeichers präsentiert. Diese Beschreibungen und Darstellungen sind diejenigen, mit welchen durchschnittliche Fachpersonen anderen durchschnittlichen Fachpersonen effizient die Substanz ihrer Arbeit vermitteln. Ein Algorithmus in dem Sinn, in dem der Begriff hier verwendet wird, und in dem er allgemein verwendet wird, versteht sich als eine selbstkonsistente Sequenz von Schritten, die zu dem gewünschten Ergebnis führt. Diese Schritte sind diejenigen, die physische Handhabung von physischen Größen erfordern. Üblicherweise, jedoch nicht unbedingt, nehmen diese Größen die Form von optischen, elektrischen oder magnetischen Signalen an, welche in der Lage sind, gespeichert, übertragen, kombiniert, verglichen oder anderweitig gehandhabt zu werden. Es hat sich manchmal als zweckdienlich erwiesen, vornehmlich aus Gründen des allgemeinen Sprachgebrauchs, diese Signale als Bits, Werte, Elemente, Symbole, Zeichen, Terme, Zahlen oder dergleichen zu bezeichnen.
  • In den obigen veranschaulichenden Ausführungsformen schließt die Bezugnahme auf Handlungen und symbolische Darstellungen von Operationen (beispielsweise in Form von Flussdiagrammen), welche als Programmmodule oder Funktionsprozesse implementiert werden können, Routinen, Programme, Objekte, Komponenten, Datenstrukturen usw. ein, welche besondere Aufgaben ausführen oder besondere abstrakte Datenarten implementieren und unter Verwendung existierender Hardware und existierender struktureller Elemente beschrieben und/oder implementiert werden können. Solch existierende Hardware kann eine oder mehrere zentrale Verarbeitungseinheiten (CPUs), digitale Signalprozessoren (DSPs), anwendungsspezifische integrierte Schaltkreise, feldprogrammierbare Gate-Arrays (FPGAs), Computer oder dergleichen einschließen.
  • Es ist jedoch darauf hinzuweisen, dass all diese und ähnliche Begriffe den entsprechenden physischen Größen zuzuordnen sind und lediglich zweckdienliche Etiketten sind, welche diesen Größen zugewiesen sind. Falls nicht spezifisch anderweitig festgelegt oder spezifisch anderweitig aus der Erörterung hervorgeht, beziehen sich Begriffe wie beispielsweise „Verarbeiten“ oder „Rechnen“ oder „Berechnen“ oder „Bestimmen“ oder „Anzeigen“ oder dergleichen auf die Handlung und die Prozesse eines Computersystems oder einer ähnlichen elektronischen Rechnervorrichtung, welche Daten handhabt und verwandelt, welche als physische, elektronische Größen innerhalb der Register und Speicher des Computersystems dargestellt sind, in andere Daten, welche in ähnlicher Weise als physische Größen innerhalb der Speicher und Register des Computersystems oder sonstigen ahnlichen Informationsspeicher-, Übertragungs- oder Anzeigevorrichtungen dargestellt sind.
  • Ebenfalls zu beachten ist, dass die software-implementierten Aspekte der Ausführungsbeispiele typischerweise auf einer Form von nicht transientem Programmspeichermedium oder über irgendeine Art von Übertragungsmedium implementiert werden. Das Programmspeichermedium kann magnetisch (beispielsweise eine Floppy-Disk oder eine Festplatte) oder optisch (beispielsweise ein Compact Disk Read-Only-Memory oder „CD ROM“) sein und kann Read-Only oder Random-Access sein. In ähnlicher Weise kann das Übertragungsmedium gedrillte Drahtpaare, Koaxialkabel, Lichtwellenleiter oder ein anderes geeignetes Übertragungsmedium nach dem Stand der Technik sein. Die Ausführungsbeispiele durch diese Aspekte einer gegebenen Implementierung nicht begrenzt.
  • Abschließend ist ebenfalls zu beachten, dass, obwohl die beigefügten Ansprüche besondere Kombinationen von hierin beschriebenen Merkmalen darlegen, der Anwendungsbereich der vorliegenden Offenlegungsschrift sich nicht auf die nachstehend beanspruchten besonderen Kombinationen begrenzt sondern sich stattdessen auf jede Kombination von hierin offenbarten Merkmalen oder Ausführungsformen erstreckt, unabhängig davon, ob diese besondere Kombination spezifisch in den beigefügten Ansprüchen zu diesem Zeitpunkt aufgezählt wurde oder nicht.
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Patentliteratur
    • US 14/317860 [0001]

Claims (7)

  1. Nicht transientes, computerlesbares Speichermedium, auf welchem durch einen Computer ausführbarer Programmcode gespeichert ist, welcher, wenn er auf einem Computersystem ausgeführt wird, eine Registertransferebenen-(RTL)Beschreibung eines integrierten Schaltkreises erzeugt, indem er das Computersystem dazu veranlasst, Schritte auszuführen, welche Folgendes umfassen: Empfangen (S405) eines Teils eines Quellcodes, welcher ein erstes Programmmodell einschließt, welches ein Element eines integrierten Schaltkreises definiert; Erzeugen (S410) einer ersten Registertransferebenen-(RTL)Beschreibung, basierend auf dem Teil des Quellcodes; Definieren (415) einer Library-Komponente, basierend auf der ersten RTL-Beschreibung, wobei die Library-Komponente Folgendes einschließt: eine Eingabeschnittstelle, welche dem Element des integrierten Schaltkreises zugeordnet ist, wobei die Eingabeschnittstelle konfiguriert ist, um mindestens eine Eingabevariable einem ersten Speicherplatz zuzuordnen, und eine Ausgabeschnittstelle, welche dem Element des integrierten Schaltkreises zugeordnet ist, wobei die Ausgabeschnittstelle konfiguriert ist, um mindestens eine Ausgabevariable einem zweiten Speicherplatz zuzuordnen; Empfangen (S420) des Quellcodes, welcher ein zweites Programmmodell einschließt, welches den integrierten Schaltkreis definiert; und Ersetzen (S425) des Teils des Quellcodes, welcher dem ersten Programmmodell entspricht, durch die Library-Komponente, wobei das Aufzeichnungsmedium zusätzlich dadurch gekennzeichnet ist, dass es das Computersystem zu Folgendem veranlasst: Erzeugen (S430) einer zweiten RTL-Beschreibung des integrierten Schaltkreises, basierend auf dem Quellcode, in welchem der Teil durch die Library-Komponente ersetzt wurde, wobei beim Erzeugen der zweiten RTL-Beschreibung die Eingabe- und Ausgabeschnittstellen der Library-Komponente geeignet sind, um eine Ausgabe in einem gleichen Taktzyklus wie demjenigen einer empfangenen Eingabe zu erzeugen.
  2. Nicht transientes computerlesbares Speichermedium nach Anspruch 1, wobei das erste Programmmodell eine Zustandsmaschine definiert, welche eine Multiplexer-Logik (210) einschließt, oder wobei das erste Programmmodell einen arithmetischen Decoder (205) definiert.
  3. Nicht transientes, computerlesbares Speichermedium nach Anspruch 1, wobei das Erzeugen der ersten RTL- Beschreibung Folgendes einschließt: erstes Simulieren des ersten Programmmodells, basierend auf dem Teil des Quellcodes in einer High-Level-Sprache; zweites Simulieren des ersten Programmmodells, basierend auf der ersten RTL-Beschreibung; und Vergleichen einer Ausgabe der ersten Simulation mit einer Ausgabe der zweiten Simulation; wobei die Erzeugung der ersten RTL-Beschreibung Vergleichen der ersten RTL-Beschreibung mit einer Design-Spezifikation von mindestens einem von dem Element des integrierten Schaltkreises und dem integrierten Schaltkreis einschließt, und wobei die Eingabeschnittstelle und die Ausgabeschnittstelle Hardware-Schnittstellen sind, welche durch eine High-Level-Programmiersprache definiert sind.
  4. Nicht transientes, computerlesbares Speichermedium nach Anspruch 1, wobei, während der Erzeugung der zweiten RTL-Beschreibung, die Library-Komponente eine Ausgabe in den ersten Speicherplatz schreibt, in einem gleichen Taktzyklus wie demjenigen des Empfangens einer Eingabe aus dem zweiten Speicherplatz.
  5. High-Level-Synthese-(HLS)Werkzeug, gespeichert auf einem nicht transienten, computerlesbaren Speichermedium und ausgeführt durch einen Prozessor, wobei das HLS-Werkzeug konfiguriert ist, um eine Registertransferebenen-(RTL)Beschreibung eines integrierten Schaltkreises zu erzeugen, wobei das HLS-Werkzeug Folgendes umfasst: ein Library-Verarbeitungsmodul (540), welches konfiguriert ist, um eine Library-Komponente basierend auf einer ersten RTL-Beschreibung zu definieren, welche ein Element des integrierten Schaltkreises definiert, wobei die Library-Komponente Folgendes einschließt: eine Eingabeschnittstelle, welche dem Element des integrierten Schaltkreises zugeordnet ist, wobei die Eingabeschnittstelle konfiguriert ist, um mindestens eine Eingabevariable einem ersten Speicherplatz zuzuordnen, und eine Ausgabeschnittstelle, welche dem Element des integrierten Schaltkreises zugeordnet ist, wobei die Ausgabeschnittstelle konfiguriert ist, um mindestens eine Ausgabevariable einem zweiten Speicherplatz zuzuordnen, und ein Synthesemodul (530), welches zum Ersetzen eines Teils eines Quellcodes, welcher einem ersten Programmmodell entspricht, durch die Library-Komponente konfiguriert ist, wobei der Quellcode den integrierten Schaltkreis definiert, wobei das Werkzeug dadurch gekennzeichnet ist, dass das Synthesemodul (530) weiterhin konfiguriert zum: Erzeugen einer zweiten RTL-Beschreibung des integrierten Schaltkreises, basierend auf dem Quellcode, in welchem der Teil durch die Library-Komponente ersetzt wurde, wobei das Synthesemodul ferner dergestalt konfiguriert ist, dass beim Erzeugen der zweiten RTL-Beschreibung die Eingabe- und Ausgabeschnittstellen der Library-Komponente geeignet sind, um eine Ausgabe in dem gleichen Taktzyklus wie demjenigen einer empfangenen Eingabe zu erzeugen.
  6. HLS-Werkzeug nach Anspruch 5, wobei die Eingabeschnittstelle und die Ausgabeschnittstelle Hardware-Schnittstellen sind, welche in einer High-Level-Programmiersprache definiert sind.
  7. HLS-Werkzeug nach Anspruch 5, wobei das Synthesemodul (530) ferner konfiguriert ist, um, bei der Schnittstellenverbindung mit der Library-Komponente, eine Ausgabe in den ersten Speicherplatz schreiben, in einem gleichen Taktzyklus wie demjenigen des Lesens einer Eingabe aus dem zweiten Speicherplatz.
DE202015009978.5U 2014-06-27 2015-07-06 Programmcode zum Implementieren eines effizienten Entropie-Decoders unter Verwendung von High-Level-Synthese Active DE202015009978U1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US201414317860 2014-06-27
US14/317,860 US9075945B1 (en) 2014-06-27 2014-06-27 Method for implementing efficient entropy decoder by using high level synthesis

Publications (1)

Publication Number Publication Date
DE202015009978U1 true DE202015009978U1 (de) 2022-06-01

Family

ID=53492011

Family Applications (1)

Application Number Title Priority Date Filing Date
DE202015009978.5U Active DE202015009978U1 (de) 2014-06-27 2015-07-06 Programmcode zum Implementieren eines effizienten Entropie-Decoders unter Verwendung von High-Level-Synthese

Country Status (7)

Country Link
US (1) US9075945B1 (de)
EP (1) EP3162077A4 (de)
JP (1) JP6345814B2 (de)
KR (1) KR101834896B1 (de)
CN (1) CN106507698B (de)
DE (1) DE202015009978U1 (de)
WO (1) WO2015200930A1 (de)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10169513B2 (en) * 2016-05-06 2019-01-01 Baidu Usa Llc Method and system for designing FPGA based on hardware requirements defined in source code
US10997296B2 (en) * 2017-03-22 2021-05-04 Oracle International Corporation System and method for restoration of a trusted system firmware state
CN107179932A (zh) * 2017-05-26 2017-09-19 福建师范大学 基于fpga高层次综合指令的优化方法及其系统
US10628142B2 (en) * 2017-07-20 2020-04-21 Texas Instruments Incorporated Loop break
CN109582511B (zh) * 2017-09-29 2022-11-15 龙芯中科技术股份有限公司 控制器的生成方法、装置及存储介质
CN107704248A (zh) * 2017-10-30 2018-02-16 北京华为数字技术有限公司 一种检测方法及设备
CN115885252A (zh) * 2020-08-28 2023-03-31 西门子工业软件有限公司 对与设备的固件单元相关联的软件模块进行编程的方法

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3852741B2 (ja) 2000-10-31 2006-12-06 シャープ株式会社 高位合成方法および高位合成装置
US7302670B2 (en) * 2000-12-21 2007-11-27 Bryan Darrell Bowyer Interactive interface resource allocation in a behavioral synthesis tool
US7203912B2 (en) * 2004-07-21 2007-04-10 Rajat Moona Compiling memory dereferencing instructions from software to hardware in an electronic design
US7743352B2 (en) 2006-03-22 2010-06-22 Nec Laboratories America, Inc. Computer implemented method of high-level synthesis for the efficient verification of computer software
US7665059B2 (en) * 2006-06-07 2010-02-16 Bluespec, Inc. System and method for designing multiple clock domain circuits
US20080201671A1 (en) * 2007-02-16 2008-08-21 Atrenta, Inc. Method for generating timing exceptions
US7895549B1 (en) 2007-11-23 2011-02-22 Altera Corporation Method and apparatus for implementing a processor interface block with an electronic design automation tool
US7904850B2 (en) * 2007-11-30 2011-03-08 Cebatech System and method for converting software to a register transfer (RTL) design
JP2009157440A (ja) 2007-12-25 2009-07-16 Toshiba Corp 高位合成装置、高位合成システム、及び高位合成方法
JP2009217720A (ja) * 2008-03-12 2009-09-24 Toshiba Corp プログラム生成装置およびプログラム生成方法
US8185851B2 (en) 2009-08-12 2012-05-22 Taiwan Semiconductor Manufacturing Company, Ltd. Memory building blocks and memory design using automatic design tools
JP5571928B2 (ja) * 2009-09-16 2014-08-13 株式会社日立情報通信エンジニアリング 集積回路設計方法及びプログラム
US8386749B2 (en) * 2010-03-16 2013-02-26 Advanced Micro Devices, Inc. Address mapping in virtualized processing system
US20130021350A1 (en) * 2011-07-19 2013-01-24 Advanced Micro Devices, Inc. Apparatus and method for decoding using coefficient compression
US9338510B2 (en) * 2011-07-31 2016-05-10 Google Inc. Systems and methods for presenting home screen shortcuts
US10158873B2 (en) * 2011-11-30 2018-12-18 Qualcomm Incorporated Depth component removal for multiview video coding (MVC) compatible three-dimensional video coding (3DVC)
JP5910108B2 (ja) 2012-01-25 2016-04-27 株式会社ソシオネクスト 高位合成装置,高位合成方法,高位合成プログラム,集積回路の設計方法

Also Published As

Publication number Publication date
KR20170093702A (ko) 2017-08-16
JP2017524180A (ja) 2017-08-24
WO2015200930A1 (en) 2015-12-30
EP3162077A4 (de) 2018-01-24
EP3162077A1 (de) 2017-05-03
CN106507698B (zh) 2019-07-23
JP6345814B2 (ja) 2018-06-20
CN106507698A (zh) 2017-03-15
KR101834896B1 (ko) 2018-03-08
US9075945B1 (en) 2015-07-07

Similar Documents

Publication Publication Date Title
DE202015009978U1 (de) Programmcode zum Implementieren eines effizienten Entropie-Decoders unter Verwendung von High-Level-Synthese
CN107656914B (zh) 可配置化的表格生成方法、装置、终端设备及存储介质
CN107451184A (zh) 页面显示方法及装置、用户设备、存储介质
DE202009019145U1 (de) Hardware-beschleunigte Grafiken für Online-Applikationen mithilfe von nativen Code-Modulen
DE112016004324T5 (de) Heterogene Kompressionsarchitektur für optimiertes Kompressionsverhältnis
US9489481B2 (en) Layout design method and system
CN109359053A (zh) 测试报告的生成方法和相关装置、测试系统及存储介质
DE102018005976A1 (de) Systeme, vorrichtungen und verfahren zur multiplikation und akkumulation von vektorgepackten vorzeichenbehafteten werten
CN104049947A (zh) 基于动态重命名的矢量寄存器堆的寄存器重新配置
CN111124433B (zh) 程序烧写设备、系统及方法
CN109542398B (zh) 一种业务系统生成方法、装置及计算机可读存储介质
US20240126758A1 (en) Run-time performance of a database
DE102016115922A1 (de) Halbleiterschaltung
DE112017005197T5 (de) Hybrid-Komprimierungsschema zur effizienten Speicherung synaptischer Gewichte in neuromorphen Hardware-Kernen
CN110312990A (zh) 配置方法及系统
CN113822002B (zh) 数据处理方法、装置、计算机设备及存储介质
US9436587B2 (en) Test context generation
DE102015114721B4 (de) Verfahren, Gerät und System zur Datenverarbeitung
DE112022002258T5 (de) Tensormodifikation basierend auf der verarbeitung von ressourcen
KR101743868B1 (ko) 이미지 프로세싱 방법 및 그 시스템
CN111639030A (zh) 一种页面测试方法、装置、设备及存储介质
US8108808B2 (en) Description processing device, description processing method, and recording medium
CN111897714B (zh) 一种基于辅助测试工具的测试数据沉淀方法、装置及系统
US9552296B2 (en) Verifying shared memory integrity
CN103390055A (zh) 一种文件传输方法及系统

Legal Events

Date Code Title Description
R151 Utility model maintained after payment of second maintenance fee after six years
R207 Utility model specification
R152 Utility model maintained after payment of third maintenance fee after eight years