VHDL IO Debuggen

Signalüberprüfung
Zum Debuggen können den Top-Level-Ports spezifische Wert zugewiesen werden:

GPIO_0 <= '0';
GPIO_0 <= '1';

Am KO kann dann der Wert überprüft werden oder man kann die Pins ausläuten, um zu sehen, ob sie funktionieren. Problem: Pins können auch sonst auf ‚0‘ oder ‚1‘ per default sein.

Besser: Clock-Zuweisung. (Problem auch hier: ClK könnte per default herauskommen.) Am sichersten: CLK auf eigene Frequenz einstellen, so ist man sicher, dass es der gewünschte Pin ist.

GPIO_0 <= CLK_50;


Instanzen anpassen

Im Top-Level könnendie IO der Instanzen mit open auf inaktiv gesetzt werden.

inst_counter: counter
    PORT MAP( clk          => CLOCK_50,
              verification => open,   -- GPIO_0   
              zero_out      => open   -- GPIO_1                
        );

 

 

 

 

 

Gleichzeitige Signalzuweisung

Artikel   Warum es Signale braucht

wert <=  next_wert

Die Signale existieren im Doppelback. Sie haben immer zwei Facetten.
Den alten Wert (wert) und den neuen (next).

Regel
– linke Seite wird am Ende des Prozesses zugewiesen
– rechte Seite wird sofort zugewiesen

Signale links erhalten den Wert am Ende des Prozesses.
Signale rechts sofort.

Signalzuweisung <= nennt man non-blocking

FF zum Datenspeichern und Takten

Eingangslogik  – – –    F F    – – –    Ausgangslogik  [   – – –    F F  ]
(asynchron)       (synchron)       (asynchron)

Warum braucht es FF?
Um den Zustand einer Logik zu speichern.

Zudem sind FF getaktet, sodass die Datenverarbeitung synchron wird.

Die Prozesse und Logik ausserhalb der FF müssen nicht getaktet sein, können aber.

Processe in VHDL

  • Getaktete Prozesse sind unter sich sequentiell (ein Clock nach dem andern)
    -> sequential
  • Prozesse können asynchron sein
    -> concurrent (gleichzeitig)
  • Innerhalb eines Prozesses, werden die Signale sequentiell abgearbeitet
  • Wegen der Zweiseitigkeit von Signalen, können parallel mehrere Zustände zugewiesen werden

VHDL Types

Int
– Zuweisung erfolgt ohne Hochkomma

variable   cnt: integer range 0 to 255 := 0;

Standard_Logic
– Zuweisung erfolgt über Hochkommas

signal s_reset:     std_logic := '0';

Top Level

– Das Top-Level ist die äusserste Hülle eines VHDL-Blocks.
– Im Top-Level müssen die Blockeingänge mit den FPGA-Pins verbunden werden.
.  Dies geschieht über die Pinplanung.

Der Name der Top-Level-Entitiy muss der Name der Datei sein!

CLK und Reset muss nicht mit einem Signal intern angebunden werden, sondern alle alle Komponenten können mit dem Top-Level Port verbunden werden.

Pinzuweisung VHDL

Pinnamen laden
Zum Board besteht ein board.tcl-Datei, mit den Pinnamen. Diese wird als erstes geladen (Tools/script tcl).
Um die Namen anzusehen geht man auf Assignments/Pin Planer

Die Pins werden in der Top Level-Entity zugewiesen.

ENTITY top_counter_verification IS
      PORT(    CLK_50: 			IN std_logic;
	       KEY_0: 			IN std_logic;
	       EX_IO[0]:		OUT std_logic  
		);
END top_counter_verification;

Die Zuweisung erfolgt, in dem der Portname, genau dem Namen in der Pinzuweisungsliste (*.tcl) entspricht. Vgl. EX_IO[0]

Pinplaner

Die Namen in der Pinliste, kann man über Assignment/Assignment Editor setzen.

Node Name:   selber setzen;    Name, der in Projekt verwendet wird
Direction:        Pinrichtung
Location:         Ort auf FPGA (wichtigste Angabe)
diverse:            Spezifikationen zum IO  (Einstellbar über Assignment Editor)

pinplaner_zugewiesen

Soft Core OS

Nachdem ein Soft-Core-Prozessor in ein FPGA geladen wurde, folgt das Aufsetzen des OS. Bei Altera ist dies Nios2, bei Xilinx MicroBlaze.

Remote Zugriff auf OS
Per SSH (bzw. Nios Shell) wird auf den Softcore zugegriffen.

Ordner und Programme
Baut man einen Softprozessor ein, bildet dieser im Synthese Ordner ein Unterordner Software

synthese/software/

In diesen Ordner kann man notwendige Scripts und Settings ablegen.

Board Support Packet erzeugen
Das Script create bildet die Support Packete (und Ordner dazu)

./create

Kompilieren

./compile

Programm auf FPGA laufen lassen

./run

Logikblocks einbauen und ändern

QSys (früher SOPC):
– Ist ein System Integration Tool
– QSys ermöglicht den Import von Logik-Blöcken.
– Die Logikblöcke werden nachher als Files in das Projekt gealden

Qsys: Designen von eigenen Blöcken
quartus: Tools/qsys         eigenes Fenster geht auf
– Als erstes muss neue qsys-Datei erstellt werden (*.qsys)
– Dies Datei liegt in synthese/outputfiles/<name>
– Über Library holt man mit add einen Block
– Block benennen (wird zu Titel im Blockschema)
– Unter Export sagen, Blockvariable setzen
– Speicherplatz dem Block zuweisen
– add: man fügt neue Elemente hinzu
– neues Element verdrahten
generate: beendet das Design
– die Datei (*.qip) liegt in outputfiles/<name>/synthese
– das Blockbild in outputfiles/<name> (*.bsf)

Quartus: Blöcke einbauen
– Neues, leeres *.bdf öffnen
– Über Block-Import den Block holen (*.bsf)
– Pin zuweisen
– Verdrahtungen benennen gemäss Export
– Kompilieren