Heartbeat Monitor

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.

Unterschied zum Watchdog-Timer

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 TaktDie externe Taktversorgung arbeitet nicht dauerhaft an
Externes ResetDas externe Reset (low-aktiv) ist dauerhaft auf "0" - - ——
Systemtakt DCMDas Locked-Signal des DCMs zur Erzeugung des Systemtaktes ist dauerhaft "0" - —— -
SpartanMC-ResetDas vom SpartanMC generierte Reset ist dauerhaft "1" - —— ——
PeripherietaktDer 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



SpartanMC