Sunday, October 20, 2019

[Design] Tìm hiểu về round robin arbiter

Tác giả: TrongTran
Ngày: 20/10/2019
Tài liệu tham khảo: https://sinhvientot.net/giai-thuat-dieu-phoi-round-robin-rr/
và các nguồn tư liệu từ internet.



Tình hình là mình đang gặp một issue trong quá trình verification và nó liên quan đến độ ưu tiên của khối arbiter.

Mình thấy nó khá là hay nên đã nghiên cứu và record lại. Mình không viết các bài liên tục vì mình không đủ thời gian. Khi mình gặp issue nào đó mình sẽ nhảy vào nghiên cứu và ghi lại như là một note. Dĩ nhiên note thì sẽ có sai sót. Hi vọng mọi người có thể học hỏi và góp ý cho mình.


1. Sơ lược về arbiter.

Mình lấy một ví dụ đơn giản trong cuộc sống hằng ngày. Có 3 người cần đi mua hàng tại một siêu thị.

Người thứ nhất (A) cần mua 20 gói mì, người thứ 2 (B) cần mua 2 gói mì, người thứ 3 (C) cần mua 4 gói mì.

Như vậy nhiệm vụ của một bộ arbiter cũng giống như cách mà chúng ta giải quyết bài toán này để đảm bảo sự công bằng cho cả 3 người. Cả 3 người đều được mua hàng nhưng không phải đợi quá lâu.

Trở lại vấn đề, Bây giờ ta xem người A như master A, tương tự cho người B, C như master B, C.

Có 3 khả năng xảy ra:

  • Master A gửi request đến slave trước. Lúc này chưa có master nào được gửi. Thì mặc nhiên A sẽ được đi qua.Đây là trường hợp các master gửi đến slave không cùng 1 lúc. Như vậy master nào gửi trước sẽ được qua trước, master nào gửi sau sẽ đi sau.
  • Các master đến cùng 1 lúc và không xét độ ưu tiên giữa các master. Khi đó ta sẽ gán 1 thông số biểu thị thứ tự của từng master để quyết định master nào được gửi trước và master nào gửi sau trong trường hợp cùng đến 1 lúc.
  • Các master đến cùng 1 lúc và có tính đến độ ưu tiên. Lúc này, Các master có độ ưu tiên cao hơn sẽ chiếm lấy quyền access đến slave bất kể khi nào nó access đến bộ arbiter.
Trên thực tế, trong một design, không phải lúc nào master cũng được xem xét có độ ưu tiên ngang nhau. Ví dụ các IP về xử lí ảnh sẽ được ưu tiên transfer data trước. Điều này dẫn đến người design cần thiết lập độ ưu tiên cho các master này.

Mình tóm lại, Bộ arbiter có chức năng xem xét để quyết định xem tại một thời điểm master nào sẽ được access vào slave đồng thời điều khiển BW cho từng master đó.


2. Round robin arbiter. 

Có một số RTL code trên mạng viết cho bộ arbiter, Mình thấy đa số chỉ dùng cấu trúc đơn giản:

if

else


Giả sử trong 1 chip thực tế khi chúng ta sử dụng cấu trúc như trên. Nghĩa là nếu có từ 2 master access liên tục cùng lúc đến cùng 1 slave thì master nào nằm trong vòng if trước sẽ được transfer liên tục và master còn lại cần phải đợi master kia transfer hết data mới bắt đầu transfer.

Điều này làm giảm performance của chip vì như vậy sẽ làm giảm khả năng thực hiện nhiều function cùng 1 lúc của 1 chip.

Hầu hết các thiết kế ngày nay, các nhà design đều sử dụng bộ round robin arbiter.
Một số ưu điểm của bộ này đó là cân bằng được bandwidth và phân bổ tài nguyên hợp lí giữa các master.

Trong 1 bộ round robin arbiter có thể có 2 mode hoạt động chính:

  • Điều khiển BW cho từng master. Nghĩa là mỗi master sẽ được thiết lập một độ ưu tiên. Các master đòi hỏi BW cao hơn hoặc tốc độ xử lí nhanh hơn thì sẽ cần nhiều BW hơn.
  • Không điều khiển BW cho các master. Đây là chế độ mặc định. Các master sẽ được phân bổ round robin với không thiết lập ưu tiên. Nghĩa là master nào cũng được cung cấp 1 BW như nhau.
Trong ví dụ phần trên về 3 người A, B, C đi mua mì, các bạn có thể thao khảo sự phân bổ round robin như hình dưới:




Mỗi người sẽ mua được tối đa 3 gói mì. A mua trước và mua 3 gói, khi đó A nhường cho B để B mua. Lúc này A muốn mua tiếp phải đợi B mua xong 3 gói rồi tới C sau đó mới tới A.

Ta có sơ đồ như hình bên dưới:



Trong hình trên sp đại diện cho số request được gửi tối đa trong một lần gửi (Hay còn gọi là số quantum). req là tổng số request của master còn lại chưa được gửi đến slave.

Mô hình một bộ arbiter như bên dưới:




Khối mux ở đây là để quyết định sẽ cho transaction từ master nào được đi qua.

Combinational logic là nhằm kiểm tra xem địa chỉ bạn đi vào có hợp lệ không.

Module control sẽ điều khiển chế độ hoạt động của bộ arbiter. Có 2 chế độ hoạt động như bên dưới:

Không control BW.

Control BW cho một số master.

Như vậy, Làm thế nào module control có thể điều khiển BW cho các master đi qua bộ arbiter. Đó là nhờ vào cập tín hiệu VALID/READY. Nghĩa là nhờ vào cơ chế bắt tay. Tín hiệu valid thì dĩ nhiên được gửi từ master và chúng ta không thể control được, như vậy ta sẽ control tín hiệu READY. Nghĩa là điều khiển việc khi nào slave sẽ sẵn sàng nhận tín hiệu từ master.

Trong chúng ta ai cũng biết, BW tỉ lệ thuận với số transaction giao dịch thành công trong một đơn vị thời gian. Vì vậy việc điều khiển tín hiệu READY sẽ giúp chúng ta tính toán được chính xác BW đi qua bộ arbiter.

Cơ chế round robin :
Mình lười viết quá nên mình lấy một hình trong 1 trang web về round robin cho CPU. Nó tương tự cho arbiter. Các bạn tham khảo bài đầy đủ ở đây ha:

https://sinhvientot.net/giai-thuat-dieu-phoi-round-robin-rr/



Hình trên mô tả round robin không có độ ưu tiên. P1 vào trước. Lúc này P1 sẽ sử dụng CPU. Ta xét số quantum = 4. Quantum là số thời gian tối đa 1 tiến trình dùng CPU liên tục. Trong bộ arbiter thì đó là số transaction được transfer trong 1 lượt từ 1 master qua bộ arbiter. Nếu vượt quá nó sẽ chặn lại và cho master kế tiếp qua.

Trường hợp nếu P1 không vào trước mà cả P1, P2, P3 vào cùng lúc thì sao. Chúng ta sẽ có 1 trọng số để quyết định tiến trình nào được thực hiện trước.


Trường hợp hình trên giống như xe cứu hoả vậy. bộ arbiter là đèn đỏ. Khi xe qua đèn đỏ thì mọi người phải dừng lại nhường cho đến khi xe cứu hoả qua xong. Đây là bộ arbiter có xét đến tính ưu tiên.

Bài tiếp theo mình sẽ design 1 arbiter nho nhỏ để các bạn tham khảo.





No comments:

Post a Comment

Cách tính BW và latency trong 1 hệ thống SoC sử dụng chuẩn giao tiếp AXI protocol

Tác giả:  TrongTran Ngày:  31/12/2019 Nếu bạn nào đang làm về verification cho system performance (ST) thì bài này sẽ bổ ích cho bạn. Ngày ...