- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hello,
I am trying to read data from the global memory using a pointer. This memory address pointer (64 bits) is an output from my master module and tries to read data from the slave. The values stores in global memory are of type integers and performed by the host. When I try to read this data from the global memory the Avalon memory module always reads 512 bits of data from the memory address specified. How do I get the integer data should I be reading the most significant 32 bits of the readdata signal or least significant 32 bits of the data signal? Also if I store 16 such integers in the global memory from the host then can I read all of them in just one read (also by setting burstcount as 1) ? Now, if I increase the burst count then will I get burstcount*512 bits of data? ie, if burstcount = 4; will I get 4 chunks of 512 bits data. Therefore reading a total of 4*512 bits = 2048 bits (or 64 integers). I needed a clearer picture of this transfer. I went through the Avalon Interface Specification document but wasn't able to find this information explicitly mentioned. Thanks in advance.- Tags:
- avalon
Link Copied
2 Replies
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
The Avalon spec doesn't specify when a burst request is generated. It is only concerned with how it is implemented. In most cases you can expect burst requests when A) A CPU is filling up a cache line, B When a DMA controller is being used, C) If you are implementing a bus like PCIe or RapidIO. For A) to happen, the CPU must have cache, like the ARM in an SoC chip or higher end NIOS soft processors. The free NIOS doesn't have a cache. For B, the software, either a device driver or bare metal, must set up a DMA request. In that case, the burst will depend on how the DMA request is made. In case C), the other end may or may not request a burst transfer.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
--- Quote Start --- The values stores in global memory are of type integers and performed by the host. When I try to read this data from the global memory the Avalon memory module always reads 512 bits of data from the memory address specified. How do I get the integer data should I be reading the most significant 32 bits of the readdata signal or least significant 32 bits of the data signal? --- Quote End --- You need to read from a 512-bit aligned address, and then extract the 32-bits from wherever you had written them. If you had written them at offset 0 of the 512-bit aligned address, then read them from the 32 LSB's. --- Quote Start --- Also if I store 16 such integers in the global memory from the host then can I read all of them in just one read (also by setting burstcount as 1) ? --- Quote End --- Yes. --- Quote Start --- Now, if I increase the burst count then will I get burstcount*512 bits of data? ie, if burstcount = 4; will I get 4 chunks of 512 bits data. Therefore reading a total of 4*512 bits = 2048 bits (or 64 integers). --- Quote End --- Yes. See Figure 3-8 in https://www.altera.com/content/dam/altera-www/global/en_us/pdfs/literature/manual/mnl_avalon_spec.pdf
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