Hardware Praktikum 2010

Ähnliche Dokumente
Hardware Praktikum 2008

EHP Einführung Projekt A

HaPra Versuchsreihe 4 - Aufbau eines Volladdierers. Aufbau eines Volladdierers mit diskreten Bausteinen

6 FPGA-Designflow und Implementierungsparameter

Übungen zu Architektur Eingebetteter Systeme. Teil 1: Grundlagen. Blatt 5 1.1: VHDL 28./

Schritt 1 : Das Projekt erstellen und programmieren des Zählers

Praktikum Systementwurf mit VHDL HDL Design Lab

IHS2 Seminar. Einführung Zusatzfolien A. Integrated HW/SW Systems Group. IHS2 Seminar 06 November 2009 Self-Organization 19 November

PROJEKT WÜRFEL. von Vincent Bootz, Christoph Beigel, Matthias Ackermann. Projekt Würfel WS2002/03

PROJEKT WÜRFEL. von Vincent Bootz, Christoph Beigel, Matthias Ackermann. Projekt Würfel WS2002/03

Mikroprozessoren Grundlagen AVR-Controller Input / Output (I/O) Interrupt Mathematische Operationen

Realisierung einer 32'768-Punkt-FFT für 2 GBytes/s Datenrate auf einem FPGA

IHS2 Seminar CFG. Steffen Ostendorff Zusebau, R2078, Tel: -1788

Einführung in AVR-Assembler

2. Praktische Übung zur Vorlesung Grundlagen der Technischen Informatik. Entwurf eines digitalen Weckers

Outline Schieberegister Multiplexer Barrel-Shifter Zähler Addierer. Rechenschaltungen 1. Marc Reichenbach

Einführung in die technische Informatik

Zusammenfassung der Assemblerbefehle des 8051

Technische Informatik 2: Addressierung und Befehle

Übungsblatt 8 Lösungen:

Boundary Scan Days 2009

VHDL Verhaltensmodellierung

11: Echtzeitbetriebssystem ucos-ii

Prozessorarchitektur. Kapitel 1 - Wiederholung. M. Schölzel

Simulation von in VHDL beschriebenen Systemen

VHDL Verhaltensmodellierung

Entwurf und Verifikation digitaler Systeme mit VHDL

Sicheres C Programmieren in Embedded Systemen ARM I (ARM7TMDI [1] ) Wintersemester

Eine blinkende LED mit Xilinx ISE 13: das Hello World! der Hardware.

VHDL Einleitung. Dr.-Ing. Volkmar Sieh. Institut für Informatik 3: Rechnerarchitektur Friedrich-Alexander-Universität Erlangen-Nürnberg SS 2010

Name: ES2 Klausur Thema: ARM Name: Punkte: Note:

Programmieren in C Teil 3: Mikrocontrollerprogrammierung

Was sind die Vor- und Nachteile von asynchronen bzw. synchronen Resets?

Prototyping eines universellen ISM-Band Transmitters auf Basis des NI FlexRIO MDK

Emulation und Rapid Prototyping. Hw-Sw-Co-Design

Emulation und Rapid Prototyping

Aufgabe 1 Entwicklung einer Virtuellen Maschine

Name: DT2 Klausur Bitte achten Sie auf eine saubere Form. Nicht leserliches kann nicht bewertet werden.

Einführung in VHDL (2)

Dateien, die nicht in das Projekt eingebunden sind, werden ohne Syntax highlight dargestellt. MiCoWi und µvision Seite 1 Uwe Wittenfeld

Atmel AVR für Dummies

TIn 1: Feedback Laboratories. Lecture 4 Data transfer. Question: What is the IP? Institut für Embedded Systems. Institut für Embedded Systems

Der Toy Rechner Ein einfacher Mikrorechner

XILINX ISE WEBPACK und DIGILENT BASYS2

Versuch 4 Realisierung einer Ampelsteuerung auf einem FPGA-Board

Wozu dient ein Logikanalysator?

Gliederung Hardware fuer die Zeitmessung Zeitmanagement auf Uniprozessorsystemen. Timing Measurements. Timo Schneider. 4.

B1 Stapelspeicher (stack)

Digitaltechnik. 6 Speicherelemente. Revision 1.4

Platzierung und Verdrahtung massiv-paralleler FPGA-Designs am Beispiel eines Many-Core- Prozessors

ARM Cortex-M Prozessoren. Referat von Peter Voser Embedded Development GmbH

Lösungen zum Kurs "Mikrocontroller Hard- und Software

Assembler - Einleitung

Digital-Analog-Konverter (DAC)

8.0 Erweiterung mit dem 8 Bit D/A Maxim MAX5382

Teil 1: Digitale Logik

2. Computer (Hardware) K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

Multitasking / virtuelle Maschinen mittels Atmel AVR- Mikrocontrollern (Simple & Stupid)

Grundbegriffe der Informatik

Prof. Dr. Pollakowski

6. Aufgabenblatt mit Lösungsvorschlag

Einstellige binäre Addierschaltung (Addierer)

Betriebssysteme Vorstellung

Open Source - Mikrokontroller für Mixed Signal ASIC

Name: DT2 Klausur Bitte achten Sie auf eine saubere Form. Nicht leserliches kann nicht bewertet werden.

U Abend 3: Musterlösungen, Taster entprellen, Unterprozeduren, Interrupts, Timer

MSP 430. Einführung. Was kann er? Hauptthemen. Wie sieht er aus? 64 / 100 polig. Was kann er? MSP 430 1

VGM. VGM information. HAMBURG SÜD VGM WEB PORTAL - USER GUIDE June 2016

Einführung in VHDL. 1 ARCHITECTURE Tauschen OF B e i s p i e l IS. 2 SIGNAL a, b : STD_LOGIC; 4 BEGIN. 5 PROCESS( a, b ) 6 BEGIN.

Rechnerarchitektur Atmega Vortrag Atmega 32. Von Urs Müller und Marion Knoth. Urs Müller Seite 1 von 7

Anleitung für VHDL tools

Einführung in Mikrokontroller Benutzung mit dem Arduino Board. Ramon Hofer ICVR

AVR-Mikrocontroller in BASCOM programmieren, Teil 2

Instruktionssatz-Architektur

Praktikum Mikrocomputertechnik. Anleitung

Erste Schritte. Das Arduino-Board. Ihr Fundino-Board. Programmieren für Ingenieure Sommer Andreas Zeller, Universität des Saarlandes

USB -> Seriell Adapterkabel Benutzerhandbuch

Tuning des Weblogic /Oracle Fusion Middleware 11g. Jan-Peter Timmermann Principal Consultant PITSS

Stopp-Uhr. Erstellen Sie ein Programm (in Zweier- bzw. Dreier-Gruppen), welches folgende Bedingungen erfüllt:

Anleitung zur Schnellinstallation TBW-107UB 1.01

6 Speicherelemente. Digitaltechnik. Übersicht. Adressen. Read-Only Memory ROM. Random Access Memory RAM. Datenbusse. Caches.

EyeCheck Smart Cameras

Einführung in AVR Assembler

Microcontroller Kurs Microcontroller Kurs/Johannes Fuchs 1

Arbeiten mit XILINX - ISE - WebPACK

Daniel Betz Wintersemester 2011/12

1. Inhaltsverzeichnis

Praktikum DST FPGA 5.Termin Projekterstellung & Simulation

Bios-Update Anleitung mit Q-Flash. Wichtige Hinweise!

Spezifikationen und Voraussetzung

RS-232 SERIAL EXPRESS CARD 1-PORT. Expansion

Automatisierung mit Hilfe einer rekonfigurierbaren FPGA-Hardwareplattform

Mikroprozessor bzw. CPU (Central Processing. - Steuerwerk (Control Unit) - Rechenwerk bzw. ALU (Arithmetic Logic Unit)

Fachhochschule Kaiserslautern Fachbereich Angewandte Ingenieurwissenschaften WS2010/11. Zeitpunkt der Prüfung: Beginn: 10.

Mikrocomputertechnik. Thema: Der Aufbau des XC888-Mikrocontrollers -Teil 1 -

Rechnerorganisation 2 TOY. Karl C. Posch. co1.ro_2003. Karl.Posch@iaik.tugraz.at

Transkript:

HaPra 2010 - Vorbesprechung 28.06.2010 Hardware Praktikum 2010 Prof. Dr. H.-J. Wunderlich Dipl.-Inf. Michael Imhof Dipl.-Inf. Stefan Holst Dipl.-Inf. Marcus Wagner

Agenda Organisatorisches Gesamtsystem und Synthese Programmierung LEDs Taster-Interrupts Timer Beispiel: Boot-Programm HaPra 2010 - Vorbesprechung 28.06.2010 2

Agenda Organisatorisches Gesamtsystem und Synthese Programmierung LEDs Taster-Interrupts Timer Beispiel: Boot-Programm HaPra 2010 - Vorbesprechung 28.06.2010 3

Organisatorisches Die HaPra Abschlussklausur findet in der letzten Vorlesungswoche am 19.7.2010 von 8:30 bis 9:30 Uhr in Raum V38.04 statt HaPra 2010 - Vorbesprechung 28.06.2010 4

Preis Die Gruppe eines Termins die es als erstes schafft, das Apfelmännchen mit ihrem Prozessor+Cache über die VGA-Ausgabe des FPGA-Boards fehlerfrei auszugeben bekommt eine Flasche Sekt! HaPra 2010 - Vorbesprechung 28.06.2010 5

Restliche Versuchsreihen Versuchsreihe 9 Interrupts Synthese & Laden aufs FPGA Versuchsreihe 10 Programmierung Versuchsreihe 11 Instruktionscache Versuchsreihe 12?? FPGA System Prozessor Speicher Interrupt Takt Reset Chipsatz Board-Hardware HaPra 2010 - Vorbesprechung 28.06.2010 6

Agenda Organisatorisches Gesamtsystem und Synthese Programmierung LEDs Taster-Interrupts Timer Beispiel: Boot-Programm HaPra 2010 - Vorbesprechung 28.06.2010 7

Gesamtsystem FPGA System Prozessor Speicher Interrupt Takt Reset Chipsatz Board-Hardware HaPra 2010 - Vorbesprechung 28.06.2010 8

Starten der Synthese cd ~/proc cp /cad/tools/hapra/xilinx/build.sh. Bash-Skript das alle weiteren Schritte aufruft cp /cad/tools/hapra/xilinx/system.prj. Projektdatei cp /cad/tools/hapra/xilinx/system.scr. Synthese-Skript für XST cp /cad/tools/hapra/xilinx/system.ucf. sh build.sh HaPra 2010 - Vorbesprechung 28.06.2010 9

sh build.sh rm -rf *.log *.lst *.bld *.mrp *.ng? *.ncd *.pcf system_r* *.srp *.xml xst xst -ifn system.scr ngdbuild -a -p XCV300PQ240-4 -uc system.ucf system map -u system par -w system system_r bitgen -w system_r HaPra 2010 - Vorbesprechung 28.06.2010 10

xst -ifn system.scr Synthese von VHDL zu einer Netzliste system.scr: set -xsthdpini /cad/ /hapra.ini run -ifn system.prj -ifmt vhdl -top system -ofn system.ngc -ofmt NGC -p xcv300pq240-4 -opt_mode Speed -opt_level 1 vhdl work alu.vhd vhdl work ctrl.vhd vhdl work pc.vhd vhdl work ir.vhd vhdl work rf.vhd vhdl work proc.vhd vhdl work system.vhd Ausgabe: system.srp (Synthese-Report) system.ngc (Netzliste) HaPra 2010 - Vorbesprechung 28.06.2010 11

system.srp Beinhaltet die Konsolen-Ausgabe von xst TABLE OF CONTENTS 1) Synthesis Options Summary 2) HDL Compilation 3) Design Hierarchy Analysis 4) HDL Analysis 5) HDL Synthesis 5.1) HDL Synthesis Report 6) Advanced HDL Synthesis 6.1) Advanced HDL Synthesis Report 7) Low Level Synthesis 8) Partition Report 9) Final Report 9.1) Device utilization summary 9.2) TIMING REPORT HaPra 2010 - Vorbesprechung 28.06.2010 12

Final Report Top Level Output File Name : system.ngc Cell Usage : # LUT2 : 1104 # FDS : 147 # RAMB4_S16 : 2 Number of Slices: 2928 out of 3072 95% Number of Slice Flip Flops: 2123 out of 6144 34% Number of 4 input LUTs: 5602 out of 6144 91% Number of IOs: 76 Number of bonded IOBs: 76 out of 170 44% Number of BRAMs: 2 out of 16 12% Number of GCLKs: 1 out of 4 25% Minimum period: 30.773ns (Maximum Frequency: 32.496MHz) Minimum input arrival time before clock: 11.158ns Maximum output required time after clock: 12.327ns Maximum combinational path delay: 38.460ns HaPra 2010 - Vorbesprechung 28.06.2010 13

system.ngc Strukturelle Netzliste mit FPGA-Primitiven Kann in VHDL uebersetzt werden: netgen -ofmt vhdl -sim system.ngc system_nl.vhd proc_inst_pc_inst_state_0 : FDCE port map ( D => Result(0), CE => proc_inst_pc_en, CLR => chipsatz_inst_reset_118_1748, C => BOARD_CLK_BUFGP_0, Q => proc_inst_pc_inst_state(0) ); proc_inst_ctrl_inst_state_out7_2 : LUT4_D generic map( INIT => X"FFFE" ) port map ( I0 => proc_inst_ctrl_inst_state_ffd4_159, I1 => proc_inst_ctrl_inst_state_ffd6_161, I2 => proc_inst_ctrl_inst_state_ffd5_160, I3 => N4457, LO => N9576, O => proc_inst_ctrl_inst_state_out71 ); chipsatz_inst_inst_mram_mem11 : RAMB4_S16 generic map( INIT_01 => X"C42C402FCFD3 085C081C085A0", INIT_02 => X"1C63446AC471 D404FC430402E", INIT_00 => X"81A085808180 0816085408140", INIT_03 => X"000000000000 0446A8060C01E" ) port map ( CLK => BOARD_CLK_BUFGP_0, EN => BOARD_ETH_TRISTATE_OBUF_128, ADDR(5) => mem_adr(5), ADDR(4) => mem_adr(4), ADDR(3) => mem_adr(3), ADDR(2) => mem_adr(2), ADDR(1) => mem_adr(1), ADDR(0) => mem_adr(0), DO(15) => chipsatz_inst_rom_data(31), DO(14) => chipsatz_inst_rom_data(30), DO(13) => chipsatz_inst_rom_data(29), ); HaPra 2010 - Vorbesprechung 28.06.2010 14

ngdbuild -uc system.ucf system Kombiniert synthetisierte Netzliste (.ngc) mit Syntheseparametern (.ucf) Ausgaben: system.ngd (Design) system.bld (Log-Datei) netlist.lst system.ucf: INST res_power_up INIT=S; NET BOARD_RES LOC=P234; NET BOARD_BUTTON<0> LOC=P237; NET BOARD_BUTTON<1> LOC=P238; NET BOARD_BUTTON<2> LOC=P236; NET BOARD_CLK LOC=P89; NET BOARD_CLK PERIOD=40; HaPra 2010 - Vorbesprechung 28.06.2010 15

map -u system Ordnet den Zellen FPGA-Ressourcen zu Ausgabe: system.ngm (Informationen für Backannotation) system.pcf (Pinzuordnungen und -Eigenschaften) system.ncd (Gemapptes Design) system.mrp (Report) HaPra 2010 - Vorbesprechung 28.06.2010 16

par -w system system_r Platzieren und Verdrahten Platziertes und Verdrahtetes Design system_r.ncd Pinzuordnungen: system_r_pad.txt system_r_pad.csv system_r.pad Report: system_r.par (Place&Route Report) system_r.unroutes, system_r.xpi HaPra 2010 - Vorbesprechung 28.06.2010 17

system_r.par ------------------------------------------------------------------------------------------------------ Constraint Requested Actual Logic Absolute Number of Levels Slack errors ------------------------------------------------------------------------------------------------------ NET "BOARD_CLK_BUFGP/IBUFG" PERIOD = 40 n 40.000ns 39.376ns 10 0.624ns 0 s HIGH 50% ------------------------------------------------------------------------------------------------------ All constraints were met. Generating Pad Report. All signals are completely routed. Total REAL time to PAR completion: 3 mins 26 secs Total CPU time to PAR completion: 3 mins 25 secs Peak Memory Usage: 189 MB Placement: Completed - No errors found. Routing: Completed - No errors found. Timing: Completed - No errors found. Number of error messages: 0 Number of warning messages: 0 Number of info messages: 0 Writing design to file system_r.ncd HaPra 2010 - Vorbesprechung 28.06.2010 18

bitgen -w system_r Überprüft das Design und wandelt es in Programmierdaten um Programmierdaten: system_r.bit Reports: system_r.drc (Design Rule Check) system_usage.xml (Statistiken im XML-Format) system_r.bgn (Log-Datei) Log muss folgende Zeile enthalten: DRC detected 0 errors and 0 warnings. HaPra 2010 - Vorbesprechung 28.06.2010 19

Kleine Fehler, Grosse Wirkung Funktioniert in ModelSim, aber nicht auf dem FPGA Demo HaPra 2010 - Vorbesprechung 28.06.2010 20

Finden der häufigsten Fehler In system.vhd exakt die vorgegebenen Port-Namen verwenden Sonst passt die UCF-Datei nicht mehr Synthese-Skripte erst anpassen, dann ausführen Speicherprotokoll eingehalten? Syntheseprotokolle und Log-Dateien auswerten Wurden Latches erzeugt? Konnten alle Constraints eingehalten werden? War der Design-Rule-Check (DRC) erfolgreich? HaPra 2010 - Vorbesprechung 28.06.2010 21

Agenda Organisatorisches Gesamtsystem und Synthese Programmierung LEDs Taster-Interrupts Timer Beispiel: Boot-Programm HaPra 2010 - Vorbesprechung 28.06.2010 22

Instruktionssatz Speicherzugriff Kontrollfluss LD ST LDIH LDIL (LDI) JMP JZ RFE NOP CALL ALU ADD SUB AND OR NOT CP SAL SAR HaPra 2010 - Vorbesprechung 28.06.2010 23

Tipps zur Programmierung Unterprogramme Explizite Programmierung eines Stacks Einheitliche Register vereinbaren: $31 Stackpointer $30 Rücksprungadresse $29 konstant 1 Lokale und globale Register Interrupthandler Lokale Register sichern, vor Beenden wiederherstellen Mit RFE beenden HaPra 2010 - Vorbesprechung 28.06.2010 24

Peripherie Heute: Timer Board-LEDs Taster Nächste Woche: Serielle Schnittstelle VGA HaPra 2010 - Vorbesprechung 28.06.2010 25

Interrupts im HaPra Taster VGA Timer I/O-Ports Ereignisse Chipsatz (Interrupt-Teil) IRQ_EN IRQ_CTRL IRQ_HDL_ADR Taster Taster Taster VGA Timer Bit 4 3 2 1 0 IRQ IRQ_ADR IRQ_EN: Bitmaske mit zu beachtenden Interrupts HaPra-CPU Speicher- Schnittstelle IRQ_CTRL: Bitmaske mit ausgelösten Interrupts IRQ_HDL_ADR: Adresse der Unterbrechungsroutine HaPra 2010 - Vorbesprechung 28.06.2010 26

Timer Zeitmessung und Wecker IO-Port TIMER Kann beliebig geschreiben und gelesen werden Der Wert verringert sich um 1 in jeder Mikrosekunde Wenn TIMER abgelaufen ist TIMER_RELOAD TIMER hw_ctrl.asm:.def HW_CTRL_LEDS 0x104000.def HW_CTRL_CTRL0 0x104001.def IRQ_EN 0x104002.def IRQ_CTRL 0x104003.def TIMER_RELOAD 0x10400D.def TIMER 0x10400E.def IRQ_HDL_ADR 0x10400F Interrupt HaPra 2010 - Vorbesprechung 28.06.2010 27

Timer Anwendungen Zeitmessung Schreibe 0xffffffff in TIMER Lese nach einer Zeitspanne wieder aus Maximale Zeit: 72 Minuten Interrupt nach Zeitintervall Schreibe gewünschte Mikrosekunden in TIMER Erlaube Timer-Interrupt in IRQ_EN Periodische Iterrupts Setze auch TIMER_RELOAD entsprechend HaPra 2010 - Vorbesprechung 28.06.2010 28

Beispiel: Interrupts Demo HaPra 2010 - Vorbesprechung 28.06.2010 29

Board-LEDs 3 LED-Gruppen sind frei programmierbar Balkenanzeige (10 LEDs) Linke 7-Segment-Anzeige Rechte 7-Segment-Anzeige 2 IO-Ports zur Steuerung Bits 1-3 von HW_CTRL_CTRL0 aktiviert die LED-Gruppen Bits 0-23 von HW_CTRL_LEDS sprechen die 24 einzelnen LEDs an hw_ctrl.asm:.def HW_CTRL_LEDS 0x104000.def HW_CTRL_CTRL0 0x104001.def IRQ_EN 0x104002.def IRQ_CTRL 0x104003.def TIMER_RELOAD 0x10400D.def TIMER 0x10400E.def IRQ_HDL_ADR 0x10400F HaPra 2010 - Vorbesprechung 28.06.2010 30

BlinkenLEDs.org 0x80000.def time 500000.include "hw_ctrl.asm" ;period length in us ldi $0, timer ldi $1, time st $1,($0) ldi $0, timer_reload st $1,($0) ; Omitted: Setup IRQ handling, enable timer IRQ ldi $0, hw_ctrl_ctrl0 ldi $1, 0x80000008 st $1, ($0) ;enable bargraph led ldi $0, loop ldi $1, 1 loop: jmp $0 HaPra 2010 - Vorbesprechung 28.06.2010 31

BlinkenLEDs irqhdl: ldi $3, hw_ctrl_leds ld $4,($3) not $4,$4 ldi $5, 0x00ff0000 st $5,($3) and $4,$4,$5 ldi $5,0x80000000 or $4,$4,$5 st $4,($3) ldi $3, irq_ctrl ldi $4, 0x00000001 st $4,($3) rfe ;get and flip state ;first, turn all off ;mask unused bits ;turn on ;clear and leave HaPra 2010 - Vorbesprechung 28.06.2010 32

Beispiel: Taster-Interrupts.org 0x80000.include hw_ctrl.asm ldi $0, IRQ_HDL_ADR ldi $1, irqhdl st $1,($0) Taster Taster Taster VGA Timer Bit 4 3 2 1 0 loop: jmp $1 ldi $0, IRQ_EN ldi $1, 0x8000001f st $1, ($0) ldi $0, IRQ_CTRL ldi $1, loop ldi $28, 0x0 ldi $29, 0x1 ldi $3, 0x1c ldi $7, return irqhdl: ld $5, ($0) and $6, $5, $3 HaPra 2010 - Vorbesprechung 28.06.2010 33

Agenda Organisatorisches Gesamtsystem und Synthese Programmierung LEDs Taster-Interrupts Timer Beispiel: Boot-Programm HaPra 2010 - Vorbesprechung 28.06.2010 34

Boot-Vorgang ROM an Adresse 0x0 Lädt Daten vom Hasen in den Hauptspeicher Springt ins Hauptprogramm Status über LEDs 0x000000 Boot-ROM jmp 0x80000 0x080000 Hart in den Chipsatz codiert entity rom is port( rom_adr : in std_logic_vector (18 downto 0); rom_data : out std_logic_vector (31 downto 0) ); end; HAPRA- Board- Speicher 0x0BFFFF ungültig architecture behavioral of rom is begin process(rom_adr) begin 0x104000 case rom_adr is when "0000000000000000000" => rom_data <= "10000001010000001111111111110000"; --LDIH $10, IO-Ports 65520 when "0000000000000000001" => rom_data <= "10000101010000000100000000000000"; --LDIL $10, 16384 when "0000000000000000010" => rom_data <= "10000001011000001111111111110000"; --LDIH $11, 65520 when "0000000000000000011" => rom_data <= "10000101011000000100000000000001"; --LDIL $11, 16385 when "0000000000000000100" => rom_data <= "10000000000000001000000000000000"; --LDIH $0, 32768 when "0000000000000000101" => rom_data <= "10000100000000000000000000001000"; --LDIL $0, 8 when "0000000000000000110" => rom_data <= "01000100000010110000000000000000"; --ST $0, ($11) when "0000000000000000111" => rom_data HaPra 2010 <= - Vorbesprechung "10000000011000000000000000000000"; 28.06.2010 --LDIH $3, 0 35

Das Boot-Programm.org 0x0.def TIME 25000.def CONSOLE_WR32 0xfff80000.def CONSOLE_RD32 0xfff80001.def CONSOLE_StatusRD32 0xfff80005.def HW_CTRL_LEDS 0xfff04000.def HW_CTRL_CTRL 0xfff04001.def MEM_BASE 0x80000 ldi $10,HW_CTRL_LEDS ldi $11,HW_CTRL_CTRL ldi $0, 0x80000008 st $0, ($11) ;enable bargraph leds ldi $3, 0 ldi $5, 1 ldi $4, TIME ldi $12, adr_loop ldi $13, data_loop ldi $14, CONSOLE_RD32 ldi $15, CONSOLE_StatusRD32 ldi $16, MEM_BASE ldi $17, led_init ldi $18, cont ldi $19, wait adr_loop: call $30, $19 ld $1, ($15) jz $12, $1 ld $1,($14) jz $16, $1 ;adr available? ;load adr ;if adr=0 jump into ram data_loop: ld $2, ($15) jz $13, $2 ld $2,($14) st $2,($1) jmp $12 ;data available ;load data ;load next word wait: sub $4, $4, $5 jz $18, $4 jmp $30 cont: ldi $4, TIME ldil $3, 0 jz $17, $3 st $3, ($10) sar $3,$3 jmp $30 led_init: ldih $3, 0x80ff st $3, ($10) ldih $3, 0x0080 jmp $30 HaPra 2010 - Vorbesprechung 28.06.2010 36

Das Boot-Programm.org 0x0.def TIME 25000.def CONSOLE_WR32 0xfff80000.def CONSOLE_RD32 0xfff80001.def CONSOLE_StatusRD32 0xfff80005.def HW_CTRL_LEDS 0xfff04000.def HW_CTRL_CTRL 0xfff04001.def MEM_BASE 0x80000.org 0x0.def TIME 25000.def CONSOLE_WR32 0xfff80000.def CONSOLE_RD32 0xfff80001.def CONSOLE_StatusRD32 0xfff80005.def HW_CTRL_LEDS 0xfff04000.def HW_CTRL_CTRL 0xfff04001.def MEM_BASE 0x80000 ldi $10,HW_CTRL_LEDS ldi $11,HW_CTRL_CTRL ldi $0, 0x80000008 st $0, ($11) ldi $3, 0 ldi $5, 1 ldi $4, TIME ldi $12, adr_loop ldi $13, data_loop ldi $14, CONSOLE_RD32 ldi $15, CONSOLE_StatusRD32 ldi $16, MEM_BASE ldi $17, led_init ldi $18, cont ldi $19, wait adr_loop: call $30, $19 ld $1, ($15) jz $12, $1 ld $1,($14) jz $16, $1 ;adr available? ;enable bargraph leds ;load adr ;if adr=0 jump into ram data_loop: ld $2, ($15) jz $13, $2 ld $2,($14) st $2,($1) jmp $12 ;data available ;load data ;load next word wait: sub $4, $4, $5 jz $18, $4 jmp $30 cont: ldi $4, TIME ldil $3, 0 jz $17, $3 st $3, ($10) sar $3,$3 jmp $30 led_init: ldih $3, 0x80ff st $3, ($10) ldih $3, 0x0080 jmp $30 HaPra 2010 - Vorbesprechung 28.06.2010 37

Das Boot-Programm ldi $10,HW_CTRL_LEDS ldi $11,HW_CTRL_CTRL ldi $0, 0x80000008 ;bargraph leds st $0, ($11) ldi $3, 0 ldi $5, 1 ldi $4, TIME ldi $12, adr_loop ldi $13, data_loop ldi $14, CONSOLE_RD32 ldi $15, CONSOLE_StatusRD32 ldi $16, MEM_BASE ldi $17, led_init ldi $18, cont ldi $19, wait.org 0x0.def TIME 25000.def CONSOLE_WR32 0xfff80000.def CONSOLE_RD32 0xfff80001.def CONSOLE_StatusRD32 0xfff80005.def HW_CTRL_LEDS 0xfff04000.def HW_CTRL_CTRL 0xfff04001.def MEM_BASE 0x80000 ldi $10,HW_CTRL_LEDS ldi $11,HW_CTRL_CTRL ldi $0, 0x80000008 st $0, ($11) ldi $3, 0 ldi $5, 1 ldi $4, TIME ldi $12, adr_loop ldi $13, data_loop ldi $14, CONSOLE_RD32 ldi $15, CONSOLE_StatusRD32 ldi $16, MEM_BASE ldi $17, led_init ldi $18, cont ldi $19, wait adr_loop: call $30, $19 ld $1, ($15) jz $12, $1 ld $1,($14) jz $16, $1 data_loop: ld $2, ($15) jz $13, $2 ld $2,($14) st $2,($1) jmp $12 wait: sub $4, $4, $5 jz $18, $4 jmp $30 cont: ldi $4, TIME ldil $3, 0 jz $17, $3 st $3, ($10) sar $3,$3 jmp $30 led_init: ldih $3, 0x80ff st $3, ($10) ldih $3, 0x0080 jmp $30 ;adr available? ;enable bargraph leds ;load adr ;if adr=0 jump into ram ;data available ;load data ;load next word HaPra 2010 - Vorbesprechung 28.06.2010 38

Das Boot-Programm wait: sub $4, $4, 1 jz cont, $4 jmp $30 cont: ldi $4, TIME ldil $3, 0 jz led_init, $3 st $3, (HW_CTRL_LEDS) sar $3,$3 jmp $30 led_init: ldih $3, 0x80ff st $3, (HW_CTRL_LEDS) ldih $3, 0x0080 jmp $30 ;$4 init. with TIME ;ret. to caller.org 0x0.def TIME 25000.def CONSOLE_WR32 0xfff80000.def CONSOLE_RD32 0xfff80001.def CONSOLE_StatusRD32 0xfff80005.def HW_CTRL_LEDS 0xfff04000.def HW_CTRL_CTRL 0xfff04001.def MEM_BASE 0x80000 ldi $10,HW_CTRL_LEDS ldi $11,HW_CTRL_CTRL ldi $0, 0x80000008 st $0, ($11) ldi $3, 0 ldi $5, 1 ldi $4, TIME ldi $12, adr_loop ldi $13, data_loop ldi $14, CONSOLE_RD32 ldi $15, CONSOLE_StatusRD32 ldi $16, MEM_BASE ldi $17, led_init ldi $18, cont ldi $19, wait adr_loop: call $30, $19 ld $1, ($15) jz $12, $1 ld $1,($14) jz $16, $1 data_loop: ld $2, ($15) jz $13, $2 ld $2,($14) st $2,($1) jmp $12 wait: sub $4, $4, $5 jz $18, $4 jmp $30 cont: ldi $4, TIME ldil $3, 0 jz $17, $3 st $3, ($10) sar $3,$3 jmp $30 led_init: ldih $3, 0x80ff st $3, ($10) ldih $3, 0x0080 jmp $30 ;adr available? ;enable bargraph leds ;load adr ;if adr=0 jump into ram ;data available ;load data ;load next word HaPra 2010 - Vorbesprechung 28.06.2010 39

Das Boot-Programm adr_loop: call $30, wait ld $1, (CONSOLE_StatusRD32) ;adr? jz adr_loop, $1 ld $1,(CONSOLE_RD32) ;load adr jz MEM_BASE, $1 data_loop: ld $2, (CONSOLE_StatusRD32) ;data? jz data_loop, $2 ld $2,(CONSOLE_RD32) ;load data st $2,($1) jmp adr_loop ;load next word.org 0x0.def TIME 25000.def CONSOLE_WR32 0xfff80000.def CONSOLE_RD32 0xfff80001.def CONSOLE_StatusRD32 0xfff80005.def HW_CTRL_LEDS 0xfff04000.def HW_CTRL_CTRL 0xfff04001.def MEM_BASE 0x80000 ldi $10,HW_CTRL_LEDS ldi $11,HW_CTRL_CTRL ldi $0, 0x80000008 st $0, ($11) ldi $3, 0 ldi $5, 1 ldi $4, TIME ldi $12, adr_loop ldi $13, data_loop ldi $14, CONSOLE_RD32 ldi $15, CONSOLE_StatusRD32 ldi $16, MEM_BASE ldi $17, led_init ldi $18, cont ldi $19, wait adr_loop: call $30, $19 ld $1, ($15) jz $12, $1 ld $1,($14) jz $16, $1 data_loop: ld $2, ($15) jz $13, $2 ld $2,($14) st $2,($1) jmp $12 ;adr available? ;enable bargraph leds ;load adr ;if adr=0 jump into ram ;data available ;load data ;load next word wait: sub $4, $4, $5 jz $18, $4 jmp $30 cont: ldi $4, TIME ldil $3, 0 jz $17, $3 st $3, ($10) sar $3,$3 jmp $30 led_init: ldih $3, 0x80ff st $3, ($10) ldih $3, 0x0080 jmp $30 HaPra 2010 - Vorbesprechung 28.06.2010 40

Viel Spass im HaPra 2010!