Funktion
Überblick
Der
Heartbeat Monitor erlaubt Fehlerdiagnose und Überwachung des Betriebszustandes eines SpartanMC-Systems mittels einer LED. Nach dem Reset werden in Hardware eine Reihe von einfachen Tests auf bestimmte Signalverläufe durchgeführt, die für das korrekte Funktionieren des Systems erforderlich sind. Diese Überprüfungen laufen unabhängig vom SpartanMC. Eventuell erkannte Fehlerzustände werden mittels einer codiert blinkenden LED angezeigt.
Ist das System korrekt angelaufen, so kann durch Schreiben eines bestimmten Wertes auf ein Peripherieregister des Heartbeat Monitors das ständige Blinken der LED getriggert werden. Bleibt der Schreibzugriff aus, verlischt die LED.
Die Überwachung des laufenden Programms war bisher bereits durch die Komponente
Watchdog-Timer möglich. Der Heartbeat-Monitor bietet im Unterschied dazu nicht die Möglichkeit, einen System-Reset auszulösen. Dafür ist zur Nutzung des Heartbeat-Monitors keine weitere Konfiguration von Registern nötig und es werden zusätzlich die Startup-Tests durchgeführt.
Startup-Tests
Nach einem Reset oder dem Programmieren des FPGAs (also immer, wenn der SpartanMC hochfährt), wird das Auftreten der folgenden Fehlerzustände geprüft:
Test | Fehlerbeschreibung | Fehlercode
|
Externer Takt | Die externe Taktversorgung arbeitet nicht | dauerhaft an
|
Externes Reset | Das externe Reset (low-aktiv) ist dauerhaft auf "0" | - - ——
|
Systemtakt DCM | Das Locked-Signal des DCMs zur Erzeugung des Systemtaktes ist dauerhaft "0" | - —— -
|
SpartanMC-Reset | Das vom SpartanMC generierte Reset ist dauerhaft "1" | - —— ——
|
Peripherietakt | Der SpartanMC-Peripherietakt (clk_peri) arbeitet nicht | —— - -
|
UART (optional) | Die UART-Sendeleitung ist nicht aktiv | —— - ——
|
Heartbeat
Nach erfolgreichem Abschluss aller Startup-Tests signalisiert die angeschlossene LED den "Herzschlag" des Systems. Dieser muss mit periodischen Schreibzugriffen auf eine beliebige Adresse (Offset 0…7) im Adressraum der Heartbeat-Peripherie getriggert werden. Das Datum, welches geschrieben werden muss, kann mit dem Parameter
HEARTBEAT_PATTERN
eingestellt werden. In einem C-Programm steht dieser Wert über die Konstante
SB_HEARTBEAT_0_HEARTBEAT_PATTERN
zur Verfügung.
Minimalbeispiel zum Triggern des Heartbeats
#include <system.h>
volatile unsigned int *heartbeat = (volatile unsigned int*)SB_HEARTBEAT_0_BASE_ADR;
void main() {
while (1) {
heartbeat[0] = SB_HEARTBEAT_0_HEARTBEAT_PATTERN;
}
}
Hardware
Die finale Version des Heartbeat-Monitors ist ab Rev. 1027 vom 2012-01-24 10:04:15 +0100 im SVN Verfügbar.
Parameter
Name | Bedeutung
|
CLOCK_EXT_FREQ_HZ | Taktfrequenz der externen Taktquelle (Board) in Hertz (zur Berechnung der Blink-Intervalle)
|
HEARTBEAT_PATTERN | 18-bit Wort, das zur Aufrechterhaltung des Heartbeats in die Peripherie geschrieben werden muss
|
CHECK_UART_TX | Optionale Überprüfung des UART-Sendesignals während der Startup-Tests |
Ports
Name | Bedeutung | Richtung
|
clk_ext_i | Externer Takt vom Board | in
|
reset_ext_i_n | Externes Reset vom Board | in
|
sysclock_locked_i | Locked-Signal der System-Clock-Komponente | in
|
uart_tx_i | Sendeleitung der UART (optional) | in
|
heartbeat_o | LED zur Signalisierung des Systemzustandes | out |