Yes, a circular buffer can be created in memory. You need a read and write pointer and a note of where the top and bottom of the buffer are. When adding things, you write them at the write pointer then increment the pointer. If the pointer is at the top of the buffer, then it is wrapped round to the bottom. A check is also required with the write pointer to make sure it doesn't overflow. When reading, the read pointer is checked first to see if it == write pointer: if it is, then the buffer is empty and nothing cna be read. Otherwise, read the data at pointer then increment.
If reads and writes are allowed to occur in the same cycle, then a dual-port RAM is required. Otherwise, there must be a way to hold off accesses and multiplex onto a single port.
It is really one way of implementing a FIFO. The pointers can be CPU registers in a software implementation, or vectors of flipflops in a hardware implementation.