|
spinnaker_tools development
SpiNNaker API, sark, sc&mp, bmp firmware and build tools
|
Header file describing SpiNNaker hardware. More...
Go to the source code of this file.
Macros | |
| #define | INT_AT(t) ((t) / 4) |
| Converts a byte offset into a word offset. | |
| #define | NULL 0 |
| Null pointer value. | |
| #define | BIT_31 0x80000000 |
| Bit number 31. | |
| #define | BUF_WRITE 1 |
| Define BUF_WRITE to place all peripherals & memories in buffered write space. | |
| #define | NUM_CPUS 18 |
| Number of CPU cores per chip. | |
| #define | NUM_LINKS 6 |
| Number of SpiNNaker links per chip. | |
Memory Layout | |
Memory definitions Datasheet, section 3.3 | |
| #define | ITCM_BASE 0x00000000 |
| Base address of Instruction Tightly Coupled Memory. | |
| #define | ITCM_SIZE 0x00008000 |
| Size of Instruction Tightly Coupled Memory (32 kB) | |
| #define | ITCM_TOP (ITCM_BASE + ITCM_SIZE) |
| Top address of Instruction Tightly Coupled Memory. | |
| #define | DTCM_BASE 0x00400000 |
| Base address of Data Tightly Coupled Memory. | |
| #define | DTCM_SIZE 0x00010000 |
| Size of Data Tightly Coupled Memory (64 kB) | |
| #define | DTCM_TOP (DTCM_BASE + DTCM_SIZE) |
| Top address of Data Tightly Coupled Memory. | |
| #define | SDRAM_BASE_UNBUF 0x70000000 |
| Base address of SDRAM: writes unbuffered. | |
| #define | SDRAM_BASE_BUF 0x60000000 |
| Base address of SDRAM: writes buffered. | |
| #define | SDRAM_BASE SDRAM_BASE_BUF |
| Base address of SDRAM. | |
| #define | SDRAM_SIZE (128 * 1024 * 1024) |
| Size of SDRAM (128 MB) | |
| #define | SDRAM_TOP (SDRAM_BASE + SDRAM_SIZE) |
| Top address of SDRAM. | |
| #define | SYSRAM_BASE_UNBUF 0xf5000000 |
| Base address of System RAM: writes unbuffered. | |
| #define | SYSRAM_BASE_BUF 0xe5000000 |
| Base address of System RAM: writes buffered. | |
| #define | SYSRAM_BASE SYSRAM_BASE_BUF |
| Base address of System RAM. | |
| #define | SYSRAM_SIZE 0x00008000 |
| Size of System RAM (32 kB) | |
| #define | SYSRAM_TOP (SYSRAM_BASE + SYSRAM_SIZE) |
| Top address of System RAM. | |
| #define | ROM_BASE 0xf6000000 |
| Base address of ROM. | |
| #define | ROM_SIZE 0x00008000 |
| Size of ROM (32 kB) | |
| #define | ROM_TOP (ROM_BASE + ROM_SIZE) |
| Top address of ROM. | |
Communications Controller | |
Communications controller definitions Datasheet, section 8 | |
| #define | CC_BASE_UNBUF 0x10000000 |
| Communications controller base address: writes unbuffered. | |
| #define | CC_BASE_BUF 0x20000000 |
| Communications controller base address: writes buffered. | |
| #define | CC_BASE CC_BASE_BUF |
| Communications controller base address. | |
| #define | CC_TCR INT_AT(0x00) |
| Comms controller r0: Transmit control register offset. | |
| #define | CC_TXDATA INT_AT(0x04) |
| Comms controller r1: Transmit data register offset. | |
| #define | CC_TXKEY INT_AT(0x08) |
| Comms controller r2: Transmit key register offset. | |
| #define | CC_RSR INT_AT(0x0c) |
| Comms controller r3: Receive status register offset. | |
| #define | CC_RXDATA INT_AT(0x10) |
| Comms controller r4: Receive data register offset. | |
| #define | CC_RXKEY INT_AT(0x14) |
| Comms controller r5: Receive key register offset. | |
| #define | CC_SAR INT_AT(0x18) |
| Comms controller r6: Source address register offset. | |
| #define | CC_TEST INT_AT(0x1c) |
| Comms controller r7: Test register offset. | |
Timer Controller | |
Timer controller definitions Datasheet, section 6 | |
| #define | TIMER_BASE_UNBUF 0x11000000 |
| Timer controller base address: writes unbuffered. | |
| #define | TIMER_BASE_BUF 0x21000000 |
| Timer controller base address: writes buffered. | |
| #define | TIMER_BASE TIMER_BASE_BUF |
| Timer controller base address. | |
| #define | TIMER_OFFSET 0x20 |
| Offset of second timer. | |
| #define | TIMER1_BASE (TIMER_BASE) |
| Timer 1 base address. | |
| #define | TIMER2_BASE (TIMER_BASE + TIMER_OFFSET) |
| Timer 2 base address. | |
| #define | TC_LOAD INT_AT(0x00) |
| Timer register r0: Load value register offset. | |
| #define | TC_COUNT INT_AT(0x04) |
| Timer register r1: Current count register offset. | |
| #define | TC_CONTROL INT_AT(0x08) |
| Timer register r2: Control register offset. | |
| #define | TC_INT_CLR INT_AT(0x0c) |
| Timer register r3: Interrupt clear register offset. | |
| #define | TC_RAW_INT INT_AT(0x10) |
| Timer register r4: Raw interrupt status register offset. | |
| #define | TC_MASK_INT INT_AT(0x14) |
| Timer register r5: Masked interrupt status register offset. | |
| #define | TC_BG_LOAD INT_AT(0x18) |
| Timer register r6: Background load value register offset. | |
| #define | T1_LOAD INT_AT(0x00) |
Timer 1 load value: == TC_LOAD | |
| #define | T1_COUNT INT_AT(0x04) |
Timer 1 current count: == TC_COUNT | |
| #define | T1_CONTROL INT_AT(0x08) |
Timer 1 control: == TC_CONTROL | |
| #define | T1_INT_CLR INT_AT(0x0c) |
Timer 1 interrupt clear: == TC_INT_CLR | |
| #define | T1_RAW_INT INT_AT(0x10) |
Timer 1 raw interrupt status: == TC_RAW_INT | |
| #define | T1_MASK_INT INT_AT(0x14) |
Timer 1 masked interrupt status: == TC_MASK_IN | |
| #define | T1_BG_LOAD INT_AT(0x18) |
Timer 1 background load: == TC_BG_LOAD | |
| #define | T2_LOAD INT_AT(0x20) |
Timer 2 load value: == TC_LOAD + TIMER_OFFSET | |
| #define | T2_COUNT INT_AT(0x24) |
Timer 2 current count: == TC_COUNT + TIMER_OFFSET | |
| #define | T2_CONTROL INT_AT(0x28) |
Timer 2 control: == TC_CONTROL + TIMER_OFFSET | |
| #define | T2_INT_CLR INT_AT(0x2c) |
Timer 2 interrupt clear: == TC_INT_CLR + TIMER_OFFSET | |
| #define | T2_RAW_INT INT_AT(0x30) |
Timer 2 raw interrupt status: == TC_RAW_INT + TIMER_OFFSET | |
| #define | T2_MASK_INT INT_AT(0x34) |
Timer 2 masked interrupt status: == TC_MASK_INT + TIMER_OFFSET | |
| #define | T2_BG_LOAD INT_AT(0x38) |
Timer 2 background load: == TC_BG_LOAD + TIMER_OFFSET | |
DMA Controller | |
DMA controller definitions Datasheet, section 7 | |
| #define | DMA_BASE_UNBUF 0x30000000 |
| DMA controller base address: writes unbuffered. | |
| #define | DMA_BASE_BUF 0x40000000 |
| DMA controller base address: writes buffered. | |
| #define | DMA_BASE DMA_BASE_BUF |
| DMA controller base address. | |
| #define | DMA_ADRS INT_AT(0x04) |
| DMA controller r1: system address register offset. | |
| #define | DMA_ADRT INT_AT(0x08) |
| DMA controller r2: TCM address register offset. | |
| #define | DMA_DESC INT_AT(0x0c) |
| DMA controller r3: transfer description register offset. | |
| #define | DMA_CTRL INT_AT(0x10) |
| DMA controller r4: control register offset. | |
| #define | DMA_STAT INT_AT(0x14) |
| DMA controller r5: status register offset. | |
| #define | DMA_GCTL INT_AT(0x18) |
| DMA controller r6: global control register offset. | |
| #define | DMA_CRCC INT_AT(0x1c) |
| DMA controller r7: calculated CRC register offset. | |
| #define | DMA_CRCR INT_AT(0x20) |
| DMA controller r8: received CRC register offset. | |
| #define | DMA_TMTV INT_AT(0x24) |
| DMA controller r9: timeout value register offset. | |
| #define | DMA_SCTL INT_AT(0x28) |
| DMA controller r10: statistics counters control register offset. | |
| #define | DMA_STAT0 INT_AT(0x40) |
| DMA controller statistics counter 0 offset. | |
| #define | DMA_STAT1 INT_AT(0x44) |
| DMA controller statistics counter 1 offset. | |
| #define | DMA_STAT2 INT_AT(0x48) |
| DMA controller statistics counter 2 offset. | |
| #define | DMA_STAT3 INT_AT(0x4c) |
| DMA controller statistics counter 3 offset. | |
| #define | DMA_STAT4 INT_AT(0x50) |
| DMA controller statistics counter 4 offset. | |
| #define | DMA_STAT5 INT_AT(0x54) |
| DMA controller statistics counter 5 offset. | |
| #define | DMA_STAT6 INT_AT(0x58) |
| DMA controller statistics counter 6 offset. | |
| #define | DMA_STAT7 INT_AT(0x5c) |
| DMA controller statistics counter 7 offset. | |
| #define | DMA_AD2S INT_AT(0x104) |
| DMA controller r65: current system address register offset. | |
| #define | DMA_AD2T INT_AT(0x108) |
| DMA controller r66: current TCM address register offset. | |
| #define | DMA_DES2 INT_AT(0x10c) |
| DMA controller r67: current descriptor register offset. | |
| #define | DMA_CRCT INT_AT(0x180) |
| DMA controller: CRC polynomial base address offset. | |
Memory Controler | |
PL340 definitions Datasheet, section 13 | |
| #define | PL340_BASE_UNBUF 0xf0000000 |
| Memory controller base address: writes unbuffered. | |
| #define | PL340_BASE_BUF 0xe0000000 |
| Memory controller base address: writes buffered. | |
| #define | PL340_BASE PL340_BASE_BUF |
| Memory controller base address. | |
| #define | MC_STAT INT_AT(0x00) |
| Memory controller r0: status register offset. | |
| #define | MC_CMD INT_AT(0x04) |
| Memory controller r1: command register offset. | |
| #define | MC_DIRC INT_AT(0x08) |
| Memory controller r2: direct command register offset. | |
| #define | MC_MCFG INT_AT(0x0c) |
| Memory controller r3: memory configuration register offset. | |
| #define | MC_REFP INT_AT(0x10) |
| Memory controller r4: refresh period register offset. | |
| #define | MC_CASL INT_AT(0x14) |
| Memory controller r5: CAS latency register offset. | |
| #define | MC_DQSS INT_AT(0x18) |
| Memory controller r6: write to DQS time register offset. | |
| #define | MC_MRD INT_AT(0x1c) |
| Memory controller r7: mode register command time register offset. | |
| #define | MC_RAS INT_AT(0x20) |
| Memory controller r8: RAS to precharge delay register offset. | |
| #define | MC_RC INT_AT(0x24) |
| Memory controller r9: active bank x to active bank x delay register offset. | |
| #define | MC_RCD INT_AT(0x28) |
| Memory controller r10: RAS to CAS minimum delay register offset. | |
| #define | MC_RFC INT_AT(0x2c) |
| Memory controller r11: auto-refresh command time register offset. | |
| #define | MC_RP INT_AT(0x30) |
| Memory controller r12: precharge to RAS delay register offset. | |
| #define | MC_RRD INT_AT(0x34) |
| Memory controller r13: active bank x to active bank y delay register offset. | |
| #define | MC_WR INT_AT(0x38) |
| Memory controller r14: write to precharge delay register offset. | |
| #define | MC_WTR INT_AT(0x3c) |
| Memory controller r15: write to read delay register offset. | |
| #define | MC_XP INT_AT(0x40) |
| Memory controller r16: exit power-down command time register offset. | |
| #define | MC_XSR INT_AT(0x44) |
| Memory controller r17: exit self-refresh command time register offset. | |
| #define | MC_ESR INT_AT(0x48) |
| Memory controller r18: self-refresh command time register offset. | |
| #define | MC_MCFG2 INT_AT(0x4c) |
| #define | MC_MCFG3 INT_AT(0x50) |
| #define | MC_QOS0 INT_AT(0x100) |
| Memory controller QOS settings 0. | |
| #define | MC_QOS1 INT_AT(0x104) |
| Memory controller QOS settings 1. | |
| #define | MC_QOS2 INT_AT(0x108) |
| Memory controller QOS settings 2. | |
| #define | MC_QOS3 INT_AT(0x10c) |
| Memory controller QOS settings 3. | |
| #define | MC_QOS4 INT_AT(0x110) |
| Memory controller QOS settings 4. | |
| #define | MC_QOS5 INT_AT(0x114) |
| Memory controller QOS settings 5. | |
| #define | MC_QOS6 INT_AT(0x118) |
| Memory controller QOS settings 6. | |
| #define | MC_QOS7 INT_AT(0x11c) |
| Memory controller QOS settings 7. | |
| #define | MC_QOS8 INT_AT(0x120) |
| Memory controller QOS settings 8. | |
| #define | MC_QOS9 INT_AT(0x124) |
| Memory controller QOS settings 9. | |
| #define | MC_QOS10 INT_AT(0x128) |
| Memory controller QOS settings 10. | |
| #define | MC_QOS11 INT_AT(0x12c) |
| Memory controller QOS settings 11. | |
| #define | MC_QOS12 INT_AT(0x130) |
| Memory controller QOS settings 12. | |
| #define | MC_QOS13 INT_AT(0x134) |
| Memory controller QOS settings 13. | |
| #define | MC_QOS14 INT_AT(0x138) |
| Memory controller QOS settings 14. | |
| #define | MC_QOS15 INT_AT(0x13c) |
| Memory controller QOS settings 15. | |
| #define | MC_CCFG0 INT_AT(0x200) |
| Memory controller chip 0 configuration. | |
| #define | MC_CCFG1 INT_AT(0x204) |
| Memory controller chip 1 configuration. | |
| #define | MC_CCFG2 INT_AT(0x208) |
| Memory controller chip 2 configuration. | |
| #define | MC_CCFG3 INT_AT(0x20c) |
| Memory controller chip 3 configuration. | |
| #define | DLL_STATUS INT_AT(0x300) |
| Memory controller DLL test and status inputs register offset. | |
| #define | DLL_CONFIG0 INT_AT(0x304) |
| Memory controller DLL test and control outputs register offset. | |
| #define | DLL_CONFIG1 INT_AT(0x308) |
| Memory controller DLL fine-tune control register offset. | |
Router Controller | |
Router definitions Datasheet, section 10 | |
| #define | RTR_BASE_UNBUF 0xf1000000 |
| Router base address: writes unbuffered. | |
| #define | RTR_BASE_BUF 0xe1000000 |
| Router base address: writes buffered. | |
| #define | RTR_BASE RTR_BASE_BUF |
| Router base address. | |
| #define | RTR_CONTROL INT_AT(0x00) |
| Router controller r0: control register offset. | |
| #define | RTR_STATUS INT_AT(0x04) |
| Router controller r1: status register offset. | |
| #define | RTR_EHDR INT_AT(0x08) |
| Router controller r2: error header register offset. | |
| #define | RTR_EKEY INT_AT(0x0c) |
| Router controller r3: error key word register offset. | |
| #define | RTR_EDAT INT_AT(0x10) |
| Router controller r4: error payload word register offset. | |
| #define | RTR_ESTAT INT_AT(0x14) |
| Router controller r5: error status register offset. | |
| #define | RTR_DHDR INT_AT(0x18) |
| Router controller r6: dump header register offset. | |
| #define | RTR_DKEY INT_AT(0x1c) |
| Router controller r7: dump key word register offset. | |
| #define | RTR_DDAT INT_AT(0x20) |
| Router controller r8: dump payload word register offset. | |
| #define | RTR_DLINK INT_AT(0x24) |
| Router controller r9: dump outputs register offset. | |
| #define | RTR_DSTAT INT_AT(0x28) |
| Router controller r10: dump status register offset. | |
| #define | RTR_DGEN INT_AT(0x2c) |
| Router controller r11: diagnostic counter enable register offset. | |
| #define | RTR_FR INT_AT(0x84) |
| Router controller r33: fixed route packet route register offset. | |
| #define | RTR_DGF0 INT_AT(0x200) |
| Router controller diagnostic filter 0. | |
| #define | RTR_DGF1 INT_AT(0x204) |
| Router controller diagnostic filter 1. | |
| #define | RTR_DGF2 INT_AT(0x208) |
| Router controller diagnostic filter 2. | |
| #define | RTR_DGF3 INT_AT(0x20c) |
| Router controller diagnostic filter 3. | |
| #define | RTR_DGF4 INT_AT(0x210) |
| Router controller diagnostic filter 4. | |
| #define | RTR_DGF5 INT_AT(0x214) |
| Router controller diagnostic filter 5. | |
| #define | RTR_DGF6 INT_AT(0x218) |
| Router controller diagnostic filter 6. | |
| #define | RTR_DGF7 INT_AT(0x21c) |
| Router controller diagnostic filter 7. | |
| #define | RTR_DGF8 INT_AT(0x220) |
| Router controller diagnostic filter 8. | |
| #define | RTR_DGF9 INT_AT(0x224) |
| Router controller diagnostic filter 9. | |
| #define | RTR_DGF10 INT_AT(0x228) |
| Router controller diagnostic filter 10. | |
| #define | RTR_DGF11 INT_AT(0x22c) |
| Router controller diagnostic filter 11. | |
| #define | RTR_DGF12 INT_AT(0x230) |
| Router controller diagnostic filter 12. | |
| #define | RTR_DGF13 INT_AT(0x234) |
| Router controller diagnostic filter 13. | |
| #define | RTR_DGF14 INT_AT(0x238) |
| Router controller diagnostic filter 14. | |
| #define | RTR_DGF15 INT_AT(0x23c) |
| Router controller diagnostic filter 15. | |
| #define | RTR_DGC0 INT_AT(0x300) |
| Router controller diagnostic counter 0. | |
| #define | RTR_DGC1 INT_AT(0x304) |
| Router controller diagnostic counter 1. | |
| #define | RTR_DGC2 INT_AT(0x308) |
| Router controller diagnostic counter 2. | |
| #define | RTR_DGC3 INT_AT(0x30c) |
| Router controller diagnostic counter 3. | |
| #define | RTR_DGC4 INT_AT(0x310) |
| Router controller diagnostic counter 4. | |
| #define | RTR_DGC5 INT_AT(0x314) |
| Router controller diagnostic counter 5. | |
| #define | RTR_DGC6 INT_AT(0x318) |
| Router controller diagnostic counter 6. | |
| #define | RTR_DGC7 INT_AT(0x31c) |
| Router controller diagnostic counter 7. | |
| #define | RTR_DGC8 INT_AT(0x320) |
| Router controller diagnostic counter 8. | |
| #define | RTR_DGC9 INT_AT(0x324) |
| Router controller diagnostic counter 9. | |
| #define | RTR_DGC10 INT_AT(0x328) |
| Router controller diagnostic counter 10. | |
| #define | RTR_DGC11 INT_AT(0x32c) |
| Router controller diagnostic counter 11. | |
| #define | RTR_DGC12 INT_AT(0x330) |
| Router controller diagnostic counter 12. | |
| #define | RTR_DGC13 INT_AT(0x334) |
| Router controller diagnostic counter 13. | |
| #define | RTR_DGC14 INT_AT(0x338) |
| Router controller diagnostic counter 14. | |
| #define | RTR_DGC15 INT_AT(0x33c) |
| Router controller diagnostic counter 15. | |
| #define | RTR_TST1 INT_AT(0xf00) |
| Router controller: hardware test register offset. | |
| #define | RTR_TST2 INT_AT(0xf04) |
| Router controller: hardware test (CAM input key) register offset. | |
| #define | P2P_TABLE_SIZE 8192 |
| Peer-to-peer table size (entries) | |
| #define | MC_TABLE_SIZE 1024 |
| Multicast table size (entries) | |
| #define | MC_RAM_WIDTH (NUM_CPUS + NUM_LINKS) |
| Multicast route select width (bits) | |
| #define | MC_RAM_MASK ((1 << MC_RAM_WIDTH) - 1) |
| Multicast route select mask. | |
| #define | MC_CORE_ROUTE(x) (1 << ((x) + NUM_LINKS)) |
| Multicast route to CPU core. | |
| #define | MC_LINK_ROUTE(x) (1 << (x)) |
| Multicast route to SpiNNaker link. | |
| #define | P2P_EPW 8 |
| Entries per word. | |
| #define | P2P_LOG_EPW 3 |
| Log of entries per word. | |
| #define | P2P_EMASK (P2P_EPW-1) |
| Entries per word - 1. | |
| #define | P2P_BPE 3 |
| Bits per entry. | |
| #define | P2P_BMASK 7 |
| Mask for entry bits. | |
| #define | P2P_INIT 0x00db6db6 |
| P2P table initial entry entry; all thrown away. | |
| #define | RTR_MCRAM_BASE (RTR_BASE + 0x00004000) |
| Router controller: multicast route table base address. | |
| #define | RTR_MCRAM_TOP (RTR_MCRAM_BASE + MC_TABLE_SIZE * 4) |
| Router controller: multicast route table top address. | |
| #define | RTR_MCKEY_BASE (RTR_BASE + 0x00008000) |
| Router controller: multicast key table base address (write only) | |
| #define | RTR_MCKEY_TOP (RTR_MCKEY_BASE + MC_TABLE_SIZE * 4) |
| Router controller: multicast key table top address. | |
| #define | RTR_MCMASK_BASE (RTR_BASE + 0x0000c000) |
| Router controller: multicast mask table base address (write only) | |
| #define | RTR_MCMASK_TOP (RTR_MCMASK_BASE + MC_TABLE_SIZE * 4) |
| Router controller: multicast mask table top address. | |
| #define | RTR_P2P_BASE (RTR_BASE + 0x00010000) |
| Router controller: peer-to-peer table base address. | |
| #define | RTR_P2P_TOP (RTR_P2P_BASE + P2P_TABLE_SIZE * 4) |
| Router controller: peer-to-peer table top address. | |
| #define | MC_CAM_WIDTH 32 |
| Multicast routing table CAM width (bits) | |
PLL Definitions | |
Clock & PLL definitions | |
| #define | CLK_XTAL_MHZ 10 |
| Crystal frequency (MHz) | |
| #define | PLL_260 0x0007011a |
| PLL 260 MHz clock (assuming 10 MHz input, CLK_XTAL_MHZ) | |
| #define | PLL_300 0x0007011e |
| PLL 300 MHz clock (assuming 10 MHz input, CLK_XTAL_MHZ) | |
| #define | PLL_330 0x00070121 |
| PLL 330 MHz clock (assuming 10 MHz input, CLK_XTAL_MHZ) | |
| #define | PLL_400 0x00070128 |
| PLL 400 MHz clock (assuming 10 MHz input, CLK_XTAL_MHZ) | |
| #define | PLL_LOCK_TIME 80 |
| Time for PLL to lock (μs) | |
| #define | PLL_CLK_SEL 0x809488a5 |
CPSR Miscellany | |
ARM CPSR bits | |
| #define | MODE_USER 0x10 |
| Bits in the ARM Current Program Status Register. | |
| #define | MODE_FIQ 0x11 |
| Fast interrupt mode. | |
| #define | MODE_IRQ 0x12 |
| Interrupt mode. | |
| #define | MODE_SVC 0x13 |
| Supervisor mode. | |
| #define | MODE_ABT 0x17 |
| Abort mode. | |
| #define | MODE_UND 0x1b |
| Undefined mode. | |
| #define | MODE_SYS 0x1f |
| System mode. | |
| #define | THUMB_BIT 0x20 |
| Thumb instruction mode flag. | |
| #define | IMASK_IRQ 0x80 |
| Mask: IRQ enabled. | |
| #define | IMASK_FIQ 0x40 |
| Mask: FIQ enabled. | |
| #define | IMASK_ALL 0xc0 |
Enumerations | |
SpiNNaker Packets | |
SpiNNaker packet definitions | |
| enum | { PKT_MC = 0x00000000 , PKT_P2P = 0x00400000 , PKT_NN = 0x00800000 , PKT_NND = 0x00a00000 , PKT_FR = 0x00c00000 , PKT_PL = 0x00020000 , PKT_MC_PL = (PKT_MC + PKT_PL) , PKT_P2P_PL = (PKT_P2P + PKT_PL) , PKT_NN_PL = (PKT_NN + PKT_PL) , PKT_FR_PL = (PKT_FR + PKT_PL) } |
| Bits in SpiNNaker packet control word. More... | |
Variables | |
Memory Map | |
Handy constants that point to hardware | |
| static volatile uint *const | cc = (uint *) CC_BASE |
| Communications controller. | |
| static volatile uint *const | tc = (uint *) TIMER_BASE |
| Timer controller. | |
| static volatile uint *const | tc1 = (uint *) TIMER1_BASE |
| Timer 1. | |
| static volatile uint *const | tc2 = (uint *) TIMER2_BASE |
| Timer 2. | |
| static volatile uint *const | vic = (uint *) VIC_BASE_UNBUF |
| Vectored interrupt controller. | |
| static volatile uint *const | dma = (uint *) DMA_BASE |
| DMA controller. | |
| static volatile uint *const | sc = (uint *) SYSCTL_BASE |
| System controller. | |
| static volatile uint *const | rtr = (uint *) RTR_BASE |
| Router controller. | |
| static volatile uint *const | er = (uint *) ETH_REGS |
| Ethernet controller. | |
| static volatile uint *const | mc = (uint *) PL340_BASE |
| PL340 memory controller. | |
| static volatile uint *const | wd = (uint *) WDOG_BASE |
| Watchdog controller. | |
| static uint *const | sdram = (uint *) SDRAM_BASE |
| Base address of SDRAM. | |
| static uint *const | sysram = (uint *) SYSRAM_BASE |
| Base address of System RAM. | |
| static uint *const | rtr_ram = (uint *) RTR_MCRAM_BASE |
| Router memory. | |
| static uint *const | rtr_key = (uint *) RTR_MCKEY_BASE |
| Router key array. | |
| static uint *const | rtr_mask = (uint *) RTR_MCMASK_BASE |
| Router mask array. | |
| static uint *const | rtr_p2p = (uint *) RTR_P2P_BASE |
| Router peer-to-peer table. | |
| static uchar *const | eth_tx_ram = (uchar *) ETH_TX_BASE |
| Ethernet transmit memory. | |
| static uchar *const | eth_rx_ram = (uchar *) ETH_RX_BASE |
| Ethernet receive memory. | |
| static uint *const | eth_rx_desc = (uint *) ETH_RX_DESC_RAM |
| Ethernet receive descriptor array. | |
VIC | |
Vectored interrupt controller (VIC) definitions Datasheet, section 5 | |
| #define | VIC_BASE_UNBUF 0x1f000000 |
| Vectored interrupt controller base address: writes unbuffered. | |
| #define | VIC_BASE_BUF 0x2f000000 |
| Vectored interrupt controller base address: writes buffered. | |
| #define | VIC_BASE VIC_BASE_BUF |
| Vectored interrupt controller base address. | |
| #define | VIC_IRQST INT_AT(0x00) |
| VIC register r0: IRQ status register offset. | |
| #define | VIC_FIQST INT_AT(0x04) |
| VIC register r1: FIQ status register offset. | |
| #define | VIC_RAW INT_AT(0x08) |
| VIC register r2: Raw interrupt status register offset. | |
| #define | VIC_SELECT INT_AT(0x0c) |
| VIC register r3: Interrupt type select register offset. | |
| #define | VIC_ENABLE INT_AT(0x10) |
| VIC register r4: Interrupt enable register offset. | |
| #define | VIC_DISABLE INT_AT(0x14) |
| VIC register r5: Interrupt disable register offset. | |
| #define | VIC_SOFT_SET INT_AT(0x18) |
| VIC register r6: Soft interrupt register offset. | |
| #define | VIC_SOFT_CLR INT_AT(0x1c) |
| VIC register r7: Soft interrupt clear register offset. | |
| #define | VIC_PROTECT INT_AT(0x20) |
| VIC register r8: Protected-mode register offset. | |
| #define | VIC_VADDR INT_AT(0x30) |
| VIC register r9: Current vector address register offset. | |
| #define | VIC_DEFADDR INT_AT(0x34) |
| VIC register r10: Default vector address register offset. | |
| #define | VIC_ADDR INT_AT(0x100) |
| VIC: Vector address register base. | |
| #define | VIC_ADDR0 INT_AT(0x100) |
| VIC: Vector address register 0 offset. | |
| #define | VIC_ADDR1 INT_AT(0x104) |
| VIC: Vector address register 1 offset. | |
| #define | VIC_ADDR2 INT_AT(0x108) |
| VIC: Vector address register 2 offset. | |
| #define | VIC_ADDR3 INT_AT(0x10c) |
| VIC: Vector address register 3 offset. | |
| #define | VIC_ADDR4 INT_AT(0x110) |
| VIC: Vector address register 4 offset. | |
| #define | VIC_ADDR5 INT_AT(0x114) |
| VIC: Vector address register 5 offset. | |
| #define | VIC_ADDR6 INT_AT(0x118) |
| VIC: Vector address register 6 offset. | |
| #define | VIC_ADDR7 INT_AT(0x11c) |
| VIC: Vector address register 7 offset. | |
| #define | VIC_ADDR8 INT_AT(0x120) |
| VIC: Vector address register 8 offset. | |
| #define | VIC_ADDR9 INT_AT(0x124) |
| VIC: Vector address register 9 offset. | |
| #define | VIC_ADDR10 INT_AT(0x128) |
| VIC: Vector address register 10 offset. | |
| #define | VIC_ADDR11 INT_AT(0x12c) |
| VIC: Vector address register 11 offset. | |
| #define | VIC_ADDR12 INT_AT(0x130) |
| VIC: Vector address register 12 offset. | |
| #define | VIC_ADDR13 INT_AT(0x134) |
| VIC: Vector address register 13 offset. | |
| #define | VIC_ADDR14 INT_AT(0x138) |
| VIC: Vector address register 14 offset. | |
| #define | VIC_ADDR15 INT_AT(0x13c) |
| VIC: Vector address register 15 offset. | |
| #define | VIC_CNTL INT_AT(0x200) |
| VIC: Vector control register base. | |
| #define | VIC_CNTL0 INT_AT(0x200) |
| VIC: Vector control register 0 offset. | |
| #define | VIC_CNTL1 INT_AT(0x204) |
| VIC: Vector control register 1 offset. | |
| #define | VIC_CNTL2 INT_AT(0x208) |
| VIC: Vector control register 2 offset. | |
| #define | VIC_CNTL3 INT_AT(0x20c) |
| VIC: Vector control register 3 offset. | |
| #define | VIC_CNTL4 INT_AT(0x210) |
| VIC: Vector control register 4 offset. | |
| #define | VIC_CNTL5 INT_AT(0x214) |
| VIC: Vector control register 5 offset. | |
| #define | VIC_CNTL6 INT_AT(0x218) |
| VIC: Vector control register 6 offset. | |
| #define | VIC_CNTL7 INT_AT(0x21c) |
| VIC: Vector control register 7 offset. | |
| #define | VIC_CNTL8 INT_AT(0x220) |
| VIC: Vector control register 8 offset. | |
| #define | VIC_CNTL9 INT_AT(0x224) |
| VIC: Vector control register 9 offset. | |
| #define | VIC_CNTL10 INT_AT(0x228) |
| VIC: Vector control register 10 offset. | |
| #define | VIC_CNTL11 INT_AT(0x22c) |
| VIC: Vector control register 11 offset. | |
| #define | VIC_CNTL12 INT_AT(0x230) |
| VIC: Vector control register 12 offset. | |
| #define | VIC_CNTL13 INT_AT(0x234) |
| VIC: Vector control register 13 offset. | |
| #define | VIC_CNTL14 INT_AT(0x238) |
| VIC: Vector control register 14 offset. | |
| #define | VIC_CNTL15 INT_AT(0x23c) |
| VIC: Vector control register 15 offset. | |
| enum | spinnaker_interrupt_numbers_e { WDOG_INT = 0 , SOFTWARE_INT = 1 , COMM_RX_INT = 2 , COMM_TX_INT = 3 , TIMER1_INT = 4 , TIMER2_INT = 5 , CC_RDY_INT = 6 , CC_RPE_INT = 7 , CC_RFE_INT = 8 , CC_TFL_INT = 9 , CC_TOV_INT = 10 , CC_TMT_INT = 11 , DMA_DONE_INT = 12 , DMA_ERR_INT = 13 , DMA_TO_INT = 14 , RTR_DIAG_INT = 15 , RTR_DUMP_INT = 16 , RTR_ERR_INT = 17 , CPU_INT = 18 , ETH_TX_INT = 19 , ETH_RX_INT = 20 , ETH_PHY_INT = 21 , SLOW_CLK_INT = 22 , CC_TNF_INT = 23 , CC_MC_INT = 24 , CC_P2P_INT = 25 , CC_NN_INT = 26 , CC_FR_INT = 27 , INT0_INT = 28 , INT1_INT = 29 , GPIO8_INT = 30 , GPIO9_INT = 31 } |
| Interrupt numbers for SpiNNaker. More... | |
System Controller | |
System controller definitions Datasheet, section 14 | |
| #define | SYSCTL_BASE_UNBUF 0xf2000000 |
| System controller base address: writes unbuffered. | |
| #define | SYSCTL_BASE_BUF 0xe2000000 |
| System controller base address: writes buffered. | |
| #define | SYSCTL_BASE SYSCTL_BASE_BUF |
| System controller base address. | |
| #define | SC_CODE 0x5ec00000 |
| Magic code for System Controller. | |
| #define | CHIP_ID_CODE 0x59111012 |
| Expected value of chip ID (see SC_CHIP_ID) | |
| #define | SC_CHIP_ID INT_AT(0x00) |
| System controller r0: chip ID register offset. | |
| #define | SC_CPU_DIS INT_AT(0x04) |
| System controller r1: CPU disable register offset. | |
| #define | SC_SET_IRQ INT_AT(0x08) |
| System controller r2: set CPU IRQ register offset. | |
| #define | SC_CLR_IRQ INT_AT(0x0c) |
| System controller r3: clear CPU IRQ register offset. | |
| #define | SC_SET_OK INT_AT(0x10) |
| System controller r4: set CPU OK register offset. | |
| #define | SC_CPU_OK INT_AT(0x10) |
| Alias for SC_SET_OK. | |
| #define | SC_CLR_OK INT_AT(0x14) |
| System controller r5: clear CPU OK register offset. | |
| #define | SC_SOFT_RST_L INT_AT(0x18) |
| System controller r6: CPU reset (level) register offset. | |
| #define | SC_HARD_RST_L INT_AT(0x1c) |
| System controller r7: node reset (level) register offset. | |
| #define | SC_SUBS_RST_L INT_AT(0x20) |
| System controller r8: subsystem reset (level) register offset. | |
| #define | SC_SOFT_RST_P INT_AT(0x24) |
| System controller r9: CPU reset (pulse) register offset. | |
| #define | SC_HARD_RST_P INT_AT(0x28) |
| System controller r10: node reset (pulse) register offset. | |
| #define | SC_SUBS_RST_P INT_AT(0x2c) |
| System controller r11: subsystem reset (pulse) register offset. | |
| #define | SC_RST_CODE INT_AT(0x30) |
| System controller r12: reset code register offset. | |
| #define | SC_MON_ID INT_AT(0x34) |
| System controller r13: monitor ID register offset. | |
| #define | SC_MISC_CTRL INT_AT(0x38) |
| System controller r14: miscellaneous control register offset. | |
| #define | GPIO_RES INT_AT(0x3c) |
| System controller r15: GPIO pull up/down enable register offset. | |
| #define | GPIO_PORT INT_AT(0x40) |
| System controller r16: GPIO port register offset. | |
| #define | GPIO_DIR INT_AT(0x44) |
| System controller r17: GPIO direction register offset. | |
| #define | GPIO_SET INT_AT(0x48) |
| System controller r18: GPIO set/read register offset. | |
| #define | GPIO_CLR INT_AT(0x4c) |
| System controller r19: GPIO clear register offset. | |
| #define | GPIO_READ INT_AT(0x48) |
| Alias for GPIO_SET. | |
| #define | SC_PLL1 INT_AT(0x50) |
| System controller r20: PLL1 frequency control register offset. | |
| #define | SC_PLL2 INT_AT(0x54) |
| System controller r21: PLL2 frequency control register offset. | |
| #define | SC_FLAG INT_AT(0x58) |
| System controller r22: set flags register offset. | |
| #define | SC_SETFLAG INT_AT(0x58) |
| Alias for SC_FLAG. | |
| #define | SC_CLRFLAG INT_AT(0x5c) |
| System controller r23: clear flags register offset. | |
| #define | SC_CLKMUX INT_AT(0x60) |
| System controller r24: clock multiplexer control register offset. | |
| #define | SC_SLEEP INT_AT(0x64) |
| System controller r25: CPU sleep status register offset. | |
| #define | SC_TS0 INT_AT(0x68) |
| System controller r26: temperature sensor 0 register offset. | |
| #define | SC_TS1 INT_AT(0x6c) |
| System controller r27: temperature sensor 1 register offset. | |
| #define | SC_TS2 INT_AT(0x70) |
| System controller r28: temperature sensor 2 register offset. | |
| #define | SC_ARB0 INT_AT(0x080) |
| System controller r32: arbiter 0 register offset. | |
| #define | SC_TAS0 INT_AT(0x100) |
| System controller r64: test-and-set 0 register offset. | |
| #define | SC_TAC0 INT_AT(0x180) |
| System controller r96: test-and-clear 0 register offset. | |
| #define | SC_LINK_DIS INT_AT(0x200) |
| System controller r128: link disable register offset. | |
| enum | { RST_POR = 0 , RST_WDT = 1 , RST_USER = 2 , RST_SW = 3 , RST_WDI = 4 } |
| Reset codes (see SC_RST_CODE) More... | |
Watchdog Controller | |
Watchdog timer definitions Datasheet, section 16 | |
| #define | WDOG_BASE_UNBUF 0xf3000000 |
| Watchdog timer base address: writes unbuffered. | |
| #define | WDOG_BASE_BUF 0xe3000000 |
| Watchdog timer base address: writes buffered. | |
| #define | WDOG_BASE WDOG_BASE_BUF |
| Watchdog timer base address. | |
| #define | WD_LOAD INT_AT(0x00) |
| Watchdog timer r0: count load register offset. | |
| #define | WD_COUNT INT_AT(0x04) |
| Watchdog timer r1: current count register offset. | |
| #define | WD_CTRL INT_AT(0x08) |
| Watchdog timer r2: control register offset. | |
| #define | WD_INTCLR INT_AT(0x0c) |
| Watchdog timer r3: interrupt clear register offset. | |
| #define | WD_RAWINT INT_AT(0x10) |
| Watchdog timer r4: raw interrupt status register offset. | |
| #define | WD_MSKINT INT_AT(0x14) |
| Watchdog timer r5: masked interrupt status register offset. | |
| #define | WD_LOCK INT_AT(0xc00) |
| Watchdog timer r6: lock register offset. | |
| #define | WD_CODE 0x1acce551 |
| Watchdog timer: magic. | |
| enum | { WD_INT_B = 1 , WD_RST_B = 2 } |
| Flags for WD_CTRL. More... | |
Ethernet Controller | |
Ethernet controller definitions Datasheet, section 15 | |
| #define | ETH_BASE_UNBUF 0xf4000000 |
| Ethernet controller base address: writes unbuffered. | |
| #define | ETH_BASE_BUF 0xe4000000 |
| Ethernet controller base address: writes buffered. | |
| #define | ETH_BASE ETH_BASE_BUF |
| Ethernet controller base address. | |
| #define | ETH_TX_BASE (ETH_BASE + 0x0000) |
| Ethernet transmit buffer: base address. | |
| #define | ETH_TX_SIZE 0x0600 |
| Ethernet transmit buffer: size. | |
| #define | ETH_TX_TOP (ETH_TX_BASE + ETH_TX_SIZE) |
| Ethernet transmit buffer: top address. | |
| #define | ETH_RX_BASE (ETH_BASE + 0x4000) |
| Ethernet receive buffer: base address. | |
| #define | ETH_RX_SIZE 0x0c00 |
| Ethernet receive buffer: size. | |
| #define | ETH_RX_TOP (ETH_RX_BASE + ETH_RX_SIZE) |
| Ethernet receive buffer: top address. | |
| #define | ETH_RX_DESC_RAM (ETH_BASE + 0x8000) |
| Ethernet receive descriptors: base address. | |
| #define | ETH_REGS (ETH_BASE + 0xc000) |
| Ethernet controller registers: base address. | |
| #define | ETH_CONTROL INT_AT(0x00) |
| Ethernet controller r0: general command register offset. | |
| #define | ETH_STATUS INT_AT(0x04) |
| Ethernet controller r1: general status register offset. | |
| #define | ETH_TX_LEN INT_AT(0x08) |
| Ethernet controller r2: transmit frame length register offset. | |
| #define | ETH_TX_CMD INT_AT(0x0c) |
| Ethernet controller r3: transmit command register offset. | |
| #define | ETH_RX_CMD INT_AT(0x10) |
| Ethernet controller r4: receive command register offset. | |
| #define | ETH_MAC_LO INT_AT(0x14) |
| Ethernet controller r5: MAC address low bytes register offset. | |
| #define | ETH_MAC_HI INT_AT(0x18) |
| Ethernet controller r6: MAC address high bytes register offset. | |
| #define | ETH_PHY_CTRL INT_AT(0x1c) |
| Ethernet controller r7: PHY control register offset. | |
| #define | ETH_INT_CLR INT_AT(0x20) |
| Ethernet controller r8: interrupt clear register offset. | |
| #define | ETH_RX_BUF_RP INT_AT(0x24) |
| Ethernet controller r9: receive frame buffer read pointer register offset. | |
| #define | ETH_RX_DESC_RP INT_AT(0x2c) |
| Ethernet controller r10: receive frame buffer write pointer register offset. | |
| enum | { ETH_TX_CLR = 0x01 , ETH_RX_CLR = 0x10 } |
| Bits in ETH_INT_CLR. More... | |
| enum | { PHY_CTRL_NRST = 1 , PHY_CTRL_DIN = 2 , PHY_CTRL_DOUT = 4 , PHY_CTRL_OE = 8 , PHY_CTRL_CLK = 16 } |
| Bits in ETH_PHY_CTRL. More... | |
GPIO | |
Bits in GPIO[31:0] | |
| #define | TOP_BIT 0x80000000 |
| The top bit of an unsigned integer. | |
| #define | LED_0 0x00000001 |
| enum | { SERIAL_NCS = 0x00000020 , SERIAL_CLK = 0x00000010 , SERIAL_SI = 0x00000008 , SERIAL_SO = 0x00000004 , SERIAL_OE = (SERIAL_NCS + SERIAL_CLK + SERIAL_SI) } |
| Serial ROM (GPIO[5:2]) | |
| enum | { SDRAM_TQ = TOP_BIT , SDRAM_DPD = (1 << 30) , SDRAM_HERE = (1 << 29) , JTAG_NTRST = (1 << 27) , JTAG_TMS = (1 << 26) , JTAG_TDI = (1 << 25) , JTAG_TCK = (1 << 24) } |
| Bits in GPIO_PORT, also on-chip SDRAM. | |
| enum | { JTAG_RTCK = (1 << 20) , JTAG_TDO = (1 << 19) , JTAG_INT = (1 << 15) } |
| Bits in SC_MISC_CTRL. More... | |
Header file describing SpiNNaker hardware.
| #define INT_AT | ( | t | ) | ((t) / 4) |
Converts a byte offset into a word offset.
| [in] | t | byte offset |
| #define MC_MCFG2 INT_AT(0x4c) |
| #define MC_MCFG3 INT_AT(0x50) |
Multicast route to CPU core.
| [in] | x | ID of core to route to |
Multicast route to SpiNNaker link.
| [in] | x | ID of link to route to |
| #define PLL_CLK_SEL 0x809488a5 |
CPU/2, SYS/3, RTR/3, MEM/1
| #define LED_0 0x00000001 |
LED on bit 0
| #define MODE_USER 0x10 |
Bits in the ARM Current Program Status Register.
https://www.keil.com/pack/doc/CMSIS/Core_A/html/group__CMSIS__CPSR.html User mode
| #define IMASK_ALL 0xc0 |
Mask: All interrupts enabled
Interrupt numbers for SpiNNaker.
| anonymous enum |
Reset codes (see SC_RST_CODE)
| Enumerator | |
|---|---|
| RST_POR | Power-on reset. |
| RST_WDT | Watchdog reset. |
| RST_USER | User reset. |
| RST_SW | Reset entire chip. |
| RST_WDI | Watchdog interrupt (monitor only) |
| anonymous enum |
Flags for WD_CTRL.
| Enumerator | |
|---|---|
| WD_INT_B | enable watchdog counter and interrupt |
| WD_RST_B | enable watchdog reset output |
| anonymous enum |
Bits in ETH_INT_CLR.
| Enumerator | |
|---|---|
| ETH_TX_CLR | Clear transmit interrupt request. |
| ETH_RX_CLR | Clear receive interrupt request. |
| anonymous enum |
Bits in ETH_PHY_CTRL.
| Enumerator | |
|---|---|
| PHY_CTRL_NRST | PHY reset (active low) |
| PHY_CTRL_DIN | SMI data input. |
| PHY_CTRL_DOUT | SMI data output. |
| PHY_CTRL_OE | SMI data output enable. |
| PHY_CTRL_CLK | SMI clock (active rising) |
| anonymous enum |
Bits in SpiNNaker packet control word.
| anonymous enum |
Bits in SC_MISC_CTRL.
| Enumerator | |
|---|---|
| JTAG_RTCK | read value on JTAG_RTCK pin |
| JTAG_TDO | read value on JTAG_TDO pin |
| JTAG_INT | select on-chip (1) or off-chip (0) control of JTAG pins |