IV. SOPC Builder Nios II 9 Avalon Mutex 10 Avalon Mailbox 9 10 / 9 v5.1.0 2005 5 v5.0.0 Nios II 2004 12 v1.0 10 v5.1.0 2005 5 v5.0.0 Altera Corporation IV 1
Quartus II Volume 5 IV 2 Altera Corporation
9. Avalon Mutex NII51020-5.1.0 Avalon Mutex Mutex Mutex Mutex Mutex Mutex Mutex Mutex Nios II Avalon Mutex Nios II Mutex SOPC Builder SOPC Builder Mutex 2 32 Avalon 9 1 9 1. Mutex R/W 31 16 15 1 0 0 mutex RW OWNER VALUE 1 reset RW RESET Altera Corporation 9 1
Mutex 1 Mutex ID VALUE 0x0000 Mutex Mutex mutex Avalon mutex mutex mutex mutex VALUE mutex OWNER OWNER ID OWNER VALUE Mutex OWNER reset RESET High 1 SOPC Builder Mutex SOPC Builder Nios II HALHardware Abstraction Layer Mutex SOPC Builder Initial Value VALUE Initial Value Initial Owner Initial Owner OWNER Initial Owner Mutex 9 2 Altera Corporation Quartus II Volume 5
Avalon Mutex Mutex Nios II Mutex Mutex HAL API ANSI C Mutex Nios II cpuid mutex OWNER Mutex Mutex altera_avalon_mutex_regs.h altera_avalon_mutex.h Mutex altera_avalon_mutex.c Mutex Mutex Mutex altera_avalon_mutex.h Mutex alt_mutex_dev 9 2 Mutex 9 2. Mutex ( / ) altera_avalon_mutex_open() altera_avalon_mutex_trylock() altera_avalon_mutex_lock() altera_avalon_mutex_unlock() MutexMutex Mutex Mutex Mutex Mutex Mutex Altera Corporation 9 3 Quartus II Volume 5
9 2. Mutex ( / ) altera_avalon_mutex_is_mine() altera_avalon_mutex_first_lock() CPU Mutex Mutex Mutex Mutex 9 5 Mutex API Mutex Mutex Mutex #include <altera_avalon_mutex.h> /* Mutex */ alt_mutex_dev* mutex = altera_avalon_mutex_open( /dev/mutex ); /* Mutex 1 */ altera_avalon_mutex_lock( mutex, 1 ); /* * */ /* */ altera_avalon_mutex_unlock( mutex ); 9 4 Altera Corporation Quartus II Volume 5
Avalon Mutex Mutex API Mutex API Altera Corporation 9 5 Quartus II Volume 5
altera_avalon_mutex_is_mine() altera_avalon_mutex_is_mine() : : ISR : : : : : int altera_avalon_mutex_is_mine(alt_mutex_dev* dev) <altera_avalon_mutex.h> dev Mutex CPU Mutex altera_avalon_mutex_is_mine() CPUMutex 9 6 Altera Corporation Quartus II Volume 5
altera_avalon_mutex_first_lock() altera_avalon_mutex_first_lock() : : ISR : : : : : int altera_avalon_mutex_first_lock(alt_mutex_dev* dev) <altera_avalon_mutex.h> dev Mutex Mutex 1 0 altera_avalon_mutex_first_lock() Mutex Altera Corporation 9 7 Quartus II Volume 5
altera_avalon_mutex_lock() altera_avalon_mutex_lock() : : ISR : : : void altera_avalon_mutex_lock(alt_mutex_dev* dev, alt_u32 value) : : <altera_avalon_mutex.h> dev Mutex value Mutex altera_avalon_mutex_lock()mutexmutex value 9 8 Altera Corporation Quartus II Volume 5
altera_avalon_mutex_open() altera_avalon_mutex_open() : : ISR : : : : : alt_mutex_dev* alt_hardware_mutex_open(const char* name) <altera_avalon_mutex.h> name Mutex Mutex Mutex NULL altera_avalon_mutex_open()mutex Altera Corporation 9 9 Quartus II Volume 5
altera_avalon_mutex_trylock() altera_avalon_mutex_trylock() : : ISR : : : : : int altera_avalon_mutex_trylock(alt_mutex_dev* dev, alt_u32 value) <altera_avalon_mutex.h> dev Mutex value Mutex Mutex Mutex altera_avalon_mutex_trylock() Mutex 1 9 10 Altera Corporation Quartus II Volume 5
altera_avalon_mutex_unlock() altera_avalon_mutex_unlock() : : ISR : : void altera_avalon_mutex_unlock(alt_mutex_dev* dev) <altera_avalon_mutex.h> : dev Mutex : : altera_avalon_mutex_unlock()mutex Mutex Mutex Altera Corporation 9 11 Quartus II Volume 5
altera_avalon_mutex_unlock() 9 12 Altera Corporation Quartus II Volume 5
10. Avalon Mailbox NII53001-5.1.0 Avalon Mailbox Mailbox 1 Mailbox Mutex Mailbox Mailbox Nios II Avalon Nios II Mailbox SOPC Builder SOPC Builder Mailbox 4 32 Avalon 10 1 10 1. Mutex R/W 31 16 15 1 0 0 mutex0 RW OWNER VALUE 1 reset0 RW RESET 2 mutex1 RW OWNER VALUE 3 reset1 RW RESET Altera Corporation 10 1
Mailbox 2 mutex 1 1 Mailbox Mutex Mailbox Mailbox 10 3 Mutex Avalon Mutex SOPC Builder Mailbox SOPC Builder Nios II HAL (Hardware Abstraction Layer) SOPC Builder Mailbox 1. Mailbox 2. SOPC Builder System Contents Mailbox RAM Mailbox Mailbox 3. SOPC Builder System Contents Mailbox Mailbox 4. SOPC Builder System Contents a. Mailbox b. Mailbox 10 2 Altera Corporation Quartus II Volume 5
Avalon Mailbox 5. Mailbox More <mailbox name> Settings Mailbox SOPC Builder GUI More <mailbox name> Settings Memory module - Mailbox Memory module 10 2 4 Shared Mailbox Memory Offset - Mailbox Mailbox Size (bytes) - Mailbox Nios II Mailbox 8 1 Mailbox Mailbox Size (bytes) 12 Mailbox Nios II Mailbox Mailbox Mailbox 1 Mailbox Mailbox 32 Mailbox FIFO Mailbox 1 Mailbox 1 Mailbox Altera Corporation 10 3 Quartus II Volume 5
Mailbox Mailbox Mailbox Mailbox altera_avalon_mailbox_regs.h altera_avalon_mailbox.h Mailbox altera_avalon_mailbox.c Mailbox Mailbox Mailbox altera_avalon_mailbox.h Mailbox alt_mailbox_dev 10 2 Mailbox 10 6 Mailbox API 10 2. Mailbox API altera_avalon_mailbox_close() altera_avalon_mailbox_get() altera_avalon_mailbox_open() altera_avalon_mailbox_pend() altera_avalon_mailbox_post() Mailbox Mailbox Mailbox Mailbox Mailbox 10 4 Altera Corporation Quartus II Volume 5
Avalon Mailbox Mailbox Mailbox Mailbox 2 2 Mailbox Mailbox Mailbox #include <stdio.h> #include "altera_avalon_mailbox.h" int main() alt_u32 message = 0; alt_mailbox_dev* send_dev, recv_dev; /* 2 Mailbox */ send_dev = altera_avalon_mailbox_open("/dev/mailbox_0"); recv_dev = altera_avalon_mailbox_open("/dev/mailbox_1"); while(1) { /* */ altera_avalon_mailbox_post(send_dev, message); } /* */ message = altera_avalon_mailbox_pend(recv_dev); return 0; } Altera Corporation 10 5 Quartus II Volume 5
Mailbox API Mailbox API Mailbox (API) 10 6 Altera Corporation Quartus II Volume 5
altera_avalon_mailbox_close() altera_avalon_mailbox_close() void altera_avalon_mailbox_close (alt_mailbox_dev* dev); ISR <altera_avalon_mailbox.h> dev Mailbox altera_avalon_mailbox_close() Mailbox Altera Corporation 10 7 Quartus II Volume 5
altera_avalon_mailbox_get() altera_avalon_mailbox_get() ISR alt_u32 altera_avalon_mailbox_get (alt_mailbox_dev* dev, int* err); <altera_avalon_mailbox.h> dev Mailbox err Mailbox 0 err 0 EWOULDBLOCK altera_avalon_mutex_get() 10 8 Altera Corporation Quartus II Volume 5
altera_avalon_mailbox_open() altera_avalon_mailbox_open() ISR alt_mailbox_dev* altera_avalon_mailbox_open (const char* name); <altera_avalon_mailbox.h> name Mailbox Mailbox Mailbox NULL altera_avalon_mailbox_open() Mailbox Altera Corporation 10 9 Quartus II Volume 5
altera_avalon_mailbox_pend() altera_avalon_mailbox_pend() ISR alt_u32 altera_avalon_mailbox_pend (alt_mailbox_dev* dev); <altera_avalon_mailbox.h> dev Mailbox altera_avalon_mailbox_pend() Mailbox 10 10 Altera Corporation Quartus II Volume 5
altera_avalon_mailbox_post() altera_avalon_mailbox_post() ISR int altera_avalon_mailbox_post (alt_mailbox_dev* dev, alt_u32 msg); <altera_avalon_mailbox.h> dev Mailbox msg 0 Mailbox EWOULDBLOCK altera_avalon_mailbox_post() Mailbox Altera Corporation 10 11 Quartus II Volume 5
altera_avalon_mailbox_post() 10 12 Altera Corporation Quartus II Volume 5