Sau khi đăng bài viết số 2 trình bày về các loại burst của giao thức AXI, tác giả có nhận được phản hồi cần minh họa thêm về cơ chế bắt tay VALID/READY nên nội dung bài này sẽ trình bày về mối liên hệ giữa các kênh trong giao thức AXI và những ràng buộc trong giao thức bắt tay hai chiều bằng VALID/READY giữa các kênh.
1) Mối liên hệ giữa các kênh trong giao thức AXI
Giao thức AXI yêu cầu phải duy trì (tuân thủ) ba mối liên hệ sau:
- Response của transaction ghi phải theo sau transfer dữ liệu cuối cùng. Nghĩa là sau khi một burst ghi hoàn thành, transfer cuối cùng của burst được phát trên kênh W thì response mới được phát trên kênh B. Response không được phát phát trước transfer cuối cùng của burst. Điều này đảm bảo phía slave phải nhận toàn bộ các transfer dữ liệu của transaction ghi rồi mới được phép phát response. Trên thực tế, để phát một response OKAY, phía slave phải nhận đầy đủ các transfer và xử lý các dữ liệu này mà không bị bất kỳ lỗi nào.
- Dữ liệu đọc của một burst phải được phát sau địa chỉ của burst đó. Điều này đảm bảo dữ liệu đọc không tự nhiên sinh ra trên kênh R và phát trước khi có yêu cầu đọc từ phía master trên kênh AR.
- Cơ chế bắt tay của các kênh phải tuân thủ quy định về "sự phụ thuộc giữa các tín hiệu bắt tay" (được trình bày ở phần cuối bài này)
|
Hình 1: Một reponse ghi phải theo sau transfer cuối cùng |
|
Hình 2: Dữ liệu đọc phải theo sau địa chỉ burst |
Đối với transaction ghi, dữ liệu ghi trên kênh W có thể xuất hiện trước, cùng lúc hoặc sau địa chỉ ghi trên kênh AW. Trong trường hợp dữ liệu ghi xuất hiện trước địa chỉ ghi, phía slave có thể xử lý theo một trong các cách sau:
- Tích cực tín hiệu WREADY để nhận dữ liệu ghi và lưu tạm vào thanh ghi (bộ nhớ) đệm. Phía slave chờ cho đến khi nhận được địa chỉ ghi mới bắt đầu thực hiện xử lý dữ liệu ghi đã nhận trước đó. Cách này giúp tối ưu hiệu năng hệ thống nhưng phía slave tốn tài nguyên (logic) để xử lý trường hợp này.
- Không tích cực tín hiệu WREADY, chờ cho đến khi nhận được địa chỉ ghi trên kênh AW mới bắt đầu tích cực WREADY và nhận dữ liệu trên kênh W. Cách này giúp giảm tài nguyên lưu dữ liệu tạm phía slave nhưng hiệu năng hệ thống bị giảm.
|
Hình 3: Dữ liệu ghi xuất hiện trước địa chỉ ghi |
|
Hình 4: Dữ liệu ghi và địa chỉ ghi xuất hiện cùng thời điểm |
|
Hình 5: Dữ liệu ghi xuất hiện sau khi địa chỉ ghi được phát |
2) Sự phụ thuộc giữa các tín hiệu bắt tay
Như đã trình bày về
giao thức bắt tay hai chiều của AXI, Nguyên tắc chung:
- VALID không được phép phụ thuộc (chờ) READY. Nguồn phải tích cực tín hiệu VALID bất cứ khi nào có thông tin hợp lệ cần truyền mà không được quan tâm đến READY đã tích cực hay chưa. VALID phải được duy trì cho đến khi READY tích cực.
- Đích chỉ tích cực READY khi nó đã sẵn sàng nhận dữ liệu và READY có thể tích cực trước, trong hoặc sau khi VALID đã tích cực
Tuy AXI cho phép READY có thể chờ VALID tích cực rồi mới đáp ứng nhưng để hệ thống đạt hiệu năng cao nhất, READY nên tích cực bất cứ khi nào phía đích sẵn sàng nhận dữ liệu mà không chờ hay phụ thuộc vào READY.
|
Hình 6: Ba trường hợp bắt tay giữa VALID và READY |
Sự phụ thuộc giữa các tín hiệu bắt tay phải theo nguyên tắc chung đã trình bày trên đây. Mối liên hệ này được biểu diễn bằng một sơ đồ phụ thuộc dùng hai loại đường "mũi tên":
- Đường mũi tên đơn: Tín hiệu ở cuối mũi tên (ký hiệu E) có thể tích cực trước, cùng lúc hoặc sau khi tín hiệu ở đầu mũi (ký hiệu S) tên tích cực
- Đường mũi tên kép: Tín hiệu ở cuối mũi tên chỉ được phép tích cực sau khi tín hệu ở đầu mũi tên tích cực.
Chú ý: Sự tích cực của tín hiệu ở đầu mũi tên là "chủ động" và không được phép phụ thuộc vào tín hiệu ở sau mũi tên. S không phụ thuộc vào E.
|
Hình 7: Quy định về biểu diễn sự phụ thuộc giữa các tín hiệu bắt tay trong AXI |
2.1) Sự phụ thuộc giữa các tín hiệu bắt tay của transaction đọc
|
Hình 8: Sự phụ thuộc giữa các tín hiệu bắt tay của một transaction đọc |
Theo hình 8, trong transaction đọc:
- ARVALID chính là tín hiệu khởi tạo một transaction đọc, phía master tích cực ARVALID bất cứ khi nào cần khởi tạo một transaction đọc mà không được phép chờ ARREADY
- Phía slave có thể chờ ARVALID rồi mới tích cực ARREADY hoặc có thể tích cực ARREADY trước đó (mối liên hệ được biểu diễn bằng mũi tên đơn)
- Phía slave phải chờ ARVALID và ARREADY tích cực rồi mới được phép tích cực RVALID (mối liên hệ được biểu diễn bằng mũi tên kép)
- Phía slave phải tích cực RVALID bất cứ khi nào dữ liệu đọc đã sẵn sàng trên kênh R mà không được chờ RREADY
- Phía master có thể chờ RVALID rồi mới tích cực RREADY hoặc có thể tích cực RREADY trước RVALID nếu phía master đã sẵn sàng (mối liên hệ được biểu diễn bằng mũi tên đơn)
2.2) Sự phụ thuộc giữa các tín hiệu bắt tay của transaction ghi
|
Hình 9: Sự phụ thuộc giữa các tín hiệu bắt tay của một transaction ghi trong AXI4 |
- Phía master tích cực AWVALID/WVALID mà không được chờ AWREADY hoặc WREADY
- Phía slave có thể tích cực AWREADY/WREADY trước, cùng lúc hoặc sau AWVALID hoặc WVALID
- Phía slave chỉ tích cực BVALID sau khi AWVALID, AWREADY, WVALID and WREADY tích cực. Đồng thời, BVALID chỉ tích cực sau khi WLAST đã tích cực để báo hiệu transfer ghi cuối cùng hoàn thành.
- Phía slave không được phép chờ BREADY tích cực mới tích cực BVALID.
- Phía master có thể phát BREADY trước, cùng lúc hoặc sau BVALID.
Trong phiên bản AXI 1.0 (2004), sự phụ thuộc của BVALID vào WLAST, AWVALID và AWREADY không được mô tả. Phiên bản AXI3 cũng không quy định sự phụ thuộc của BVALID vào AWVALID và AWREADY. Điều này có thể làm cho thiết kế slave AXI3 không thể tương thích với AXI4. Cụ thể, vì kênh W và AW hoạt động độc lập nên master có thể phát dữ liệu của một burst ghi trên kênh W trước khi phát địa chỉ trên kênh AW. Trong trường hợp này, phía slave có thể nhận hết các dữ liệu ghi trên kênh W và phát response trước khi phía master phát địa chỉ ghi trên kênh AW. Nếu một slave AXI được thiết kế theo cơ chế này thì nó không thể sử dụng trong hệ thống AXI4. Slave này phải được điều chỉnh lại thiết kế trước khi gắn vào hệ thống AXI4.
Để ngăn chặn sự không tương thích trên, nếu các slave AXI3 được thiết kế mới thì phải tuân thủ những ràng buộc thêm cho BVALID như AXI4.
|
Hình 10: Waveform chỉ dành cho các phiên bản AXI3 trở về trước, AXI4 không cho phép hoạt động này |
Cảm ơn anh vì bài viết bổ ích
Trả lờiXóaCảm ơn anh vì 4 bài viết về AXI, bài viết rất ngắn gọn và dễ hiểu.
Trả lờiXóa