- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi there,
I've got quite a problem in understanding how the Altera Avalon Mailbox Core really works. There are two questions I cannot find an answer to: 1. How is the shared mailbox memory reserved? In addition to using dedicated memory (e.g. on-chip-memory) as mailbox memory, it is possible to use main memory (in my case sdram) for communication. The exact location of the part used by the mailbox is specified by an offset and size. In that case, how is it accomplished, that this part of memory is exclusively used as a shared memory for mailbox communication? How does the linker know not to use this part of (main) memory? I've looked into many files (like generated.x) and could not find any kind of memory reservation. 2. How does cache bypass work when accessing shared mailbox memory? While access to the registers of the mailbox core device uses the "io" instructions for bypassing the data cache, the read and write instructions the HAL implementation uses to access the shared memory are the normal ones. It all boils down to a 'stw' and a 'ldw' instruction. They also don't use the "bit32-bypass", as the address is the normal one (not 'or'-ed with 0x80000000). So how does the write-back of data to the shared memory work in this case? Any ideas / hints appreciated. I really want to know how this thing works (or is supposed to work). Thanks, JanLink Copied
1 Reply
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
<div class='quotetop'>QUOTE </div>
--- Quote Start --- I've got quite a problem in understanding how the Altera Avalon Mailbox Core really works.[/b] --- Quote End --- They are basically two mutexes... <div class='quotetop'>QUOTE </div> --- Quote Start --- 1. How is the shared mailbox memory reserved? In addition to using dedicated memory (e.g. on-chip-memory) as mailbox memory, it is possible to use main memory (in my case sdram) for communication. The exact location of the part used by the mailbox is specified by an offset and size. In that case, how is it accomplished, that this part of memory is exclusively used as a shared memory for mailbox communication? How does the linker know not to use this part of (main) memory? I've looked into many files (like generated.x) and could not find any kind of memory reservation.[/b] --- Quote End --- As long as I remember, there has been no memory reservation for the mailboxes. you have to supply them by hand. <div class='quotetop'>QUOTE </div> --- Quote Start --- 2. How does cache bypass work when accessing shared mailbox memory? While access to the registers of the mailbox core device uses the "io" instructions for bypassing the data cache, the read and write instructions the HAL implementation uses to access the shared memory are the normal ones. It all boils down to a 'stw' and a 'ldw' instruction. They also don't use the "bit32-bypass", as the address is the normal one (not 'or'-ed with 0x80000000). So how does the write-back of data to the shared memory work in this case?[/b] --- Quote End --- hmmm... I think it simply does not work... probably the only way to get data cache bypassing is to pass an addres at initialization which already has the bit31 enabled. Btw, we internally do not use Altera Mailboxes, because they tend to fix the communication paradigm in the hardware instead making it flexible... Instead, we prefer in general to used OS shared resources to get mutual exclusion between the various CPUs. For example, you can look at the fifo demo in the evidence literature page (http://www.evidence.eu.com/content/view/71/104/)... bye PJ
Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page