PuProject NOS032

Aus PUCONwiki
Version vom 28. März 2016, 09:39 Uhr von Wolfgang (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „NOS032 is a programmable hardware toolkit to build a number of applications to show sort of vector graphics on an oscilloscope screen. The initial implementat…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

NOS032 is a programmable hardware toolkit to build a number of applications to show sort of vector graphics on an oscilloscope screen.

The initial implementation of NOS032 is on the Altium NanoBoard 3000.

The vector graphics are produced by setting the oscilloscope to X-Y mode and feeding it X- and Y-voltages from channels 0 and 1 of the NanoBoard's 4-channel DAC.

Building Blocks of NOS032

SPIA - SPI DAC controller

SPIA has 3 signals at the input:

  • 16-bit-data bus DAC
  • a LOAD signal input to load the 16-bit data value to be sent to the DAC
  • a BUSY signal output where SPIA shows it's busy outputting data and cannot accept new data

MPE - Memory Player Engine

Die MemoryPlayerEngine - MPE - ist ein Logik-Baustein, der numerische Werte als Bytes mit Wertebereich 0..255 aus dem Wishbone-Speicher ausliest und als analoge Spannungen auf dem nachgeschalteten SPI-DAC im Wertebereich 0..3,3V des Vorlage:NanoBoard3000 ausgibt.

Alle 20 us wird ein neues 2x8-bit Wertepaar ausgelesen und die Spannungen ausgegeben.

Die MPE wird über eine Controller-Schnittstelle mit 16 (nicht alle verwendet) 32-bit-Registern gesteuert.

Die MPE kann in 2 Modi arbeiten:

  1. MODE 0 - Single-Buffer-Mode:
    1. Es wird ein Memory Buffer ausgegegeben. Dieser liegt zwischen ADRLOW (Regster 1) und ADRHIGH (Register 2)
    2. Solange RUN (Register 15, Bit 31) aktiv ist, wird immer wieder bei ADRLOW begonnen und immer 2 Byte auf die 8-bit-DAC-Kanäle 0 und 1 in einem Raster von 20 us ausgegeben. Wird ADRHIGH erreicht, so wird wieder bei ADRLOW begonnen
    3. Das Auslesen des Speichers geschieht in 32-bit-Longwords, es wird daher angenommen, dass auch ganzzahliges Vielfaches von 32 bit, d.h. 2x16-bit-Worten, d.h. jeweils 2 Samples im Speicher abgelegt wurde. Der Controller, der die auszugebenden Werte in den Speicher schreibt, muss daher ein ganzzahliges Vielfaches von 2 Samples in den Speicher schreiben, damit nicht un-initialisierter Speicher ausgelesen wird und zu Stör-Werten der ausgegebenen Spannungen führt
  1. MODE 1 - Descriptor Buffer Mode:
    1. DESCBASE (Register 3) zeigt auf einen Descriptor-Pointer-Block – DPB - (im Speicher)
    2. Der DPB ist eine Liste von Adressen (0=Ende) von Descriptoren – DSC
    3. Ein DSC beinhaltet:
      1. 32-bit ADRLOW
      2. 32-bit ADRHIGH
    4. Ein DSC beschreibt daher einen Speicherbereich, der wie im Mode 1 abgearbeitet wird
    5. Ist ein Speicherbereich abgearbeitet, wird der nächste Descriptor herangezogen
    6. Ist ein Descriptor Pointer = 0, so wird wieder von vorne begonnen, es wird wieder DESCBASE ausgelesen, um zum Anfang des DPB zu gehen
    7. Der Controller kann DESCBASE jederzeit auf einen anderen Wert setzen, die MPE wird nach der Abarbeitung des aktuellen DPB zum neuen übergehen