Thiết kế Synchronous FIFO

duongnt

Administrator
Staff member
9 Tháng ba 2017
32
17
8
36
1. Giới thiệu về FIFO.

- FIFO rất thường được sử dụng trong các thiết kế, chức nằng chủ yếu là bộ buffer lưu giữ tạm dữ liệu của bạn khi dữ liệu trước đó chưa xử lý xong. Ngoài ra còn được sử dụng để truyền nhận dữ liệu giữa 2 miền clock khác nhau (asynchronous FIFO). Trong hầu hết nhiều IP đều sử dụng FIFO

- Có hai loại FIFO cơ bản là : FIFO đồng bộ ( synchronous FIFO, read write sử dụng cùng clock) và FIFO bất đồng bộ( asynchronous FIFO, read clock khác write clock) . Trong bài này sẽ nói về thiết kế FIFO đồng bộ.

- Thông thường để thiết kế FIFO ta thường dùng thanh ghi (Regidters) được để lưu trữ dữ liệu, cách này chỉ áp dụng cho các FIFO cỡ nhỏ vì dùng nhiều thanh ghi rất tốn tài nguyên (resource). Một cách khác là thiết kế FIFO để điều khiển SRAM hai port.

2. Nguyên lý hoạt động FIFO

76.jpg


Figure 1 : Đọc FIFO.

- Theo Figure 1 trên ta thấy cứ sau một lần đoc thì con trỏ đọc của FIFO tăng lên, đến một lúc nào đó thì hai con trỏ ở cùng một vị trì như hình trên thì FIFO empty( FIFO không còn data). Lúc này wptr = rptr.
#Note : Nhưng ô màu đỏ chứa data chưa được đọc.

77.jpg


Figure 2 : Write FIFO.

- Trong Figure 2 trên ta thấy cứ sau một lần ghi thì con trỏ ghi của FIFO tăng lên, đến một lúc nào đó thì hai con trỏ ở cùng một vị trì như hình trên thì FIFO full. Lúc này wptr = rptr.

- Khi FIFO full con trỏ ghi = con trỏ đọc, khi FIFO empty thì con trỏ ghi cũng bằng con trỏ đọc. Vậy làm sao để biết lúc nào là full, lúc nào la empty ?

-Trong design này sử dụng một cách đơn giản là mở rộng con trỏ đọc và ghi thêm một bit.

Ví dụ : Nếu FIFO có chiều sâu là 8 ô nhớ thì chỉ cần 3 bit địa chỉ là đủ. Trong design này ta sẽ dùng 4 bit cho con trỏ đọc và ghi.( reg [3:0] wptr , reg [3:0] rptr).

  • Trong quá trinh ghi FIFO nếu thỏa điều kiện {~wptr[3],wptr[2:0]} = rptr thi kết luận FIFO full.
  • Còn trong quá trinh ghi FIFO nếu thỏa điều kiện wptr = rptr thi kết luận FIFO empty.
3. IN/OUT


78.jpg


Figure 3 : Inputs, outputs port



3. Logic Implementation

79.jpg


Figure 4 : Functional blocks.


Read control logic


80.jpg



Write control logic


81.jpg


Read/Write timing

82.jpg


Link code : http://www.mediafire.com/file/38wbunf32uuoqyw/sync_fifo.rar
 
  • Like
Reactions: Lu ROm