Thiết kế Synchronous FIFO

Thảo luận trong 'PROJECT ASIC' bắt đầu bởi duongnt, 22 Tháng tám 2017.

Chia sẻ trang này

Lượt xem: 594

  1. duongnt

    By:duongntin: 22 Tháng tám 2017
    Administrator Staff Member

    Tham gia ngày:
    9 Tháng ba 2017
    Bài viết:
    32
    Đã được thích:
    17
    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

    [​IMG]

    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.

    [​IMG]

    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


    [​IMG]

    Figure 3 : Inputs, outputs port



    3. Logic Implementation

    [​IMG]

    Figure 4 : Functional blocks.


    Read control logic


    [​IMG]


    Write control logic


    [​IMG]

    Read/Write timing

    [​IMG]

    Link code : http://www.mediafire.com/file/38wbunf32uuoqyw/sync_fifo.rar
     

    Bài viết cùng chủ đề:

    Lu ROm thích bài này.
  2. Lu ROm

    By:Lu ROmin: 26 Tháng tám 2017
    Administrator Staff Member

    Tham gia ngày:
    25 Tháng bảy 2014
    Bài viết:
    475
    Đã được thích:
    102
    bài viết rất hay anh...Mong anh có nhiều bài như này nưa ạ..hihi:Pclap~~:Pclap~~:P..........