Timer PulseAccu

Funktionen

Das Pulse-Accumulator-Modul bietet die Möglichkeit, entweder die Impulse am Eingangs-Pin oder die RTI-Impulse bis zu einem Impuls am Eingang zu zählen. In ersterem Modus läuft der Zähler immer weiter und kann aus dem Datenregister gelesen werden oder durch einen Zugriff auf das Steuerregister zurückgesetzt werden. Im anderen Modus hält der Zähler bei Eingehen eines Impulses am Eingang an. Wird das Datenregister gelesen, nachdem der Zähler angehalten ist, wird dieser anschliessend zurückgesetzt und zählt erneut bis zu einem Impuls am Eingangs-Pin. Auch hier setzt ein Zugriff auf das Steuerregister den Zähler zurück.

Register

Offset Register Funktion Zugriff
0 PA_CTRL Steuerregister read/write
1 PA_DAT Zählerstand read


Das Datenregister PA_DAT enthält den Zählerstand des Pulse-Accumulators. Bei einem Reset werden alle Bits mit Null initialisiert. Auf das Register kann nur lesend zugegriffen werden.
Das Steuerregister PA_CTRL enthält alle zur Steuerung der Funktionen des Pulse-Accumulator-Moduls nötigen Bits. Bei einem Reset werden alle Bits mit Null initialisiert. Auf das Register kann lesend und schreibend zugegriffen werden.

PA_CTRL Funktion
Bit 0: Pulse-Accumulator enable: 0 = disable, 1 = enable
Bit 1: Mode select:
0 = Impulse am Eingang zählen
1 = RTI bis Impuls am Eingang zählen
Bit 2 bis 17: nicht benutzt


counter.h

#ifndef __COUNTER_H
#define __COUNTER_H

#define COUNTER_EN      (1 << 0)
#define COUNTER_MODE    (1 << 1)

#define COUNTER_INPMODE (COUNTER_MODE * 0)
#define COUNTER_RTIMODE (COUNTER_MODE * 1)

typedef struct pacc {
        volatile unsigned int control;  // (r/w) reset conter
        volatile unsigned int counter;  // (r)
} counter_regs_t;

#endif

Konfiguration und Instanziierung

Bei der Instanziierung eines Pulse-Accumulator-Moduls wird der Parameter BASE_ADR vom jConfig automatisch eingestellt. BASE_ADR gibt den Offset der Adresse des Moduls zur Basisadresse aller Peripherieregister an. Der Wert besteht aus den oberen sieben Bit der zehn Bit-Adresse eines Moduls (die unteren drei Bit werden nur modulintern benutzt).

Der Eingang für RTI_Impulse muss an die entsprechende Leitung angeschlossen werden und der Input-Pin an den Eingang des Top Level Moduls. Dieser muss dann noch den Pins des FPGA zugeordnet werden (z.B. in der .ucf-Datei des ISE-Projekts).

Einstellungen für den Timer PulseAccu

Image Image Image Image Image

SpartanMC 18 Testmonitor vom 17.10.07
:H
Modify (h)      :M  (daddr)
Display 18 Bit  :D  (start1) [end1]
Display  9 Bit  :D9 (start1) [end1]
Fill     9 Bit  :F  (start1) (end1) (wert)
Move    18 Bit  :MO (start1) (end1) (start2)
Compare 18 Bit  :C  (start1) (end1) (start2)
Search  18 Bit  :SE (start1) (end1) (wert)

Goto            :G  (paddr)
Goto DataAddr   :GD (daddr)

Load *.sph      :LS [daddr]
:M 34090
34090 00000  / 3d
34092 00000 : 340A0
340A0 00000  / d
340A2 00000 : 340B0
340B0 00000  / 1
340B2 00000  / 80
340B4 00000 .
340B4 00079 .
340B4 00056 : 340C0
340C0 00000  / 3d
340C2 00000  / 40
340C4 00000 -
340C2 00040 -
340C0 0003D .
340C0 0003D .
340C0 0007D .
340C0 0007D : 34100
34100 00000  / 1
34102 00000 .
34102 00000 .
34102 00005 -
34100 00001  / 3
34102 00000 .
34102 00002 .
34102 00006 .
34102 0000C .
34102 00012 .
34102 00015 .
34102 00018 .
34102 00002 .
34102 00004 .
34102 00005 .
34102 00007 .
34102 0000E .
34102 0001B .
34102 001B0 .
34102 001B3 .


SpartanMC