Praktikumsanleitung - Startseite TU Ilmenau · ... 12 Bit Random Zahl die vom IHS2_Prak_Random ......

20
Technische Universität Ilmenau Fakultät für Informatik und Automatisierung Institut für Technische Informatik und Ingenieurinformatik Fachgebiet: Integrierte Kommunikationssysteme Praktikumsanleitung Integrierte Hard- und Softwaresysteme II Versuch: Reaktionstester Dipl.-Ing. Steffen Ostendorff, B.Sc. Johannes Both

Transcript of Praktikumsanleitung - Startseite TU Ilmenau · ... 12 Bit Random Zahl die vom IHS2_Prak_Random ......

Technische Universität Ilmenau Fakultät für Informatik und Automatisierung Institut für Technische Informatik und Ingenieurinformatik Fachgebiet: Integrierte Kommunikationssysteme

Praktikumsanleitung

Integrierte Hard- und Softwaresysteme II Versuch: Reaktionstester Dipl.-Ing. Steffen Ostendorff, B.Sc. Johannes Both

2

Inhaltsverzeichniss

1 Aufgabenstellung ............................................................................................................... 3

1.1 Einführung ................................................................................................................... 3

1.2 Anforderungen ............................................................................................................ 3

1.3 Übersicht ...................................................................................................................... 5

1.4 Modul: IHS2_PRAK_Control......................................................................................... 6

1.5 Modul: IHS2_Prak_Random ........................................................................................ 7

1.6 Modul: IHS2_Prak_10msTimer .................................................................................... 7

1.7 Hardware ..................................................................................................................... 8

2 Anleitung: Modultest mit ModelSim .................................................................................. 9

2.1 Installation ................................................................................................................... 9

2.2 Starten einer Simulation mithilfe von do-Files ............................................................ 9

2.3 Aufbau und Verwendung von TestBenches .............................................................. 10

2.4 Aufbau von Do-Files .................................................................................................. 11

3 Anleitung: Programmierung der Zielhardware ................................................................ 12

4 Anhang: Zusammenfassung VHDL Befehle ...................................................................... 14

4.1 Concurrent Statements ............................................................................................. 14

4.2 Sequential Statements............................................................................................... 15

4.3 Specifications ............................................................................................................. 17

4.4 Library & Use Clause .................................................................................................. 17

4.5 Declarations ............................................................................................................... 17

4.6 Library Units ............................................................................................................... 19

3

1 Aufgabenstellung

1.1 Einführung Auf Basis des im Seminar vorgestellten VGA Moduls soll ein Reaktionstester entwickelt werden. Eine ausführliche Beschreibung ist den Seminarunterlagen (besonders Seminar 1-2) vom WS09/10 zu entnehmen. Dafür werden 4 Grafikmodule als 7-Segmentanzeige verwendet. Hier soll die benötigte Reaktionszeit angezeigt werden. Ein weiteres Grafikmodul wird als farbiges Signal verwendet und dient zur Zustandssignalisierung während des Reaktionstests. Es kann über 3 Steuerleitungen die 3 Grundfarben des RGB-Raums sowie deren Mischfarben darstellen. Weitere Informationen über die verwendeten Grafikmodule sowie das VGA Modul finden Sie in den Seminarunterlagen zum Fach IHS 2. Der Reaktionstester soll nach seiner Aktivierung eine zufällige Zeit in einem Wartemodus bleiben. Danach wird auf der 7-Segmentanzeige ein Timer angezeigt, welcher durch einen Tastendruck angehalten wird. Beim vorzeitigen Drücken einer Taste, wird der Versuch mit einem roten Signal abgebrochen. Die einzelnen Phasen (Idlephase, Wartephase, Reaktionsphase und Anzeigephase) sollen über das farbige Signal gekennzeichnet werden. Für das Praktikum ist eine Bearbeitungszeit von ca. 10 Stunden vorgesehen. Davon entfallen 6,5 Stunden auf die häusliche Vorbereitung und 3,5 Stunden auf die Umsetzung der praktischen Aufgaben im Praktikumsraum. Die Bearbeitung des Praktikums darf nur mit vorbereiteten und vollständigen Unterlagen durchgeführt werden! Das Praktikum ist in Teams von 2 Personen durchzuführen. Alle Module sind in VHDL zu implementieren. Nutzen Sie dazu die Xilinx ISE 11.4. Alle Vorbereitungsaufgaben sind schriftlich zu erfüllen und MÜSSEN zum Praktikumstermin vorgelegt werden. Die restlichen Aufgabenteile (Programmierung in VHDL) müssen zu Beginn des Praktikums fehlerfrei Synthetisierbar sein. Kleinere Verhaltensfehler können noch während der Praktikumszeit ausgebessert werden. Zur Verhaltensvalidation (Teil der Vorbereitung) können die bereits angelegten TestBenches verwendet werden (siehe Kap. 2 Anleitung: Modultest mit ModelSim). Weiterhin besteht die Möglichkeit sich eine Hardware-Plattform auszuleihen. Kontaktieren Sie dazu Herr Ostendorff per Mail.

1.2 Anforderungen Zu entwerfen ist der Reaktionstester mit folgenden Anforderungen:

der Reaktionstester ist zu Beginn in einem neutralen Zustand (alle 7-Segmentanzeigen auf 0, beliebig farbiges Signal)

durch Drücken einer Taste ändert sich das Signal auf gelb (-> Abbildung 1)

das gelbe Signal bleibt für eine zufällige Zeit von 1 bis 10 Sekunden angezeigt

4

wird während dieser Zeit eine weitere Taste gedrückt, so wechselt das Signal auf rot (durch erneutes Drücken einer Taste wechselt das System zurück in den neutralen Zustand)

nach Ablauf der zufälligen Zeit erlischt das gelbe Signal und es wird ein Timer angezeigt

für den Timer stehen die vier 7-Segmentanzeigen zur Verfügung - dabei soll die 4. Stelle die 1/100 s, die 3. Stelle die 1/10s, die 2. Stelle die 1s und die 1. Stelle die 10s anzeigen (-> Abbildung 1 & Abbildung 2)

wird jetzt eine Taste gedrückt, wird der Timer angehalten, die benötigte Zeit wird angezeigt und ein grünes Signal ausgegeben (-> Abbildung 2)

durch erneutes Drücken einer Taste wechselt das System zurück in den neutralen Zustand

Abbildung 1: Wartephase - Signal gelb - Timer auf 0

Abbildung 2: Anzeigephase - Signal grün - Timer steht

1.3 Übersicht

Für den Reaktionstester sind folgende Grundmodule zu entwerfen und in VHDL zu implementieren:

Abbildung 3: Übersicht über die Grundmodule des Reaktionstesters und deren Verschaltung

Die Entitys der einzelnen Module sind bereits vorhanden. Die Signale zur Kommunikation untereinander sind ebenfalls schon angelegt. Alle benötigten VHDL Gerüste sind in dem Projekt "VGA_Projekt_IHS2_PRAK" zu finden.

1.4 Modul: IHS2_PRAK_Control

Das Modul realisiert die interne Verwaltung des Reaktionstesters. Entwerfen Sie eine geeignete Struktur zur Realisierung der Anforderungen.

1.4.1 Ports

CLK: 25.175 MHz Main Clock des Systems (Achtung! - nicht der VGA Clock) RST: globaler Reset des Systems pvButton_IN: beschreibt 3 Tasten auf dem Experimentierboard (Abbildung 5) die Tasten sollen für den internen Ablauf des Systems verwendet werden pvRandomNumber_IN: 12 Bit Random Zahl die vom IHS2_Prak_Random generiert wird pvTimeInDecimals_IN: Input Vektor für den Timer-Output die Zeit muss in BCD-Code dargestellt sein jeweils 4 Bits entsprechen den darzustellenden Digits pfGetRandom_OUT: wenn 1, wird auf pvRandomNumber_IN ein Zufallswert geliefert pfSetXXXColour_OUT: setzt das Signal auf die entsprechende Farbe (es können mehere Farben gleichzeitig gesetzt werden) die Farben sind im RGB Farbformat codiert pfStartTimer_OUT: startet den Timer pfSopTimer_OUT: stoppt den Timer - letzter Wert wird beibehalten pfResetTimer_OUT: setzt den Timer auf 0 - der aktuelle Zustand wird beibehalten pv7SegX_Out: Anzeigewert für die vier 7-Segmentanzeigen der Ausgabewert muss ein BCD Wert enthalten - andere Werte werden nicht dargestellt Vorbereitung:

Informieren sie sich über die Möglichkeiten zur Beschreibung von Automaten in VHDL. Nutzen sie dazu die Materialen aus dem Seminar oder aus dem Language Templates der ISE unter "VHDL->Synthesis Constructs->Coding Examples". Entwerfen Sie einen geeigneten Automat zur Umsetzung von IHS2_PRAK_Control. Die Zustände sowie Zustandsübergänge sind in einer angemessenen Form schriftlich zu entwerfen und grafisch zu dokumentieren.

7

1.5 Modul: IHS2_Prak_Random

Da man in Hardware keine nichtdeterministischen Verfahren implementieren kann, fallen die gängigen Methoden zur Random-Number Generierung aus. Eine mögliche Realisierung eines streng deterministischen Pseudozufallszahlengenerator ist ein linear rückgekoppeltes Schieberegister (engl. Linear Feedback Shift Register, kurz LFSR). Die Güte der Zufallszahlen kann durch eine Kombination von meheren LFSR und durch die Wahl eines günstigen Generatorpolynoms beeinflusst werden. Dieses Modul soll ein solches LFSR mit 12 Bit Ausgabebreite realisieren. Sobald das pfGetRandom_IN Flag auf 1 gesetzt ist, soll an pvRandomNumber_OUT eine neue Zufallszahl anliegen. Wird das Flag wieder auf 0 gesetzt, soll die momentane Random Number am Ausgangsport gehalten werden. Vorbereitung: Informieren Sie sich über die Generierung von Zufallszahlen mittels LFSR. Skizzieren Sie den strukturellen Aufbau eines LFSR. Geben Sie ein geeignetes Generatorpolynom für ein 12 Bit LFSR an.

1.6 Modul: IHS2_Prak_10msTimer

Der Timer soll eine Stoppuhr realisieren. Sobald das pfStartTimer_IN Signal gesetzt ist, wird der Timer aktiviert. Mit pfStopTimer_IN wird der Timer angehalten, die Ausgabe bleibt bestehen. pfResetTimer_IN setzt den Zähler auf 0 zurück, der Timer verbleibt im aktuellen Zustand (zählend, angehalten). Die Auflösung lässt sich über das gCOUNTER_TICK Generic frei wählen. Ausgegeben werden vier BCD-kodierte Digits, wobei die Bits 0 .. 3 die kleinste Stelle und die Bits 12 ... 15 die größte Stelle sind. Wird der interne Wert gCOUNTER_TICK erreicht, so wird das niederwertigste Digit inkrementiert. Es ist darauf zu achten, dass nur gültige BCD Werte ausgegeben werden.

Abbildung 5: Taster zur Steuerung des Reaktionstesters Abbildung 4: Language Templates

8

1.7 Hardware

Spartan-3A DSP 1800 Board 25.175 MHz Main Clock 62,9375 MHz VGA Clock JTAG programming and configuration port

9

2 Anleitung: Modultest mit ModelSim

2.1 Installation

ModelSim ist eine Simulationsumgebung für VHDL und Verilog die für Studenten kostenlos unter

http://model.com/content/modelsim-pe-student-edition-hdl-simulation heruntergeladen werden kann. Zum Download ist eine Registrierung erforderlich. Eine Schritt-für-Schritt-Anleitung ist auf der Seite vorhanden.

2.2 Starten einer Simulation mithilfe von do-Files Starten Sie nun ModelSim.

Abbildung 6: ModelSim

Wechseln Sie über den File->Change Directory Befehl in das Hauptverzeichnis ihres Projekts.

Abbildung 7: ModelSim - change directory

Zum Starten der Simulation können automatische do-Skripte verwendet werden. Für die 3 Hauptmodule des Praktikums sind Standard-do-Files im ./Sim/ModelSim Ordner vorhanden. Diese müssen bei Bedarf noch um user-spezifische Signale erweitert werden (s.u.).

10

Zum Starten eines do-Files geben sie do ./sim/ModelSim/<Name des do-Files>.do in die Konsole ein.

Abbildung 8: ModelSim - console

2.3 Aufbau und Verwendung von TestBenches

Für eine Simulation eines VHDL-Moduls wird ein VHDL TestBench(TB) benötigt. Ein TB ist ebenfalls eine VHDL-Datei welche die zu testenden Datei (UUT - unit under test) instanziiert. Durch das TB werden die Eingangs-Stimuli festgelegt und die Ausgangssignale der UUT entgegen genommen.

Test

Bench UUT

Eingangs-Stimuli

Ausgangs-Signale

Abbildung 9: TestBench & UUT

11

Um eine bestimmte Eingangsbelegung am UUT zu testen muss diese zu einem definierten Zeitpunkt von der TB erzeugt werden. Die TBs für die 3 Hauptmodule des Praktikums sind im ./sim Ordner vorhanden. In jeder TB gibt es einen "stimulus process" der die Eingangsstimuli erzeugt. Dabei ist zu beachten, dass die Signale die dort gesetzt werden zeitlich aufeinander abgestimmt sind. z.B.: pvButton_IN <= "100"; wait for CLK_period*2; pvButton_IN <= "000"; wait for 200 ns; pvButton_IN <= "100"; wait for CLK_period*1; pvButton_IN <= "000"; wait for 200 ns; Hier wird der pvButton_IN Port für 2 CLK-Perioden auf "100" gesetzt. Danach sofort wieder auf "000". Danach passiert 200 ns (5 Takte - bei 40ns CLK-Periode ) nichts am Eingang der UUT. Danach wird der pvButton_IN Port erneut auf "100" gesetzt, diesmal jedoch nur ein 1 CLK-Periode gehalten. Daraufhin gibt es eine weitere 200 ns Pause. Mithilfe der TB können nur Signale am Eingang der UUT geändert werden. Instanziierte Komponenten im Inneren der UUT oder interne Signale sind nicht direkt erreichbar.

2.4 Aufbau von do-Files In do-Files sind alle nötigen Simulationseinstellungen beschrieben. Die wichtigsten Konstrukte sind hier kurz dargestellt.

vcom ./src/IHS2_PRAK_Random.vhd

Der "vcom" Befehl kompiliert die benötigten VHDL Files, so dass sie von ModelSim verarbeitet werden können. Alle in der Simulation verwendeten VHDL-Files müssen kompiliert werden. add wave -noupdate -format Literal -radix hexadecimal -label "CLK" /IHS2_PRAK_Random_TB/clk

Mit "add wave" können zu beobachtende Signale hinzugefügt werden. Die "format" Option gibt an ob das Signal als logischer Pegel (Logic) oder als Literal (Literal) angezeigt wird. Im Literal Modus kann über die "radix" Option die Darstellungsform gewählt werden. Typische Formate sind: Binary, Octal, Decimal, Hexadecimal, ASCII. Die "Label" Option gibt eine Alias für das Signal an um lange Namen zu vermeiden. Am Ende des Befehls wird das zu beobachtende Signal geschrieben. run 200 us

Gibt die Länge der Simulation an. WaveRestoreZoom {0 us} {2 us}

Zoomt nach Ende der Simulation in den angegeben Bereich.

12

3 Anleitung: Programmierung der Zielhardware

Erstellen Sie als erstes ein bit-File zur Programmierung des FPGAs. Nutzen Sie dazu die

"Generate Programming File" Option aus der ISE.

Abbildung 10: Generate Programming File

Starten Sie nun iMPACT.

Abbildung 11: iMPACT

Doppelklicken Sie auf "Boundary Scan" und initialisieren danach Sie die JTAG Kette über den "Initialize Chain" Button.

13

Abbildung 12: iMPACT - Boundary Scan & Initialize Chain

Wählen Sie im erschienenen Dialog, das von der ISE generierte Bit-File aus. Dies befindet sich standardmäßig in dem Projektordner des aktiven Projekts. Sie können auch nachträglich ein anderes bit-File über die "Assign New Configuration File" Option des Xilinx-Symbols zuweisen. Diese Option ist im Kontextmenü des Symbols zu finden und wird über ein Rechtsklick angezeigt.

Abbildung 13: iMPACT- Assign New Configuration File

Nun werden sie gefragt, ob Sie ein SPI File anhängen möchten. Lehnen Sie das über die No Option ab und bestätigen Sie die darauf folgenden "Programming Options" mit OK. Nun können sie den FPGA Programmieren indem Sie ein Rechtsklick auf das Xilinx-Symbol machen, und dort die "Program" Option auswählen.

Abbildung 14: iMPACT - Program

14

4 Anhang: Zusammenfassung VHDL Befehle1

4.1 Concurrent Statements

4.1.1 block_statement

label: block [(guard_expression)]

[generic]

[ports]

[declarations]

begin

concurrent_statements

end block [label];

4.1.2 component_instantiation_statement

label : name [ generic map (map) ] [ port map (signals) ];

4.1.3 concurrent_assertion_statement

assert condition

[ report string_expression ]

[ severity {NOTE | WARNING | ERROR | FAILURE} ];

4.1.4 concurrent_procedure_call

[ label : ] procedure_name [ (parameters) ];

4.1.5 concurrent_signal_assignment_statement

[ label : ] [ {conditional_assignment | assignment |

selected_assignment} ];

1 University of Cambridge - Department of Engineering,

http://www2.eng.cam.ac.uk/~dmh/ptiiavlsi/VHDLcmd.htm (17.04.2011)

15

4.1.6 generate_statement

label : [{ for specification | if condition }] generate

concurrent_statements

end generate [label];

4.1.7 process_statement

[label : ] process [ (sensitivity_list) ]

[ variable_declaration ]

[ type_declaration ]

[subprogram_declaration ]

[ declarations ]

begin

sequential_statements -- Cannot contain a wait

statement if sensitivity_list is used

end process [ label ];

4.2 Sequential Statements

4.2.1 assertion_statement

assert condition -- When condition is false [strng_expression] is

printed

[ report string_expression ]

[severity { NOTE | WARNING | ERROR | FAILURE } ];

4.2.2 case_statement

case expression is -- Avoid the use of parenthesis, if possible

when choices_1 => sequential_statements

.

.

when choices_n => sequential_statements

end case;

4.2.3 exit_statement

exit [ label ] [ when condition ];

16

4.2.4 if_statement

if condition then

sequential_statements

{ elsif condition then sequential_statements }

[ else sequential_statements ]

end if;

4.2.5 loop_statement

[ label : ] [ while condition | for loop_specification ] loop

sequential_statements

end loop [ label ] ;

4.2.6 next_statement

next [ label ] [ when condition ];

4.2.7 null_statement

null;

4.2.8 procedure_call_statement

procedure_name [ (parameters) ] ;

4.2.9 return_statement

return expression; --For use in a Function

return; --For use in a Procedure

4.2.10 signal_assignment_statement

target <= expression [ after time_expression ]

.

.

{ , expression [ after time_expression ];

4.2.11 variable_assignment_statement

target := expression ;

17

4.2.12 wait_statement

wait --A Function may not contain a wait_statement

[ on signal_name {, signal_name} ]

[ until conditional_expression ]

[ for time_expression ] ;

4.3 Specifications

4.3.1 attribute_specification

attribute attribute_name

of entity_name is expression ;

4.3.2 configuration_specifications

for component_name

use [ generic_map_part ]

[port_map_part] ;

4.4 Library & Use Clause

4.4.1 library_clause

LIBRARY names ;

4.4.2 use_clause

USE selected_names ;

4.5 Declarations

4.5.1 alias_declaration

alias name1 : type [ (indexes) ] is name2 [ (indexes) ] ;

4.5.2 attribute_declaration

attribute name : type ;

4.5.3 component_declaration

component identifier :

[ generic (generic_list) ; ]

[ port (port_list) ; ]

end component ;

18

4.5.4 constant_declaration

constant name : type := expression ;

constant name : array_type [ (indexes) ] := expression ;

4.5.5 file_declaration

file name : type is [ mode ] logical_name ;

4.5.6 signal_declaration

signal names : type [ constraint ] [ := expression ] ;

4.5.7 port_declaration

port ( names : direction type [ := expression ] [ ; more_signals ] );

4.5.8 subprogram_declaration

{ procedure name [ (parameters) ] | function name [ (parameters) ]

return type; }

4.5.9 sub_program_body

is

declarations

begin

sequential_declarations

end [name] ;

4.5.10 subtype_declaration

subtype name is [ resolution_function] type [constraint] ;

4.5.11 type_declaration

type name is definition;

4.5.12 variable_declaration

variable names : type [ constraint ] [ := expression ] ;

19

4.6 Library Units

4.6.1 architecture_body

architecture name of

entity_name is

[types]

[constants]

[signals]

[subprograms]

[other declarations]

begin

concurrent_statements

end [name];

4.6.2 configuration_declaration

configuration name of

entity_name is

declarative_part

block_configuration

end [name];

4.6.3 entity_declaration

entity name is

[generics] [ports]

[declarations]

[begin statements] --typically, an entity does not have

statements. If it does, the statemnts cannot operate on signals

end name;

20

4.6.4 package_body

package body name is

[subprogram]

[type]

[constant

[signal]

[declarations]

end [name];

4.6.5 package_declaration

package name is

[subprogram]

[type]

[constant]

[signal]

[file]

[alias]

[USE clause]

[declarations]

end [name];