Programmable Devices
CPLDs, FPGAs, SoC FPGAs, Configuration, and Transceivers
20702 Discussions

Avalon MM Interface readdata signal [511:0]

Altera_Forum
Honored Contributor II
951 Views

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.
0 Kudos
2 Replies
Altera_Forum
Honored Contributor II
293 Views

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.

0 Kudos
Altera_Forum
Honored Contributor II
293 Views

 

--- 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
0 Kudos
Reply