I have an array of 2048-bits and i would want to store the incoming bits from 0 - 2047 in ascending bit order as it comes in FPGA on each rising edge of the clock cycle.
Eg:
array[0] <= 1st bit
array[1] <= 2nd bit
...
..
array[2047] <= 2048 th bit.
i know it can be done in VHDL by array indexing like
array(index) <= incoming_bit.
However, is there any other better approach like using bitwise operations (shifting) to achieve this. (without array indexing method), so that it eventually reduces the routing complexity in the FPGA.
Block RAM
The most efficient way to overcome routing problem in the case you describe is probably to store the bit in a block ram.
If you use the array you describe with a code written in the correct way, it is probably already what the synthesizer has infered for you.
But if you have used a reset in your code to load your array with all '0', the synthesizer won't be able to infer a BlockRAM, thus producing something that will probably not be as efficient.
FIFO
If you always use the bits one after the other, and don't use it after that, you can use a FIFO (that will probably be implemented with a BlockRAM by the synthesizer).
The bits will be stored in the FIFO as they come in, and only the oldest not yet processed bit will be presented to you at the output of the FIFO.
If the position of the bit matters, you can have a 11 bits counter that increment each time you read a bit from the fifo, thus it will always reflect the position of the bit you are fetching out of the FIFO.
Hope this helps.