VHDL-Synthese für Fortgeschrittene

Slides:



Advertisements
Ähnliche Präsentationen
OmsCube Objektverwaltung, basierend auf einem relationalen Datenbankmanagementsystem.
Advertisements

PL/SQL - Einführung. © Prof. T. Kudraß, HTWK Leipzig Vorteile Application Other DBMSs Application Oracle with PL/SQL SQL SQL SQL SQL SQLIF...THENSQLELSESQL.
PL/SQL - Programmierung von Programmeinheiten. © Prof. T. Kudraß, HTWK Leipzig Gespeicherte Prozeduren – Eine Prozedur ist ein benannter PL/SQL Block,
Einführung in die Informatik: Programmierung und Software-Entwicklung
ACM ICPC Praktikum Kapitel 8: Backtracking. Übersicht Backtracking Aufzählung aller Teilmengen Aufzählung aller Permutationen n-Königinnen-Problem.
Peter Marwedel Informatik 12 TU Dortmund
P. Marwedel Informatik 12, U. Dortmund
PL/SQL - Kurze Einführung -.
An OGC Standards Driven Geodata Online Access for DLRs National Remote Sensing Data Library (NRSDL) Torsten Heinen German Remote Sensing Data Center (DLR/DFD)
Informatik 12, TU Dortmund
Peter Marwedel TU Dortmund, Informatik 12
Fakultät für informatik informatik 12 technische universität dortmund Hardware/Software Partitioning Peter Marwedel Informatik 12 TU Dortmund Germany Chapter.
Fakultät für informatik informatik 12 technische universität dortmund 3. Mikroarchitekturen Peter Marwedel Informatik 12 TU Dortmund 2011/04/28 Diese Folien.
Intelligente Dateisysteme Einführende Bemerkungen Manfred Thaller, Universität zu Köln Köln 17. Oktober 2013.
Design by Contract with JML - Teil 2
Personalisierte Benutzeroberflächen BFD WS 12/13 Übung 6 Producing an end-user experience that is uniquely appropriate for each individual. [Sears]
Objektrelationales Mapping mit JPA Entity Mapping Jonas Bandi Simon Martinelli.
Java: Dynamische Datentypen
Moore E A Zustands- speicher (ZS) Übergangs- logik (ÜL) Folgezustand
PL/SQL - Einführung. © Prof. T. Kudraß, HTWK Leipzig Vorteile Application Other DBMSs Application Oracle with PL/SQL SQL SQL SQL SQL SQLIF...THENSQLELSESQL.
Hier wird Wissen Wirklichkeit Computer Architecture – Part 7 – page 1 of 56 – Prof. Dr. Uwe Brinkschulte, Prof. Dr. Klaus Waldschmidt Part 7 Instruction.
Institut für Angewandte Mikroelektronik und Datentechnik Fachbereich Elektrotechnik und Informationstechnik, Universität Rostock Spezielle Anwendungen.
Modulare Programmierung
DVG Verkettete Listen Verkettete Listen. DVG Verkettete Listen 2 Primitive Datentypen Vorteile: –werden direkt vom Prozessor unterstützt.
FH-Hof Sortieren mit Binären Bäumen Richard Göbel.
CTS2 based Terminology Server – Overview – Project eBPG
Libero: Design Creation / Verification Seminar WS04/05 Andreas Schibilla (ii4900)
Microsoft Office Forms Server
Die Hardwarebeschreibungssprache VHDL
OO implementieren Teil IV Objekte erzeugen. © René ProbstModul 226IV - 2 Von der Klasse zum Objekt Plan Bau Objekt Klasse Instanzierung Objekt Das Objekt.
3rd Review, Vienna, 16th of April 1999 SIT-MOON ESPRIT Project Nr Siemens AG Österreich Robotiker Technische Universität Wien Politecnico di Milano.
Traildevils Mobile Web-App X-Platform Stefan Oderbolz Jürg Hunziker 16. Dezember 2011.
The free XML Editor for Windows COOKTOP Semistrukturierte Daten 1 Vortrag Semistrukturierte Daten 1 COOKTOP The free XML-Editor for Windows
BIT – Schaßan – WS 02/03 Basisinformationstechnologie HK-Medien Teil 1, 11.Sitzung WS 02/03.
FPGA... ein Versuch. Uli Schäfer 1. Historie: PLD Uli Schäfer 2 Schaltungsgrösse wächst drastisch mit Zahl der Eingänge CPLD = Array + Flipflops + macro.
Entity Mapping Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.
Neno Loje Berater & MVP für Visual Studio ALM und TFS (ehemals VSTS) Hochqualitative Produkte mit Visual Studio & TFS 2010.
3/28/2017 8:11 PM Visual Studio Tools für Office { Rapid Application Development für Office } Jens Häupel Platform Strategy Manager Microsoft Deutschland.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Kap 4-1OHO Kap. 4.2 Das Orbix CORBA-System Kurzer überblick zu der CORBA-Implementierung Orbix •Unser Fahrplan: •IDL Verwendungsbeispiel •Zoom-In: CORBA.
Abteilung für Telekooperation Übung Softwareentwicklung 2 für Wirtschaftsinformatik Dr. Wieland Schwinger
JSP Einführung Skripte Direktiven Tomcat 3.2 Version 1.1
VHDL 3: Sequential Statements (Process)
Synthetisierbares VHDL
School of Engineering Themen: Variablen Architecture-Types.
VHDL 7: Automaten 1.
VHDL2_Sprachelemente und Concurrent Statements (Nebenläufige Anweisungen)
VHDL 4: Getaktete Logik (D-FF, Zähler, Automaten)
School of Engineering DT2 Projekt-3: Baud Rate Generator & GPS Decoder.
Inhalt Einen Zähler generisch aufbauen CPLD Synthese Timing Analyse
School of Engineering DT2 Projekt-2: Baud Rate Generator & GPS Decoder.
Equals, Hashcode und CompareTo Micha Kessler
Dynamische Datentypen
Univ.-Lektor Dipl.-Ing. Dr. Markus Schranz staatlich befugter und beeideter Ingenieurkonsulent für Informatik Web Application Engineering & Content Management.
Purga - Scriptengine Ein Einblick.
Graph Pattern Semantik Michael Schmidt,
Advanced Digital Design Übung 3. Aufgabe 1: Algorithmus für Phasen Inverter Plazierung Systematic approach: 1. Identify combinational logic and registers/memories.
Datentypen: integer, char, string, boolean
Ciiema CITEM - Dr. Siegl VU Dr. Manfred Siegl ENTWURF, ERRICHTUNG, BETRIEB VON DATENNETZEN VU Dr. Manfred Siegl
Fakultät für informatik informatik 12 technische universität dortmund Memory architecture description languages - Session 20 - Peter Marwedel TU Dortmund.
1 Stevens Direct Scaling Methods and the Uniqueness Problem: Empirical Evaluation of an Axiom fundamental to Interval Scale Level.
EN/FAD Ericsson GmbH EDD/ Information im 21. Jahrundert muss Erwünscht Relevant Erreichbar Schnell Kostenlos!?
Technische Universität München 1 CADUI' June FUNDP Namur G B I The FUSE-System: an Integrated User Interface Design Environment Frank Lonczewski.
GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Kollektive Operationen Oswald Haan
FPGA Praktikum WS2000/ Woche: VHDL Tips Ein Schläger für das Spiel.
Folien zur Vorlesung Hardwarearchitekturen und Rechensysteme von Prof. Dr. rer. nat. U. Brinkschulte Prof. Dr.-Ing. L. Hedrich (basierend auf Materialien.
X. Übungsblatt – Aufgabe X In dieser Aufgabe soll ein synchron getakteter Steuerungsautomat für den in Abbildung 1 dargestellten Prozessor-Chip mit geringem.
Datentypen: integer, char, string, boolean
GRUNDLAGEN WISSENSCHAFTLICHEN ARBEITENS MODULA-2 SONAY SUBAYAZ
CSL211 Computer Architecture
 Präsentation transkript:

VHDL-Synthese für Fortgeschrittene Ronald Hecht ronald.hecht@etechnik.uni-rostock.de

Motivation Synthese-Tools werden immer leistungsfähiger Abstraktionslevel steigern! Lesbarkeit Wartbarkeit Design-Reuse Robustheit des Codes erhöhen!

Überblick ieee.numeric_std und integer Packages Clock und Reset Technologie-Mapping Flexible Interfaces 2-Prozess-Methode

Das Paket numeric_std std_logic_arith/signed/unsigned sind Synopsys Pakete Defacto Industrie Standard, aber nicht standardisiert numeric_std ist IEEE 1076.3 Standard Strenger typisierte Operatoren Für neue Designs streng empfohlen type UNSIGNED is array (NATURAL range <>) of STD_LOGIC; type SIGNED is array (NATURAL range <>) of STD_LOGIC;

Typumwandlung std_logic_vector Es ist nicht definiert, ob std_logic_vector signed oder unsigned ist Deshalb explizite Typumwandlung variable slv : std_logic_vector(7 downto 0); variable u : unsigned(7 downto 0); variable s : signed(7 downto 0); slv := std_logic_vector(u); slv := std_logic_vector(s); u := unsigned(slv); s := signed(slv);

Typumwandlung integer Konvertierungsfunktionen to_... Bei Umwandlung von std_logic_vector nach integer signed/unsigned beachten! variable ui : integer range 0 to 255; variable si : integer range -128 to 127; ui := to_integer(u); si := to_integer(s); ui := to_integer(unsigned(slv)); u := to_unsigned(ui, u'length); s := to_signed(si, s'length); slv := std_logic_vector(to_unsigned(ui, slv'length));

Operatoren in numeric_std Alle gängigen Integeroperationen Schiebeoperationen Operationen mit std_logic_vector etwas umständlich aber eindeutig + - * / mod rem = /= < > <= >= shift_left shift_right rotate_left rotate_right sll srl rol ror u := u + 1; s := s + 1; slv := std_logic_vector(unsigned(slv) + 1);

integer und boolean versus std_logic_vector signed/unsigned, std_logic_vector oft etwas umständlich Basieren auf neunwertigem std_logic Langsam in der Simulation im Vergleich zu integer und boolean Verwende nach Möglichkeit integer und boolean für Zähler, Adressen, Arithmetische Operationen Interne Statussignale Synthetisierbar!

Integer für die Synthese Immer range angeben! Alles optimal synthesefähig! variable a, b, c : integer range 0 to 255; variable addr : integer range 0 to depth - 1; c := a + b; c := a * b; -- shift left/right c := a * 4; c := a / 8; -- wrap counter c := (a + 1) mod 256; -- get some bits c := (a / 4) mod 16; -- access memory variable mem : mem_type; o := mem(addr); -- binary to one-hot o := (others => '0'); o(addr) := '1';

Verwende Variablen! Hohe Simulationsgeschwindigkeit Einfaches Debugging Auch im Waveform-Viewer darstellbar Sequentielle Darstellung Sofortige Aktualisierung Besser verständlich und wartbar Sehr gute Syntheseergebnisse

Verwende Packages! Design-Reuse, Wartbarkeit Modularität, Abstraktion package package_name is -- Deklaration von: -- Typen und Untertypen -- Konstanten, Aliase -- Signalen, Files -- Funktionen -- Prozeduren -- Attributen -- Komponenten -- Definition von: -- Konstanten end package_name; package body package_name is -- Definition von vorher -- deklarierten Objekten: -- Funktionen -- Prozeduren -- Konstanten -- Deklaration/Definition -- von zusaetzlichen -- Objekten end package_name;

Beispiel CRC-Package Beschreibung der komb. Logik -- CRC32 Generator: "CRC-32", Ethernet, AAL5 constant CRC32_GEN : std_logic_vector(31 downto 0) := "00000100110000010001110110110111"; -- CRC-CCITT Generator: HDLC constant CRC_CCITT_GEN : std_logic_vector(15 downto 0) := "0001000000100001"; -- calculates next crc value, data vector function next_crc ( crc : std_logic_vector; -- current CRC value data : std_logic_vector; -- incoming data gen : std_logic_vector) -- generator Polynom w/o x^n return std_logic_vector; begin ... ... end next_crc;

Weitere Anwendungen von Packages Kombinatorische Logik Interfaces, Komponenten Helper-Funktionen, Typumwandlung Design Konfiguration Verhaltensmodelle Logging

rising_edge(clk) Zwei Möglichkeiten in VHDL für flankensensitive Elemente rising_edge() ist in der Simulation robuster Kürzer und einfacher aufzuschreiben Verwende rising_edge() clk'event and clk = '1' rising_edge(clk) FUNCTION rising_edge (SIGNAL s : std_ulogic) RETURN BOOLEAN IS BEGIN RETURN (s'EVENT AND (To_X01(s) = '1') AND (To_X01(s'LAST_VALUE) = '0')); END;

Register mit und ohne Reset Problem: Einige Register werden nicht zurückgesetzt Gated Clock oder Clock Enable regs_wrong: process (clk, rst) begin if rst = '0' then r1 <= '0'; elsif rising_edge(clk) then r1 <= x; r2 <= y; end if; end process regs_wrong;

Alternative synthesefähige Beschreibung des Resets Ausnutzung der Priorität durch Beschreibungsreihenfolge Synchrones und asynchrones Reset regs_s: process (clk) begin if rising_edge(clk) then r1 <= x; r2 <= y; if rst = '0' then r1 <= '0'; end if; end process regs_s; regs_as: process (clk, rst) begin if rising_edge(clk) then r1 <= x; r2 <= y; end if; if rst = '0' then r1 <= '0'; end process regs_as;

Reset – Synchron oder Asynchron? Beides hat Vor- und Nachteile Synchrone Resets häufig für FPGAs Asynchrone Resets oft für ASICs Konfigurierbar? Externes Reset immer einsynchronisieren! rst_sync: process (clk, pad_rst) begin if rising_edge(clk) then r <= '1' & r(r'high downto 1); end if; if pad_rst = '0' then r <= (others => '0'); end process rst_sync; rst <= r(0);

Konfigurierbares Reset Konfigurations-Package constant USE_SYNC_RESET : boolean := TRUE; constant USE_ASYNC_RESET : boolean := NOT(USE_SYNC_RESET); function sync_reset(rst : std_logic) return boolean is begin if (USE_SYNC_RESET) then return (rst = '0'); else return false; end if; end; function async_reset(rst : std_logic) if (USE_ASYNC_RESET) then return (rst = '0');

Konfigurierbares Reset Verwendung der Reset-Funktionen Redundante Reset-Anweisungen vermeidbar durch Prozedur reg: process (clk, rst) begin if rising_edge(clk) then q <= d; if sync_reset(rst) then q <= '0'; end if; if async_reset(rst) then end process regs;

Technologie Mapping Schaltungen enthalten architektur-spezifische Komponenten Pads RAMs, Registerfiles Spezielle Beschleunigende Hardware Schlechte Portierbarkeit Lösung: Technologie-Wrapper für diese Elemente

Technologie Mapping Dateien Wrapper in tech_map Ausnutzung von Designhierarchie

Technologie Mapping VHDL-Implementierung package tech_map is component inpad port (pad : in std_logic; q : out std_logic); end component; ... end tech_map; entity inpad ... architecture rtl of inpad is begin ip0 : if TARGET_TECH = virtex generate ipx : virtex_inpad port map (q => q, pad => pad); end generate; ip4 : if TARGET_TECH = atc18 generate ipx : atc18_inpad port map (q => q, pad => pad); end rtl; type target_tech_type is (gen, virtex, virtex2, apex, atc18, ...); constant TARGET_TECH : target_tech_type := apex;

Flexible Interfaces Probleme bei großen Designs: Entities haben viele Signale Änderung der Entities bedeutet Modifikationen in vielen Dateien Schwierige Namensgebung Schlecht wartbar Lösung: Definition flexibler Signaltypen mit Records

Flexible Interfaces – in/out Entity-in/out erzwingt zwei Datentypen Deklaration von name_in_type und name_out_type type mem_in_type is record data : mem_data_type; end record; type mem_out_type is address : mem_address_type; data : mem_data_type; data_tri : std_logic; csn : std_logic; oen : std_logic; writen : std_logic; -- Memory controller entity mem_ctrl is port ( clk : in std_logic; rst : in std_logic; memi : in mem_in_type; memo : out mem_out_type -- noch weitere Signale -- Steuer- und -- Datenleitungen ); end mem_ctrl;

Flexible Interfaces – inout? Pads können inout sein Bei Verwendung von „drive“-Signalen kein inout-Typ notwendig -- Top Entity, Signale -- repraesentieren Pads entity top is port ( clk : in std_logic; rst : in std_logic; data : inout mem_data_type; address : out mem_address_type; csn : out std_logic; oen : out std_logic; writen : out std_logic -- noch weitere Signale ); end top; mem_ctrl_i: mem_ctrl port map ( clk => clk, rst => rst, memi => memi, memo => memo); data <= memo.data when memo.data_tri = '0' else (others => 'Z'); memi.data <= data;

Flexible Interfaces Keine Records in den Ports der Top-Entity Tristate-Buffer nur in der Top-Entity Bei bidirektionalen On-Chip-Bussen Tristate-Buffer in der Bus-Entity On-Chip-Tristate aber stets vermeiden! Testbarkeit Geschwindigkeit inout-Type nicht nötig

Flexible Interfaces Strategien IPCore-Schnittstellen ähneln sich System, Steuer- und Statussignale, RX und TX

Flexible Interfaces – Tipps Takt und Reset nicht in Records Hierarchische Records entity hdlc_layer is port ( clk : in std_logic; rst : in std_logic; rx_clk : in std_logic; tx_clk : in std_logic; ctrli : in hdlc_ctrl_in_type; ctrlo : out hdlc_ctrl_out_type; clienti : in hdlc_client_in_type; cliento : out hdlc_client_out_type; hdlci : in hdlc_in_type; hdlco : out hdlc_out_type); end hdlc_layer; type hdlc_client_in_type is record rx : hdlc_client_rx_in_type; tx : hdlc_client_tx_in_type; end record; type hdlc_client_out_type is rx : hdlc_client_rx_out_type; tx : hdlc_client_tx_out_type;

Flexible Interfaces Vorteile Wenige Signale in der Entity und in Sensitivity-Listen Einfaches Hinzufügen von Ports Einfaches route-through Gute Wartbarkeit Hoher Abstraktionsgrad Hierarchische Schnittstellen

Abstraktion digitaler Logik Synchrones Design (Modul) besteht aus: Kombinatorischer Logik Registern (Flip-Flops, Speicher) Register an den Ausgängen oder nicht? Moore/Mealy haben im Normalfall keine Register am Ausgang

Nichtabgetaktete Ausgänge Problematische Timinganalyse Kombinatorische Schleifen möglich Undefinierte Eingangssignallaufzeit für angeschlossene Module Glitches Vorsicht, Probleme!

Abgetaktete Ausgänge! Am Ausgang nach Möglichkeit immer Register Ausnahme: Single-Cycle Handshake req mit Register ack ohne Register

Traditionelles RTL-VHDL Viele kleine parallele Anweisungen und Prozesse Viele Signale state/next_state-Signalnamen Unflexible Designpattern Kombinatorische Logik Register, FSMs „Schematic-VHDL“

Traditionelles RTL-VHDL Probleme Langsame Simulation, da viele Signale und Prozesse Schwer und meist nur mit Hilfe eines Schaltplans zu verstehen Schwieriges Debugging Algorithmus nicht erkennbar Fehleranfällig Latches Mehrfachtreiber

2-Prozess Methode Modul besteht nur aus 2 Prozessen Sequentieller Prozess r = rin Kombinatorischer Prozess rin = f(r, in) Ausgänge outreg = g(r) und outunreg = h(r, in)

2-Prozess Methode Zwei lokale Signale als Record für alle Register Register Eingang rin Register Ausgang r Algorithmus Kombinatorischer Prozess f(r, in) Lokale Variable v für den neuen Registerinhalt rin = v Weitere lokale Variablen für kombinatorische Ausgänge und Zwischenergebnisse

2-Prozess Methode VHDL Beispiel Neuer Typ für alle Register Zwei Signale und ein Prozess für alle Register Einfaches Entfernen und Hinzufügen von Registern type state_type is (low, high); type reg_type is record state : state_type; o : std_logic; end record; signal r, rin : reg_type; reg : process (clk, rst) begin if rising_edge(clk) then r <= rin; end if; if async_reset(rst) then reset(r); end process reg;

2-Prozess Methode reset(r) Bei Registerdeklaration auch die reset-Prozedur definieren Vermeidung von Redundanz procedure reset ( signal r : inout reg_type) is begin -- reset r.state <= low; r.o <= '0'; end reset; reg : process (clk, rst) begin if rising_edge(clk) then r <= rin; if sync_reset(rst) then reset(r); end if; if async_reset(rst) then end process reg;

2-Prozess Methode VHDL Beispiel Variable zur Berechnung des neuen Register-wertes Defaultzuweisung Algorithmus Zuweisung an den Registereingang Treiben der Aus-gänge comb : process (r, i) variable v : reg_type; begin -- process comb -- Defaultzuweisung v := r; -- Ausgang meist '0' v.o := '0'; -- Zustandsmaschine case r.state is when low => if i = '1' then v.state := high; v.o := '1'; end if; when high => if i = '0' then v.state := low; end case; -- Ausgaenge treiben rin <= v; o <= r.o; end process comb;

2-Prozess Methode Debugging

2-Prozess Methode Vorteile Sequentielle Beschreibung des Algorithmus Konsistenter Coding-Style Einfach zu verstehen Sehr gut wartbar Schnell in der Simulation Problemlose Synthese Kaum Fehleranfällig

2-Prozess Methode – Tipps Defaultwerte für v.xyz Variablen für Zwischenergebnisse und kombinatorische Ausgänge Kombinatorische Ausgabe auch mit o<=v.ack möglich Funktionen und Prozeduren für häufig wiederkehrende Aufgaben Mut zum einfacher lesbaren Code! Beispiele: www.gaisler.com und LAPV5DL

Duplizieren von Logik Schleifen oder „generate“? Grenzen müssen zur Compile-Time bekannt sein Viele weitere Anwendungen Mut zu Schleifen! for i in r.count'range loop v.count(i) := (r.count(i) + 1) mod 8; if v.count(i) = 0 then v.tick(i) := '1'; else v.tick(i) := '0'; end if; end loop;

Auswahl von Logik if-then oder „generate“? Bedingung muss zur Compile-Time bekannt sein if CALIBRATE then -- remove this logic when -- CALIBRATE = false v.period_counter := r.period_counter + 1; if rising then v.period := v.period_counter; v.period_counter := 0; end if; else -- CALIBRATE = true v.period := CLK_RATE / FREQUENCY;

Zusammenfassung ieee.numeric_std verwenden Integer, Variablen, Packages Takt und Reset Technologie Mapping Flexible Interfaces 2-Prozess-Methode