We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Hello,
I’m new to ARM architecture and was looking to get a better understanding of how it works. Most notably, the Cortex-A series and its DSP functionality.
When reading through ARM’s webpage, it often refers to “NEON-Advanced SIMD”, “NEON”, and “SIMD” capabilities. Looking at the ARM processor architecture, it looks like SIMD is applied to ARMv6 architecture and NEON-Advanced SIMD is applied to ARMv7 architecture. From what I understand, NEON is an improved version of SIMD instruction used in ARMv6. If that is true, does this mean “NEON-Advanced SIMD” includes all the features of the previous SIMD included in ARMv6, such as the SIMD and DSP extensions? Or is it a different entity in its own?
Regards,
Kenrick
They work on different registers and should really be considered as entirely separate.. The SIMD instructions are special integer instructions that work on the general purpose registers so one can do 4 byte or 2 halfword operations at time plus some other such special operations. The ARMv6 floating point unit just worked on floating point. ARMv7 introduced a new option - a floating point unit that also dealt with the new NEON operations - 8 byte, 4 short and 2 word parallel operations. The registers are 64 bits wide for floating point so in general in one cycle they can handle twice as much as one of the register SIMD operations. Plus it means the processor designers can stop worrying about them so much in loops as their results don't control branches anywhere near so often as say loop counters or tests on the general registers do. NEON is aimed at the same type tasks as the old SIMD but is practically always faster.
Thank you for the response. A follow-up question:
Does NEON apply only to the vector floating point unit (VFP), or does it also apply to the main ALU?
It doesn't include any SIMD type operations operating on the general registers, the NEON operations all operate on the same 64 bit registers as the floating point operations do.
If using NEON operations, are these operations happening in the main ALU or the VFP?
Is there a block diagram that shows how the 64-bit registers, the main ALU, the VFP interact with one another using SIMD?
If you do a google of 'ARM A7 pipeline' and click the images tab for instance you'll see that NEON and floating point are handled by the same pipeline. The NEON registers are the same as the floating point registers.
The ARMv7 architecture only says how things should appear to the outside world . It doesn't say how things will actually be implemented. It makes sense to separate the NEON and floating point from the arithmetic on the general registers.However if some designer made a good case for doing for instance division using a single shared unit in a particular processor design then that is very possibly what would be done.