VHDL 3: Sequential Statements (Process)

Slides:



Advertisements
Ähnliche Präsentationen
Word Order in German Subordiante Clauses
Advertisements

Abschluss Gegeben Menge F von funktionalen Abhängigkeiten.
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
WS 04/05, v 1.0Communication Networks I - Overview and Formalities1 Lösung von Reader-Writer bei Reader-Bevorzugung int Readernr=0; Semaphor w, mutex=1.
Fakultät für informatik informatik 12 technische universität dortmund Lehrstuhl Informatik 12 Technische Informatik/Eingebettete Systeme Arbeitsbereich.
fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2009/01/10 Graphics:
Peter Marwedel TU Dortmund, Informatik 12
Vorlesung 9.1: Erinnerung Universität Bielefeld – Technische Fakultät AG Rechnernetze und verteilte Systeme Peter B. Ladkin
Vorlesung 9.1: Erinnerung Universität Bielefeld Technische Fakultät AG Rechnernetze und verteilte Systeme Peter B. Ladkin Wintersemester.
Institut für Angewandte Mikroelektronik und Datentechnik Fachbereich Elektrotechnik und Informationstechnik, Universität Rostock Spezielle Anwendungen.
Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University Test Summary: m ein Fehler pro Tag m Test First m Funktionstests.
2 Ihr habt noch Minuten ©CAS 2004 Ihr habt noch Minute ©CAS
Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University Client Architecture Data Model GUI KI Socket Connection.
Neuseelands Reaktion auf die Ergebnisse der TIMS-Studie: The most significant changes in teacher attitude and beliefs come after they begin using a new.
Wo - Komponisten Deutsch macht Spaß mit Frau Boyle!
1.How do you go to school? Wie kommst du zur Schule? Germany.
Kapitel 4: Die Schule Deutsch 1
Die Hardwarebeschreibungssprache VHDL
Frage des Tages : 1. Nimm die HA heraus. 2
Dienstag LT: Using Dative vs. Akkusative Reflexive Pronouns #2
Einführung in die Programmierung
Use your family tree and check if the statement is correct (stimmt) or not (stimmt nicht)
Dienstag: LT: wo/da compounds
Heute ist Freitag, der 13. September 2013
Learning Target / Lernziel: 1.Hausaufgabenkontrolle (Vok 1-1) 2.Kultur 3.Forming questions Heute ist Dienstag, der 3. September 2013 Hausaufgaben GH #1,#2.
Montag LT: Dative Reflexive
Synthetisierbares VHDL
School of Engineering Themen: Variablen Architecture-Types.
VHDL 7: Automaten 1.
VHDL 8: Automaten 2.
VHDL2_Sprachelemente und Concurrent Statements (Nebenläufige Anweisungen)
VHDL 4: Getaktete Logik (D-FF, Zähler, Automaten)
Inhalt Einen Zähler generisch aufbauen CPLD Synthese Timing Analyse
DT2 Projekt-1Einführung
Auswahlanweisungen, Iterationsanweisungen, Blöcke, Sprunganweisungen
Hätte gern vs. Möchte gern
Writing Correct Programs (Programme korrekt erstellen) Vortrag zum Oberseminar Softwareentwicklung von Jörg Winkler (01IN-PI)
Heute ist Montag, der 17. September 2012: Lernziel: 1.Diskussion: Sprechen 2.Wie kommst du zur Schule? 3.Leseverständnis (Reading Comprehension) 4.Quiz.
Algorithmen und Datenstrukturen Übungsmodul 3
Launch ON Global.vi System ID object name classname Services to suscribe Observer Control Ref vi-path Service name Step 1 : Objects register to the Global.vi´s,
Modellbasierte Software-Entwicklung eingebetteter Systeme
By Martin L. Loeffler.  The basic sentence has a subject and a verb.  The subject and verb need to be together.  The subject and verb need to agree.
Da - Komponisten Deutsch macht Spaß mit Frau Boyle!
FPGA Praktikum WS2000/ Woche: VHDL Tips Ein Schläger für das Spiel.
The imperative tense is also known as the command forms. When giving commands, you can use only the understood subjects “you” or “we” in English. In German,
Die Kunst des Programmierens...
Lust auf Lesen Treffpunkt Deutsch Sixth Edition. Relative Pronoun object of a preposition Recall from chapter 9 that relative clauses describe people,
Deutsch Eins
Heute ist Mittwoch der 4te Februar 2015 Lernziele: Akk Pronouns, sprechen Wir machen: AKK arbeiten, sprech arbeiten. Sprech Quiz Donnerstag.
Direct objects and adjective endings
You need to use your mouse to see this presentation © Heidi Behrens.
Wieland Schwinger Softwareentwicklung 2 Assertions.
Folien zur Vorlesung Hardwarearchitekturen und Rechensysteme von Prof. Dr. rer. nat. U. Brinkschulte Prof. Dr.-Ing. L. Hedrich (basierend auf Materialien.
Ich brauche_____ ihn euch Ich besuche ___________ Es uns
EUROPÄISCHE GEMEINSCHAFT Europäischer Sozialfonds EUROPÄISCHE GEMEINSCHAFT Europäischer Fonds für Regionale Entwicklung Workpackage 5 – guidelines Tasks.
X. Übungsblatt – Aufgabe X In dieser Aufgabe soll ein synchron getakteter Steuerungsautomat für den in Abbildung 1 dargestellten Prozessor-Chip mit geringem.
Kleider der Jeansrock der Pullover der Rock die Jacke die Krawatte
Uses of the Konjunktiv A. Höflichkeit/politeness B. Wunschdenken/wishful thinking C. Hypothetisches, Contrary-to-Fact.
On the case of German has 4 cases NOMINATIVE ACCUSATIVE GENITIVE DATIVE.
Technische Universität München Institute of Aeronautical Engineering Prof. Dr.-Ing. Horst Baier Presentation of the Institute (December 2009)
Titelfolie.

Die Schultüte 1.
Kapitel 1-Stufe 3 Kann ich’s wirklich?.
Writing Correct Programs
Arrays of Objects, a 3 part process
Titelfolie.
 Präsentation transkript:

VHDL 3: Sequential Statements (Process)

Sequential Statements Inhalt Sequential Statements Process If Statement Case Statement Wait Assert

Process

Architecture mit Concurrent Statements ARCHITECTURE comb OF rsff IS BEGIN q <= not (r or qn); qn <= not (s or q); END comb;

Architecture mit Process ARCHITECTURE comb OF rsff IS BEGIN END comb; Concurrent Statements P1:Process(xxx) Begin … End process p1; P2: Process(xxx) Begin … End process p2;

detect_overflow: process (zaehler) begin Beispiel Process detect_overflow: process (zaehler) begin end process detect_overflow; overflow <= ‘0‘; if (zaehler > “11111110“) then overflow <= ‘1‘; end if;

Process Ein Process ist ein „Concurrent“ Statement welches eine Ansammlung von „Sequentiellen“ Statements enthält. Prozesse können gleichzeitig mit anderen „Concurrent“ Statements und Prozessen kommunizieren.

Sequentielle statements Process Prozess_name: process (sensitivity liste) deklarationen (variablen etc.) begin sequentielle statements end process prozess_name; signal overflow : std_logic; signal zaehler : std_logic_vector(7 DOWNTO 0); Benennung Eingangssignal Sensitivity Liste detect_overflow: process (zaehler) begin overflow <= ‘0‘; if (zaehler > “11111110“) then overflow <= ‘1‘; end if; end process detect_overflow; Default Statement Sequentielle statements Ausgangszuweisung Ausgangssignal

Ablauf von Process-en P1: process (reset,A,M) Begin if reset = ‘ 1‘ then next_q <= ‘ 0‘; else next_q <= A and M; end if; end process P1; Sequentielle statements: Innerhalb eines Prozesses laufen Statements sequentiell ab. Process 1 Die Prozesse selbst sind ein „concurrent statement“ und laufen innerhalb der Architektur gleichzeitig ab P2: process (clock,next_q) Begin if clock‘event and clock= ‘ 1‘ then q <= next_q; end if; end process P2; Process 2

Deltazeit (Rechnerzeit) Ablauf von Process-en Deltazeit (Rechnerzeit) Simulationszeit

Process In einem Process werden Anweisungen sequentiell (der Reihenfolge nach) abgearbeitet. Hat der Process eine Sensitivity Liste, wird er „zum Leben erweckt“, sobald sich ein Signal, dass sich auf der sensitivity Liste befindet, verändert. Nach Ausführung der letzten Anweisung werden alle im Prozess zugewiesenen Signale aktualisiert, danach „stirbt“ der Process. Hat ein Process keine Sensitivity Liste, ist er immer aktiv.

Sequentielle Statements (Statements im Process)

If-Then-Else Statement

Beispiel für Priorität: Alarmpanel im KKW In einem Kernkraftwerk soll ein Alarmpanel auftretende Störungen in Alarmstufen einteilen (Alarmstufe 3 höchste Dringlichkeit, Alarmstufe 1 niedrigste Dringlichkeit). Es gibt drei Hauptgefahrenquellen, die nach Ihrer Dringlichkeit eingeteilt sind (siehe Tabelle). Am Ausgang der Schaltung befinden sich 4 Lampen, die die jeweiligen Alarmstufen anzeigen. Bei einem Druckabfall im Primärkühlkreislauf würde Alarmstufe 3 (rot) aufleuchten. Bei einem Druckabfall im Sekundärkühlkreislauf würde Alarmstufe 2 (orange) aufleuchten. Bei verringerter Generatordrehzahl gibt es nur Alarmstufe 1 (gelb). Meldet keiner der Eingaenge einen Alarm, so leuchtet die gruene Lampe auf. Ist mehr als ein Alarmsignal aktiv, so richtet sich die Alarmstufe immer nach dem Alarm mit der grössten Dringlichkeit. Wenn z.B. Sekundärkreislauf und Generatordrehzahl Alarm melden, dann ist die Alarmstufe orange.

Entity des Alarmpanels rot Druck Primärkreislauf orange Druck Sekundärkreislauf gelb Generatordrehzahl gering grün Störung Signal Alarmstufe Druck im Primärkreislauf primär = 1 Druckabfall Alarm, primär = 0 Druck o.k. rot Druck im Sekundärkreislauf sekundär = 1 Druckabfall Alarm, sekundär = 0 Druck o.k. orange Generator Drehzahl generator = 1 Drezahl Alarm, generator = 0 Drehzahl o.k. gelb Keine Störung grün

Wahrheitstabelle Eingänge Ausgänge primär sekundär drehzahl grün gelb orange rot

Unvollständige Wahrheitstabelle Eingänge Ausgänge primär sekundär drehzahl grün gelb orange rot 1 x

Entity des Alarmpanels rot primar orange sekundar gelb drehzahl grün ENTITY kkw IS PORT( primar,sekundar,drehzahl : IN std_logic; rot,orange,gelb,gruen : OUT std_logic ); END kkw;

Prioritätsencoder mit „IF-THEN-Else“ Statement LIBRARY ieee; USE ieee.std_logic_1164.all; ARCHITECTURE rtl OF kkw IS BEGIN p1: PROCESS (primar, sekundar, drehzahl) IF (primar = '1') THEN rot <= '1'; orange <= '0'; gelb<='0'; gruen <= '0'; ELSIF(sekundar = '1') THEN rot <= '0'; orange <= '1'; gelb<='0'; gruen <= '0'; ELSIF(drehzahl = '1') THEN rot <= '0'; orange <= '0'; gelb<= '1'; gruen <= '0'; ELSE rot <= '0'; orange <= '0'; gelb<= '0'; gruen <= '1'; END IF; END process p1; END rtl; Ausgangs Zuweisungen Eingangs Bedingung

IF-THEN-ELSE statement if condition_1 then sequential statements elsif condition_2 then sequential statements else sequential statements end if ;

IF-THEN-ELSE statement Die erste zutreffende Zeile wird dem Ausgang zugewiesen, alle nachfolgenden fallen heraus. (priorisierend) Bedingungen dürfen sich überlappen if (Y = 5) then ...if (Y <=5) then. „elsif“ und „else“ sind nicht notwendig If –THEN-ELSE statements können nur in einem Process verwendet werden IF-THEN-ELSE statements dürfen verschachtelt werden IF-THEN-ELSE statements sind die „allgemeine“ Form zur Beschreibung von kombinatorischer Logik in VHDL

IF Then ELSE

CASE Statement

Beispiel: Codewandler Binary-Gray Komb. Logik 1 Gray(0) Binary(1) Binary(2) Komb. Logik 2 Gray(1) Komb. Logik 3 Gray(2)

Wahrheitstabelle Codewandler Binary-Gray BCD Gray 1 1 1 2 1 3 1 1 4 1 5 1 1 6 1 1 7 1 1 1

Entity des BCD-Gray Codewandlers ENTITY bingray IS PORT ( binary : IN std_logic_vector(2 downto 0); gray : OUT std_logic_vector(2 downto 0) ); END bingray;

Code Wandler mit CASE statement Ausgangs Zuweisung bcd2gray: process (bcd) Begin case bcd is when “000“ => gray <= “000“; when “001“ => gray <= “001“; when “010“ => gray <= “011“; when “011“ => gray <= “010“; when “100“ => gray <= “110“; when “101“ => gray <= “111“; when “110“ => gray <= “101“; when OTHERS => gray <= “100“; end case; end process bcd2gray; Wähler Eingangssignal

Case statement case eingang is when wähler => sequential statements when wähler => sequential statements end case;

Case statement Nicht priorisierend, jede Zeile wird gleich behandelt Jede mögliche Eingangskombination muss vorkommen falls am Ende nicht mit „others“ abgeschlossen wird. Keine Eingangskombination darf mehr als 1 x vorkommen Case Statements können nur in einem Process verwendet werden Werden hauptsächlich für Dekodier Funktionen oder zum beschreiben von Automaten verwendet.

Generic View Case Statement

Technology Map von Case

Übersicht über mögliche Fallunterscheidungen in VHDL Sequentiell (innerhalb Prozess) priorisierend If-Then-Else nicht priorisierend Case

ASCII Decoder mit case statement ARCHITECTURE rtl OF ascii_decoder IS SIGNAL pointer: INTEGER RANGE 0 TO 79; SIGNAL zeichen: STD_LOGIC_VECTOR (7 DOWNTO 0); BEGIN comb_decoder : PROCESS(pointer) case pointer IS when 0 => zeichen <= x“48"; when 1 => zeichen <= x“65"; when 2 => zeichen <= x“6c"; when 3 => zeichen <= x“6c"; when 4 => zeichen <= x“6f"; when 5 => zeichen <= x“21"; when OTHERS => zeichen <= x"20"; END case; …. End process;

Mehrmalige Zuweisung von Signalen Concurrent (ausserhalb Prozess) Sequential (innerhalb Prozess) overflow <= ‘0‘ ; . . overflow <= ‘1‘ ; Nicht möglich – Fehlermeldung overflow <= ‘1‘ ; Möglich – Software arbeitet Zeile für Zeile ab das Signal wird erst am Ende des Prozesses aktualisiert

Wait Statements wait until condition; Warten bis ein bestimmter Zustand eintritt wait on signal_list; Warten bis ein bestimmte(s) Signal(e) wechselt wait for time; Eine bestimmte Zeit warten wait; Unbestimmt Warten Beispiele: Wait until CLK= ‘1‘; Wait for 10 nS; Wait on A,B;

WAIT Statements WAIT Statements sind sequentielle Statements und dürfen nur im Prozess vorkommen Beim Ausführen des WAIT Statements wird der Process unterbrochen und die zugewiesenen Signale werden aktualisiert Nach Ausführen der WAIT Bedingung wird der Prozess an der Stelle fortgefahren, wo er unterbrochen wurde WAIT ist nicht synthetisierbar

Testbench testbench.vhd dut.vhd reset steig flin clk Logische Funktion Erwartete Ergebnisse reset Assert Stimulus Generator steig flin clk dut.vhd Logische Funktion Simulation

Assert Statement assert condition report string severity severity_level ; Mögliche level sind: note warning error failure (bricht Simulation ab) Falls „Condition“ nicht erfüllt, wird ein Report generiert Beispiele: assert (A = B) report “A ungleich B“ severity error ; assert false report “Test programm beendet“ severity note ; „ASSERT“ erlaubt bei einer bestimmten Bedingung im Simulations- programm einen Bericht auszugeben oder das Simulationsprogramm ganz zu stoppen. Assert wird bei der Synthese ignoriert.

Testprogramm zum Austesten des bcd-gray Kodewandlers STIMULUS: process begin bcd <= "000" ; wait for 10 nS; assert (gray = "000") report "expected „000“ " severity failure; wait for 100 nS; bcd <= "111"; assert (gray = "100") report "expected „100“ " severity failure; assert false report " --- ALL TESTS PASS ---" severity note; wait; end process;

Compile Script (compile.do) für funktionale Simulation # create work library vlib work # compile project files vcom -2002 -explicit -work work ../../source/flanken.vhd vcom -2002 -explicit -work work ../../source/tb_flanken.vhd # run the simulation vsim -t 1ns -lib work work.tb_flanken do ../scripts/wave.do run 1800.0 ns Bildet Workverzeichniss „work“ Compiliert VHDL und legt es im „work“ ab Startet Simulator Öffnet Waveform Betrachter Lässt Simulator für 1800 ns laufen