OCTOBUS: Difference between revisions

From NDWiki
Jump to navigation Jump to search
Gandalf (talk | contribs)
Added a picture
RHansen (talk | contribs)
OCTOBUS: add Protocol Deep Dive with message format, station table, command/kick codes
 
(One intermediate revision by one other user not shown)
Line 1: Line 1:
Octobus (or OCTObus, as it was written in some documentation) was a high-speed serial command bus for system-internal high speed signal/command transfer. It could send short messages used for synchronization of directly coupled processors in multi-processor configurations including [[DOMINO]] I/O controllers.
'''Octobus''' (or '''''OCTObus''''', as it was written in some documentation) was a high-speed serial command bus for system-internal high speed signal/command transfer. It could send short messages used for synchronization of directly coupled processors in multi-processor configurations including [[DOMINO]] I/O controllers.
 
[[Image:3096B OCTOBUS MPM Channel Controller.jpg |300px | thumb | OCTOBUS card in a [[ND-5700]] crate.]]
[[Image:3096B OCTOBUS MPM Channel Controller.jpg |300px | thumb | OCTOBUS card in a [[ND-5700]] crate.]]


=== OCTObus physical implementation ===
== Purpose ==
The [[MPM-5]] (MultiPortMemory) system was extended with the physical wiring and features for Octobus support and was then called [[Multi-Function bus]], or MF-Bus, introduced with the [[ND-5000]] series.


=== OCTObus purpose ===
Octobus was a part of transforming the original ND-500 design, where the ND-110 processor was an I/O bottleneck, to a multi-processor system with DOMINO I/O boards connected directly to the MF-Bus. The role of OCTObus was to manage and synchronize the processors.
Octobus was a part of transforming the original ND-500 design, where the ND-110 processor was an I/O bottleneck, to a multi-processor system with DOMINO I/O boards connected directly to the MF-Bus. The role of OCTObus was to manage and synchronize the processors.


=== OCTObus protocol overview ===
== Physical implementation ==
 
The [[MPM-5]] (MultiPortMemory) system was extended with the physical wiring and features for Octobus support and was then called [[Multi-Function bus]], or MF-Bus, introduced with the [[ND-5000]] series.
 
== Protocol overview ==


* An OCTObus message is 32 bits. It includes priority, destination, source, information, etc.
* An OCTObus message is 32 bits. It includes priority, destination, source, information, etc.
Line 20: Line 23:
* Retries are handled by hardware.
* Retries are handled by hardware.


=== OCTObus signals ===
== Signals ==


* XREQ - Transmit request
* XREQ - Transmit request
Line 27: Line 30:
* XRFO - Refresh oscillator
* XRFO - Refresh oscillator


=== OCTObus data rate ===
== Data rate ==


Data rate depends on cable length.
Data rate depends on cable length.
Line 43: Line 46:
|}
|}


=== OCTObus cabling ===
== Cabling ==


The internal backwired OCTObus in the MF-Bus is called a ''local'' OCTObus and is [[Wikipedia:Transistor-transistor_logic|TTL]]. Non-backwired OCTObus is called ''global'' OCTObus and uses [[Wikipedia:i/Differential_signaling|differential]] cable.
The internal backwired OCTObus in the MF-Bus is called a ''local'' OCTObus and is [[Wikipedia:Transistor-transistor_logic|TTL]]. Non-backwired OCTObus is called ''global'' OCTObus and uses [[Wikipedia:i/Differential_signaling|differential]] cable.
== Protocol Deep Dive ==
=== Software Message Format (16-bit I/O Register) ===
OCTOBUS frames are manipulated by software as 16-bit words in I/O registers. The following table shows bit assignments:
{| class="wikitable" style="text-align: center; font-family: monospace; font-size: 90%"
|-
! style="width: 7%" | Bit 15
! style="width: 7%" | Bit 14
! style="width: 21%" colspan="6" | Bits 13–8
! style="width: 7%" | Bit 7
! style="width: 7%" | Bit 6
! style="width: 7%" | Bit 5
! style="width: 7%" | Bit 4
! style="width: 21%" colspan="4" | Bits 3–0
|-
| '''C''' || '''B''' || colspan="6" | '''DEST/SOURCE''' || '''E''' || '''K''' || '''M''' || '''S''' || colspan="4" | '''Data/Number'''
|-
| Control || Broadcast || colspan="6" | Destination/Broadcast || Emergency || Kick || Multibyte || Start/Stop || colspan="4" | Info/OMD
|}
; '''C (Bit 15) — Control'''
: 1 = Control message (commands, kicks, multibyte envelopes)
: 0 = Data message (payload bytes)
; '''B (Bit 14) — Broadcast'''
: 1 = Broadcast to station type
: 0 = Unicast to specific station number
; '''Bits 13–8 (6 bits) — Destination/Source'''
: When B=0: Specific station number (1-62 decimal / 1-76 octal)
: When B=1: Broadcast type for all nodes of a given class
: Station 0 and 63 reserved/illegal
; '''E (Bit 7) — Emergency'''
: 1 = Emergency command (master clear, ACCP termination)
: 0 = Normal command
: Combined with command byte for emergency control codes
; '''K (Bit 6) — Kick'''
: 1 = Process activation/synchronization signal
: 0 = Not a kick message
: Kick numbers in bits 3-0 specify activation type (1-6)
; '''M (Bit 5) — Multibyte'''
: 1 = Part of multi-frame message sequence
: 0 = Single-frame message
: Used with S flag to delimit SOMB/EOMB boundaries
; '''S (Bit 4) — Start/Stop''' (when M=1)
: 1 = Start of Multibyte (SOMB)
: 0 = End of Multibyte (EOMB)
: OMD (Output Message Descriptor, 0-15) in bits 3-0
; '''Bits 3–0 (4 bits) — Data/Number/OMD'''
: Control messages: Command code
: Kick messages: Kick number (1-6)
: Multibyte messages: OMD (0-15) for message queue/handler
: Data frames: Payload byte or metadata
=== Station Number Assignments ===
Station numbers follow the format: decimal (octal in ND documentation)
{| class="wikitable"
|-
! Type !! Stations (Decimal) !! Octal Range !! Purpose
|-
| ND-120 CPU || 1 || 1 || Primary processor (ND-100 on ND-500-II systems)
|-
| MFbus Controllers || 2-7 || 2-7 || Memory and I/O control (ND-5000)
|-
| SCSI Controllers || 8-11 || 10-13 || Disk/storage control
|-
| Matra VME || 12-13 || 14-15 || VME bus interface
|-
| Multifunction Comm || 14-15 || 16-17 || Communication controllers
|-
| Hyperchannel || 16 || 20 || Network interface
|-
| FDDI/Fibernet || 17-19 || 21-23 || High-speed network
|-
| FPS-5000 || 20-23 || 24-27 || Floating-point accelerator
|-
| Graphics Controller || 24-27 || 30-33 || Display/graphics control
|-
| '''ND-5000 CPU''' || '''56-62''' || '''70-76''' || '''Processor (up to 7 CPUs per bus)'''
|}
=== Message Types ===
; '''Ident Message''' (C=1, E=0, K=0, M=0)
: Station identity request/response
: Bits 3-0 carry the ident number
: Used for station discovery and presence verification
; '''Kick Message''' (C=1, K=1)
: Process activation and synchronization signals
: Bits 3-0 specify the kick type (1-6)
: No response expected
; '''Emergency Message''' (C=1, E=1)
: High-priority control commands (master clear, ACCP termination)
: Hardware priority handling
: Bits 3-0 carry emergency command code
; '''Multibyte Message''' (C=1, M=1)
: Multi-frame protocol for complex data and commands
: Consists of SOMB, payload frames, EOMB
: Supports inter-processor messaging via OMD (Output Message Descriptor)
; '''Data Message''' (C=0)
: Payload frame (body of multibyte message)
: Bits 7-0 carry one data byte
: Part of an active multibyte message sequence
=== Multibyte Message Protocol ===
Multibyte messages allow transmission of variable-length payloads (0-255 bytes) across multiple frames. Used for:
* [[NUCLEUS]] inter-processor messaging
* System parameter configuration
* Complex command sequences
; '''Frame Sequence'''
: '''SOMB (Start of Multibyte)''': C=1, M=1, S=1, OMD in bits 3-0
:: Destination station/broadcast type in bits 13-8
:: Initiates message reception at destination
: '''Data Frame 1''': C=0, destination station, low byte = source OMD
:: Identifies which OMD at the source will receive the reply
: '''Data Frame 2''': C=0, destination station, low byte = payload byte count N
:: Specifies how many payload bytes follow
: '''Data Frames 3..N+2''': C=0, destination station, low byte = payload byte i
:: Payload bytes transmitted one per frame
: '''EOMB (End of Multibyte)''': C=1, M=1, S=0, OMD in bits 3-0
:: Signals message completion
:: Destination processes the complete message
; '''OMD (Output Message Descriptor)'''
: Range 0-15 (4 bits), identifies message queue/handler at destination
: OMD 0 reserved for OCTOBUS Test Protocol (station firmware service)
: OMD 1-15 available for application messages
: Destination replies by sending to the source OMD specified in Data Frame 1
=== Command Codes ===
Control messages (C=1, E=0) use command codes in the low byte:
{| class="wikitable"
|-
! Code (hex) !! Octal !! Symbol !! Purpose
|-
| 0x00 || 000 || CMACK || Acknowledge
|-
| 0x0E || 016 || CMSYS || System parameter (multibyte header)
|-
| 0x10 || 020 || CMREA || Read address
|-
| 0x14 || 024 || CMDWW || Direct write word
|-
| 0x16 || 026 || CMDRW || Direct read word
|-
| 0x1B || 033 || CMRUN || Run
|-
| 0x1C || 034 || CMSTO || Stop
|-
| 0x1D || 035 || CMCON || Continue
|-
| 0x1E || 036 || CMRES || Reset
|-
| 0x21 || 041 || CMMAC || Master Clear (with E=1: emergency 0xA1/241₈)
|-
| 0x22 || 042 || CMACO || Continue ACCP (with E=1: emergency 0xA2/242₈)
|-
| 0x24 || 044 || — || Terminate ACCP (with E=1: emergency 0xA4/244₈)
|-
| 0x31 || 061 || CMENK || Enable kick
|-
| 0x36 || 066 || CMMIC || Microcode command
|-
| 0x39 || 071 || CMCPU || CPU reset (sent as multibyte to OMD 3 on ACCP)
|-
| 0x3A || 072 || CMTES || Test command
|}
=== Kick Numbers ===
Kick messages (K=1) use 4-bit kick numbers (bits 3-0) for process synchronization:
{| class="wikitable"
|-
! Kick # !! Symbol !! Purpose !! Used By
|-
| 1 || N100KICK || Activate ND-5000 process || ND-100 to ND-500/ND-5000
|-
| 2 || — || Alternate activate signal || ND-5000
|-
| 3 || CLRKICK || Clear flag, continue process || Inter-CPU coordination
|-
| 4 || — || Update internal clock || System timing
|-
| 5 || — || '''NUCLEUS kick''' || NUCLEUS inter-processor messaging
|-
| 6 || IDLEKICK || Save context, go IDLE || Processor idle/sleep
|}
=== Hardware Message Format (32-bit on Wire) ===
The wire format includes bits not visible to software (managed by hardware). Total: 1 start bit + 30 data bits + 1 stop bit = 32 bits.
{| class="wikitable" style="text-align: center; font-family: monospace; font-size: 85%"
|-
! style="width: 12%" | Priority<br/>(4 bits)
! style="width: 12%" | Dest<br/>(6 bits)
! style="width: 3%" | C<br/>(1)
! style="width: 3%" | B<br/>(1)
! style="width: 12%" | Source<br/>(6 bits)
! style="width: 16%" | Information<br/>(8 bits)
! style="width: 12%" | Parity<br/>(2 bits)
! style="width: 12%" | Ack<br/>(2 bits)
|-
| Lost Access Counter || Destination Station || Control || Broadcast || Source Station || Data/Command || Bit Count || Delivery Status
|}
; '''Priority (4 bits)'''
: Hardware-managed Lost Access Counter for bus arbitration
: Prevents starvation: stations that lose arbitration gain higher priority
; '''Parity (2 bits)'''
: Two LSBs of count of '1' bits in frame (computed by hardware)
; '''Ack (2 bits)''' — Delivery status code
: 00 = Timeout (15 retries)
: 01 = Successfully received
: 10 = Destination busy (255 retries with automatic retry)
: 11 = Parity error (B=0) or Ambiguous response (B=1)
; '''Source (6 bits)'''
: Station number of transmitter (set by hardware from STANO register)
: On reception, this becomes the visible station number in software
=== OCTOBUS Test Protocol (OMD 0) ===
Every station serves OMD 0, which implements the OCTOBUS Test Protocol. Used for:
* Station discovery (Identify yourself)
* Get present stations on bus
* Echo single/multi-word messages
* Read/write Octobus registers
* Get station type and firmware version
* Diagnostic and maintenance operations
Protocol verified from TPE (Test Program Equipment) OCTOBUS B00 test suite:
* Test 1: Transmit-receive loopback
* Test 2: Pattern exhaustion
* Test 3: FIFO depth verification
* Test 4: Station discovery and registry
* Test 5: Single-word echo
* Test 6: Multi-word message echo
== See Also ==
* [[ND-500]] — Classic 32-bit coprocessor
* [[ND-500-II]] — ND-500 with OCTOBUS via line driver
* [[ND-5000]] — Native OCTOBUS processor
* [[NUCLEUS]] — Inter-processor messaging runtime
* [[DOMINO]] — I/O controller system
* [[MPM-5]] — Shared memory predecessor
* [[MFbus]] — Modern successor bus (ND-5000)


== Sources ==
== Sources ==
Line 52: Line 328:


{{Stub}}
{{Stub}}
[[Category:Norsk Data hardware]]
[[Category:Communication protocols]]
[[Category:Bus architectures]]

Latest revision as of 12:31, 22 July 2026

Octobus (or OCTObus, as it was written in some documentation) was a high-speed serial command bus for system-internal high speed signal/command transfer. It could send short messages used for synchronization of directly coupled processors in multi-processor configurations including DOMINO I/O controllers.

OCTOBUS card in a ND-5700 crate.

Purpose

Octobus was a part of transforming the original ND-500 design, where the ND-110 processor was an I/O bottleneck, to a multi-processor system with DOMINO I/O boards connected directly to the MF-Bus. The role of OCTObus was to manage and synchronize the processors.

Physical implementation

The MPM-5 (MultiPortMemory) system was extended with the physical wiring and features for Octobus support and was then called Multi-Function bus, or MF-Bus, introduced with the ND-5000 series.

Protocol overview

  • An OCTObus message is 32 bits. It includes priority, destination, source, information, etc.
  • Each device connected to the OCTObus is called a node.
  • There can be up to 62 nodes on one OCTObus.
  • An OCTObus can be bridged to another OCTObus if 62 nodes isn't sufficient.
  • One node must be set up as MASTER. This node supplies the OCTObus clock (XCLK)
  • Any node can be set up as MASTER, the MASTER node is not special.
  • All nodes can take control of the bus, by issuing a request (XREQ) intercepted by the MASTER.
  • Power failures are tolerated by all nodes.
  • Retries are handled by hardware.

Signals

  • XREQ - Transmit request
  • XCLK - Clock
  • XDAT - Data
  • XRFO - Refresh oscillator

Data rate

Data rate depends on cable length.

Cable length in meters Clock frequency in MHz Data rate in Mbits/s
6 4 1.0
60 1 0.250
120 0.5 0.125

Cabling

The internal backwired OCTObus in the MF-Bus is called a local OCTObus and is TTL. Non-backwired OCTObus is called global OCTObus and uses differential cable.

Protocol Deep Dive

Software Message Format (16-bit I/O Register)

OCTOBUS frames are manipulated by software as 16-bit words in I/O registers. The following table shows bit assignments:

Bit 15 Bit 14 Bits 13–8 Bit 7 Bit 6 Bit 5 Bit 4 Bits 3–0
C B DEST/SOURCE E K M S Data/Number
Control Broadcast Destination/Broadcast Emergency Kick Multibyte Start/Stop Info/OMD
C (Bit 15) — Control
1 = Control message (commands, kicks, multibyte envelopes)
0 = Data message (payload bytes)
B (Bit 14) — Broadcast
1 = Broadcast to station type
0 = Unicast to specific station number
Bits 13–8 (6 bits) — Destination/Source
When B=0: Specific station number (1-62 decimal / 1-76 octal)
When B=1: Broadcast type for all nodes of a given class
Station 0 and 63 reserved/illegal
E (Bit 7) — Emergency
1 = Emergency command (master clear, ACCP termination)
0 = Normal command
Combined with command byte for emergency control codes
K (Bit 6) — Kick
1 = Process activation/synchronization signal
0 = Not a kick message
Kick numbers in bits 3-0 specify activation type (1-6)
M (Bit 5) — Multibyte
1 = Part of multi-frame message sequence
0 = Single-frame message
Used with S flag to delimit SOMB/EOMB boundaries
S (Bit 4) — Start/Stop (when M=1)
1 = Start of Multibyte (SOMB)
0 = End of Multibyte (EOMB)
OMD (Output Message Descriptor, 0-15) in bits 3-0
Bits 3–0 (4 bits) — Data/Number/OMD
Control messages: Command code
Kick messages: Kick number (1-6)
Multibyte messages: OMD (0-15) for message queue/handler
Data frames: Payload byte or metadata

Station Number Assignments

Station numbers follow the format: decimal (octal in ND documentation)

Type Stations (Decimal) Octal Range Purpose
ND-120 CPU 1 1 Primary processor (ND-100 on ND-500-II systems)
MFbus Controllers 2-7 2-7 Memory and I/O control (ND-5000)
SCSI Controllers 8-11 10-13 Disk/storage control
Matra VME 12-13 14-15 VME bus interface
Multifunction Comm 14-15 16-17 Communication controllers
Hyperchannel 16 20 Network interface
FDDI/Fibernet 17-19 21-23 High-speed network
FPS-5000 20-23 24-27 Floating-point accelerator
Graphics Controller 24-27 30-33 Display/graphics control
ND-5000 CPU 56-62 70-76 Processor (up to 7 CPUs per bus)

Message Types

Ident Message (C=1, E=0, K=0, M=0)
Station identity request/response
Bits 3-0 carry the ident number
Used for station discovery and presence verification
Kick Message (C=1, K=1)
Process activation and synchronization signals
Bits 3-0 specify the kick type (1-6)
No response expected
Emergency Message (C=1, E=1)
High-priority control commands (master clear, ACCP termination)
Hardware priority handling
Bits 3-0 carry emergency command code
Multibyte Message (C=1, M=1)
Multi-frame protocol for complex data and commands
Consists of SOMB, payload frames, EOMB
Supports inter-processor messaging via OMD (Output Message Descriptor)
Data Message (C=0)
Payload frame (body of multibyte message)
Bits 7-0 carry one data byte
Part of an active multibyte message sequence

Multibyte Message Protocol

Multibyte messages allow transmission of variable-length payloads (0-255 bytes) across multiple frames. Used for:

  • NUCLEUS inter-processor messaging
  • System parameter configuration
  • Complex command sequences
Frame Sequence
SOMB (Start of Multibyte): C=1, M=1, S=1, OMD in bits 3-0
Destination station/broadcast type in bits 13-8
Initiates message reception at destination
Data Frame 1: C=0, destination station, low byte = source OMD
Identifies which OMD at the source will receive the reply
Data Frame 2: C=0, destination station, low byte = payload byte count N
Specifies how many payload bytes follow
Data Frames 3..N+2: C=0, destination station, low byte = payload byte i
Payload bytes transmitted one per frame
EOMB (End of Multibyte): C=1, M=1, S=0, OMD in bits 3-0
Signals message completion
Destination processes the complete message
OMD (Output Message Descriptor)
Range 0-15 (4 bits), identifies message queue/handler at destination
OMD 0 reserved for OCTOBUS Test Protocol (station firmware service)
OMD 1-15 available for application messages
Destination replies by sending to the source OMD specified in Data Frame 1

Command Codes

Control messages (C=1, E=0) use command codes in the low byte:

Code (hex) Octal Symbol Purpose
0x00 000 CMACK Acknowledge
0x0E 016 CMSYS System parameter (multibyte header)
0x10 020 CMREA Read address
0x14 024 CMDWW Direct write word
0x16 026 CMDRW Direct read word
0x1B 033 CMRUN Run
0x1C 034 CMSTO Stop
0x1D 035 CMCON Continue
0x1E 036 CMRES Reset
0x21 041 CMMAC Master Clear (with E=1: emergency 0xA1/241₈)
0x22 042 CMACO Continue ACCP (with E=1: emergency 0xA2/242₈)
0x24 044 Terminate ACCP (with E=1: emergency 0xA4/244₈)
0x31 061 CMENK Enable kick
0x36 066 CMMIC Microcode command
0x39 071 CMCPU CPU reset (sent as multibyte to OMD 3 on ACCP)
0x3A 072 CMTES Test command

Kick Numbers

Kick messages (K=1) use 4-bit kick numbers (bits 3-0) for process synchronization:

Kick # Symbol Purpose Used By
1 N100KICK Activate ND-5000 process ND-100 to ND-500/ND-5000
2 Alternate activate signal ND-5000
3 CLRKICK Clear flag, continue process Inter-CPU coordination
4 Update internal clock System timing
5 NUCLEUS kick NUCLEUS inter-processor messaging
6 IDLEKICK Save context, go IDLE Processor idle/sleep

Hardware Message Format (32-bit on Wire)

The wire format includes bits not visible to software (managed by hardware). Total: 1 start bit + 30 data bits + 1 stop bit = 32 bits.

Priority
(4 bits)
Dest
(6 bits)
C
(1)
B
(1)
Source
(6 bits)
Information
(8 bits)
Parity
(2 bits)
Ack
(2 bits)
Lost Access Counter Destination Station Control Broadcast Source Station Data/Command Bit Count Delivery Status
Priority (4 bits)
Hardware-managed Lost Access Counter for bus arbitration
Prevents starvation: stations that lose arbitration gain higher priority
Parity (2 bits)
Two LSBs of count of '1' bits in frame (computed by hardware)
Ack (2 bits) — Delivery status code
00 = Timeout (15 retries)
01 = Successfully received
10 = Destination busy (255 retries with automatic retry)
11 = Parity error (B=0) or Ambiguous response (B=1)
Source (6 bits)
Station number of transmitter (set by hardware from STANO register)
On reception, this becomes the visible station number in software

OCTOBUS Test Protocol (OMD 0)

Every station serves OMD 0, which implements the OCTOBUS Test Protocol. Used for:

  • Station discovery (Identify yourself)
  • Get present stations on bus
  • Echo single/multi-word messages
  • Read/write Octobus registers
  • Get station type and firmware version
  • Diagnostic and maintenance operations

Protocol verified from TPE (Test Program Equipment) OCTOBUS B00 test suite:

  • Test 1: Transmit-receive loopback
  • Test 2: Pattern exhaustion
  • Test 3: FIFO depth verification
  • Test 4: Station discovery and registry
  • Test 5: Single-word echo
  • Test 6: Multi-word message echo

See Also

  • ND-500 — Classic 32-bit coprocessor
  • ND-500-II — ND-500 with OCTOBUS via line driver
  • ND-5000 — Native OCTOBUS processor
  • NUCLEUS — Inter-processor messaging runtime
  • DOMINO — I/O controller system
  • MPM-5 — Shared memory predecessor
  • MFbus — Modern successor bus (ND-5000)

Sources

  • ND-14.001.1A DOMINO Standard Hardware Description
  • "Sales information ND-5000 series" (found at www.sintran.com, original published by Norsk Data). Filesize 1.1 MB. Accessed on 03 August 2010.