• Integrated Circuit Design - Chia sẻ kiến thức về vi mạch

    Vi mạch và Ứng dụng

  • Integrated Circuit Design - Chia sẻ kiến thức về vi mạch

    Vi mạch và Ứng dụng

  • Integrated Circuit Design - Chia sẻ kiến thức về vi mạch

    Vi mạch và Ứng dụng

Thứ Bảy, 18 tháng 8, 2018

[BUS][Bài 3] Write strobe và unaligned transfer trong giao thức bus AMBA - AXI

Bài này tập trung làm rõ đặc điểm "(2) Hỗ trợ việc trao đổi dữ liệu unaligned và hỗ trợ write strobe" của giao thức AXI đã liệt kê trong bài "Tổng quan về giao thức AMBA - AXI". Trước khi đọc bài này, các bạn nên tham khảo về các loại burst trong giao thức AXI.
1) Write strobe
Write strobe là một thuật ngữ chỉ khả năng có thể điều khiển (chọn) byte dữ liệu hợp lệ trong một transfer dữ liệu khi ghi. Đối với AXI, tín hiệu điều khiển write strobe là WSTRB trên kênh W. Mỗi bit WSTRB điều khiển một byte lane. Trong giao thức AXI một byte lane là một byte (8 bit). Số bit của tín hiệu WSTRB được tính như sau:
Số bit tín hiệu WSTRB = độ rộng bus dữ liệu WDATA/8
Ví dụ, nếu độ rộng bus dữ liệu là 64 bit (8 byte) thì độ rộng WSTRB là 8.
Hình 1: Mối liên hệ giữa WDATA và WSTRB với độ rộng bus dữ liệu là 64 bit
Tổng quát, WSTRB[n] sẽ quản lý WDATA[(n*8)+7:(n*8)] với n = 0, 1, 2, 3, 4, ... Phía master sẽ dùng WSTRB để báo cho phía slave biết byte nào trong bus WDATA là hợp lệ. Quy định:
  • Byte hợp lệ là byte có WSTRB tương ứng bằng 1. Phía slave phải nhận và xử lý byte hợp lệ.
  • Byte không hợp lệ (không được transfer) là byte có WSTRB tương ứng bằng 0. Phía slave không được phép sử dụng giá trị các byte này.
Hình 2 minh họa hoạt động của write strobe trên bus dữ liệu 64 bit, phía master thực hiện các transfer với kích thước bằng với độ rộng bus dữ liệu (AWSIZE = 3). Phía master dùng WSTRB để xác nhận các byte hợp lệ trên bus WDATA.
Phía master có thể tắt một transfer write bằng cách lái tất cả các bit WSTRB bằng 0. Chú ý, transfer bị tắt vẫn được xác nhận bằng một cặp WVALID = WREADY = 1 nhưng slave sẽ không sử dụng dữ liệu này. "Tắt một transfer" không có nghĩa là ngừng các transfer tiếp theo trong burst. Trong giao thức AXI, tất cả các transfer trong một burst phải được thực hiện và transaction phải được hoàn thành đúng theo trình tự mà giao thức đã quy định (tham khảo). AXI không hỗ trợ "ngắt burst sớm" (early termination).
Hình 2: Write strobe trên bus dữ liệu 64 bit
Phân tích trên đây đã giải thích về write strobe, một phần của đặc điểm "(2) Hỗ trợ việc trao đổi dữ liệu unaligned và hỗ trợ write strobe".
Tuy mỗi bit WSTRB quản lý một byte của WDATA nhưng nó không hoạt động độc lập mà có liên hệ với các thuộc tính khác của burst. Các thuộc tính liên hệ trực tiếp đến WSTRB gồm:
  1. AWADDR: Địa chỉ bắt đầu (Start address)
  2. AWBURST: Kiểu burst
  3. AWSIZE: Kích thước tối đa của một transfer trong burst
Điều này sẽ được phân tích ở những phần sau trong bài này.
2) Aligned và Unaligned
Địa chỉ aligned là những địa chỉ tuân theo giới hạn biên được quy định bởi AxSIZE.
Hình 3: Cách xác định các địa chỉ aligned
Xét hình 3, khi AxSIZE = 0, kích thước mỗi transfer là 1 byte, tất cả các giá trị địa chỉ đều gọi là aligned theo byte. Khi AxSIZE > 0, địa chỉ aligned là địa chỉ có các bit LSB bằng 0 tương ứng với giá trị của AxSIZE. Ví dụ nếu AxSIZE = 3, kích thước mỗi transfer là 8 byte thì địa chỉ aligned là những địa chỉ có AxADDR[2:0] = 0, ví dụ như 0x0000, 0x0008, 0x0010, ...
Địa chỉ unaligned là những địa chỉ không tuân theo giới hạn biên được quy định bởi AxSIZE. Không tồn tại giá trị địa chỉ unaligned cho trường hợp AxSIZE = 0, kích thước mỗi transfer là 1 byte. Khi AxSIZE > 0, địa chỉ unaligned sẽ có các bit LSB khác 0 tương ứng với giá trị của AxSIZE. Ví dụ nếu AxSIZE = 3, kích thước mỗi transfer là 8 byte thì địa chỉ unaligned là những địa chỉ có AxADDR[2:0] khác 0, ví dụ như 0x0001, 0x0002, 0x0003, ...
Hình 4: Ví dụ về địa chỉ aligned và unaligned
AXI chỉ phát một địa chỉ bắt đầu cho mỗi transfer và nó cho phép địa chỉ này có thể là địa chỉ unaligned.
Đối với kiểu burst FIXED, khi phía master phát một địa chỉ unaligned thì địa chỉ này sẽ áp dụng cho tất cả các transfer trong burst.
Hình 5: Địa chỉ unaligned trong kiểu burst FIXED, độ rộng bus dữ liệu là 32 bit, mỗi hàng là 1 transfer, ô màu xám là dữ liệu không được transfer
Đối với kiểu burst INCR, địa chỉ unaligned sẽ chỉ áp dụng cho transfer đầu tiên của burst, địa chỉ của những transfer khác trong burst là địa chỉ aligned. Xét ví dụ hình 5:
  • Với địa chỉ unaligned 0x01 thì byte ở vị trí địa chỉ 0x00 sẽ không được phía master transfer, phía slave sẽ không được phép sử dụng byte này.
  • Với địa chỉ unaligned 0x07 thì các byte ở vị trí địa chỉ 0x04, 0x05 và 0x06 sẽ không được phía master transfer.
Hình 6: Minh họa về aligned và unaligned cho bus dữ liệu 32 bit, kiểu burst INCR, mỗi hàng là một transfer, những ô màu xám là các byte dữ liệu không được transfer (không hợp lệ)
Hình 7 là một minh họa khác về aligned và unaligned cho kiểu INCR với bus dữ liệu 64 bit nhưng kích thước transfer chỉ là 32 bit.
Hình 7: Minh họa về aligned và unaligned cho bus dữ liệu 64 bit, kiểu burst INCR, mỗi hàng là một transfer, những ô màu xám là các byte dữ liệu không được transfer (không hợp lệ)
Đối với kiểu WRAP, chỉ các địa chỉ aligned được phép sử dụng.
Hình 8: Minh họa về aligned cho bus dữ liệu 64 bit, kiểu burst WRAP, mỗi hàng là một transfer, những ô màu xám là các byte dữ liệu không được transfer (không hợp lệ)
Đến đây, toàn bộ đặc điểm "(2) Hỗ trợ việc trao đổi dữ liệu unaligned và hỗ trợ write strobe" đã được mô tả.
3) Sự ràng buộc giữa WSTRB và thuộc tính của burst
Như đã nói ở phần 1 của bài này, WSTRB không hoạt động độc lập, WSTRB phải được lái các giá trị phù hợp với kiểu burst, địa chỉ bắt đầu và kích thước transfer. Nguyên tắc chung là WSTRB không được phép tích cực (bằng 1) tại các byte không được transfer (byte không hợp lệ).
Hình 9 minh họa giá trị WSTRB trong kiểu burst FIXED và địa chỉ unaligned, WSTRB[0] luôn bằng 0 vì byte 0x00 là byte không được transfer.
Hình 9: WSTRB trong kiểu burst FIXED và địa chỉ unaligned, bus dữ liệu là 32 bit và kích thước transfer là 32 bit
Hình 10 và hình 11 minh họa giá trị WSTRB trong kiểu burst INCR với địa chỉ aligned và unaligned, WSTRB tại các vùng dữ liệu không sử dụng luôn bằng 0.
Hình 10: WSTRB trong kiểu burst INCR và địa chỉ aligned, bus dữ liệu là 64 bit và kích thước transfer là 32 bit
Hình 11: WSTRB trong kiểu burst INCR và địa chỉ unaligned, bus dữ liệu là 64 bit và kích thước transfer là 32 bit
Kiểu burst WRAP cũng áp dụng nguyên tắc tương tự nên tác giả không minh họa thêm. Như vậy, kiểu burst, địa chỉ bắt đầu và kích thước transfer quyết định byte nào trên bus dữ liệu là hợp lệ (được transfer) nhưng thông tin này và giá trị WSTRB phải phù hợp với nhau.
4) Nhận xét
Trong một hệ thống, nếu phía master luôn phát các dữ liệu hợp lệ có kích thước bằng độ rộng bus dữ liệu WDATA thì có thể lái toàn bộ tín hiệu WSTRB = 1 hoặc không cần tạo ra WSTRB nhưng phía slave phải gán cố định tất cả các tín hiệu WSTRB = 1.
Hình 12: Kết nối trong trường hợp phía master luôn phát dữ liệu hợp lệ có kích thước bằng độ rộng bus dữ liệu
Việc sử dụng địa chỉ unaligned có thể được thay thế bằng một địa chỉ aligned kết hợp với điều khiển WSTRB. Byte nào không muốn transfer thì WSTRB của nó sẽ được gán giá trị 0. Xét lại hình 9, thay vì phát một địa chỉ unaligned lad 0x01, phía master có thể phát một địa chỉ aligned 0x00 nhưng luôn lái WSTRB[0] = 0 cho mỗi transfer dữ liệu.
Transaction đọc cũng có thể sử dụng địa chỉ unaligned nhưng điều này là không cần thiết. Thông thường phía slave sẽ trả đầy đủ các byte dữ liệu trên RDATA cho mỗi transfer đọc, việc sử dụng byte nào là tùy phía master.

Tham khảo:

1. ARM, AMBA® AXI™ and ACE™ Protocol Specification, 2011

Thứ Tư, 15 tháng 8, 2018

[BUS][Bài 2] Các loại burst của giao thức AMBA - AXI

Tiếp theo bài 1, bài này sẽ mô tả chi tiết các loại burst trong transaction của AXI với sơ đồ timing cụ thể. Mục tiêu là làm rõ đặc điểm "(3) Hỗ trợ các transaction theo cơ chế burst và chỉ cần phát địa chỉ đầu tiên của burst".

1) Cơ chế bắt tay hai chiều (two-way) của AXI 

Giao thức AXI hoạt động dựa trên cơ chế bắt tay hai chiều (two-way handshake) sử dụng một tín hiệu VALID và một tín hiệu READY. 
Nguồn phát (source) sẽ sử dụng tín hiệu VALID để báo hiệu một địa chỉ, thông tin điều khiển hoặc dữ liệu đã hợp lệ trên kênh truyền. VALID giống như tín hiệu yêu cầu (request) một đích (destination) nhận thông tin. 
Đích (destination) sẽ sử dụng tín hiệu READY để thông báo cho nguồn biết nó đã chấp nhận thông tin từ source. READY giống như tín hiệu ACK xác nhận yêu cầu (request) từ nguồn. 
Nguồn và đích có thể là master hoặc slave. Ví dụ, trong một transaction đọc, trên kênh AR, phía master là nguồn phát địa chỉ và thông tin điều khiển, phía slave là đích. Vì vậy, phía master sẽ điều khiển tín hiệu VALID, phía slave sẽ điều khiển tín hiệu READY. Đối với kênh R thì ngược lại, slave là nguồn phát dữ liệu đọc, còn master là đích nên slave sẽ điều khiển VALID còn master điều khiển READY. 
Mỗi kênh sẽ có một cặp VALID/READY gọi là cặp tín hiệu bắt tay để hoạt động theo cơ chế này. Cụ thể: 
  • Kênh AR sẽ có tín hiệu ARVALID (master) và tín hiệu ARREADY (slave) 
  • Kênh R sẽ có tín hiệu RVALID (slave) và tín hiệu RREADY (master) 
  • Kênh AW sẽ có tín hiệu AWVALID (master) và tín hiệu AWREADY (slave) 
  • Kênh W sẽ có tín hiệu WVALID (master) và tín hiệu WREADY (slave) 
  • Kênh B sẽ có tín hiệu BVALID (slave) và tín hiệu BREADY (master) 
*Chú ý: trong bài viết, VALID được hiểu là ARVALID, AWVALID, RVALID hoặc WVALID. READY được hiểu là ARREADY, AWREADY, RREADY hoặc WREADY.
Nguyên tắc chung: 
  • 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 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.
Hình 1: Cơ chế bắt tay hai chiều của giao thức AXI

Hình 1 minh họa cơ chế bắt tay hai chiều của AXI: 
  • Tại T0: nguồn tích cực VALID báo có thông tin hợp lệ trên kênh truyền (kênh AR, AW, R hoặc kênh W). 
  • Từ T0 đến T2: VALID phải được duy trì mức tích cực vì đích không sẵn sàng (READY = 0) để nhận thông tin lúc này. 
  • Tại T2: Đích tích cực READY báo hiệu đã sẵn sàng nhận thông tin. 
  • Tại T3: Khi VALID và READY cùng tích cực, đích nhận thông tin và nguồn cũng biết điều này. Nếu nguồn tiếp tục có thông tin hợp cần truyền nó sẽ duy trì VALID = 1 sau T3. Nếu nguồn không có thông tin mới cần truyền nó sẽ thôi tích cực VALID như hình 6
  • Sau T3: Đích vẫn duy trì tín hiệu READY để báo hiệu nó đã sẵn sàng nhận thêm thông tin mới như hình 6. Nếu đích đang bận xử lý nhiệm vụ khác, chưa thể nhận thêm thông tin mới, nó sẽ thôi tích cực READY.
*Chú ý: Ở đây, "Thông tin" là địa chỉ, thông tin control hoặc dữ liệu tùy vào kênh.
Nguồn không được phép chờ READY tích cực rồi mới tích cực VALID. nó phải chủ động tích cực VALID bất cứ khi nào phát thông tin hợp lệ lên kênh truyền. Điều này giống như việc bạn phải chủ động báo cáo cho sếp khi đã hoàn thành công việc chứ không chờ sếp hỏi mới báo cáo.
Đích có thể chờ cho VALID tích cực rồi mới tích cực READY. Điều này giống như việc khi sếp đã nhận báo cáo của bạn nhưng kiểm tra báo cáo lúc nào là việc của sếp. Sếp kiểm tra xong sẽ phản hồi lại cho bạn. Tuy nhiên cách làm này sẽ làm giảm hiệu năng hệ thống. Vì vậy, nếu có thể, đích luôn tích cực READY bất cứ khi nào nó có khả năng nhận thông tin mới từ nguồn. Điều này giống như việc, sếp sẽ chủ động nói với bạn "anh đang chờ đọc báo cáo của em" khi sếp rảnh và bạn biết được nếu báo cáo được nộp lúc đó thì báo cáo sẽ được sếp đọc ngay.
Với cơ chế bắt tay hai chiều, mỗi kênh có thể hoàn thành transfer của nó một cách độc lập để tiếp tục thực hiện transfer tiếp theo mà không cần chờ kênh khác.
Hình 2: Cơ chế bắt tay hai chiều VALID/READY cho phép các transfer trên một kênh có thể hoàn thành độc lập với kênh khác
Hình 2, trên kênh AR, transfer địa chỉ và control của transaction B được phát ngay sau khi transfer địa chỉ và control của transaction A hoàn thành bất chấp các transfer dữ liệu và response của transaction A vẫn chưa hoàn thành trên kênh R.
2) Cơ chế burst transaction
Phần này sẽ tập trung giải thích đặc tính "(3) Hỗ trợ các transaction theo cơ chế burst và chỉ cần phát địa chỉ đầu tiên của burst" của giao thức AXI. AXI là giao thức dựa trên cơ chế burst, mỗi transaction điều khiển một burst nên transaction còn được gọi đầy đủ là burst transaction. Đặc tính của burst được quy định bởi thông tin điều khiển truyền trên kênh AR/AW.
Để khởi động một transaction, phía master sẽ phát địa chỉ và thông tin điều khiển của transaction trên kênh AR hoặc AW. Trong đó:
  • Địa chỉ được phát là địa chỉ của byte đầu tiên trong một transaction.
  • Thông tin điều khiển gồm thông tin quy định thuộc tính của burst và các thuộc tính khác của transasion.
Trong giao thức AXI, phía master không phát các địa chỉ trung gian của các beat trong một burst mà chỉ phát địa chỉ byte đầu tiên trong một transaction, đây chính là địa chỉ của transfer dữ liệu đầu tiên. Phía slave dựa trên thông tin điều khiển để xác định địa chỉ của các beat từ địa chỉ đầu tiên này. Điều này giúp tăng performance của hệ thống bus nhưng làm mạch logic xử lý giao tiếp AXI tại phía slave phức tạp hơn vì phải tự tính toán các địa chỉ beat.
So sánh với giao thức bus APB (Advanced Peripheral Bus), một địa chỉ cụ thể chỉ ứng với một dữ liệu được đọc hoặc ghi. Điều này làm cho mạch logic xử lý giao tiếp APB đơn giản, chỉ cần giải mã địa chỉ có sẵn để sử dụng, nhưng hiệu năng bus là không cao.
Để giải thích cơ chế burst transaction, chúng ta tập trung vào các tín hiệu địa chỉ và điều khiển tại mỗi kênh như sau:
  • Kênh AR/AW
    • AxADDR (ARADDR/AWADDR) Địa chỉ của transfer dữ liệu đầu tiên của transaction.
    • AxLEN (ARLEN/AWLEN) Độ dài burst. Thông tin điều khiển này xác định số transfer dữ liệu trong burst, là số beat trong burst.
    • AxSIZE (ARSIZE/AWSIZE) Kích thước burst. Thông tin điều khiển này xác định kích thước chung của mỗi transfer dữ liệu trong burst.
    • AxBURST (ARBURST/AWBURST) Loại burst. Thông tin điều khiển này xác định phương pháp, cơ chế tính địa chỉ cho mỗi transfer dữ liệu (mỗi beat) trong burst.
    • AxVALID (ARVALID/AWVALID) Tín hiệu VALID của kênh địa chỉ.
    • AxREADY (ARREADY/AWREADY) Tín hiệu READY của kênh địa chỉ.
  • Kênh R
    • RDATA Dữ liệu đọc
    • RLAST Tín hiệu báo transfer dữ liệu (beat) cuối cùng trong một burst đọc.
    • RRESP Tín hiệu báo trạng thái của các transfer đọc.
    • RVALID Tín hiệu VALID của kênh R
    • RREADY Tín hiệu READY của kênh R
  • Kênh W
    • WDATA Dữ liệu ghi
    • WLAST Tín hiệu báo transfer dữ liệu (beat) cuối cùng trong một burst ghi.
    • WVALID Tín hiệu VALID của kênh W
    • WREADY Tín hiệu READY của kênh W
  • Kênh B
    • BRESP Tín hiệu báo trạng thái của transaction ghi.
    • BVALID Tín hiệu VALID của kênh B
    • BREADY Tín hiệu READY của kênh B
Hình 3: Nhóm tín hiệu dùng cho việc giải thích burst transaction đọc
Hình 4: Nhóm tín hiệu dùng để giải thích cho burst transaction ghi

*Chú ý: Ở đây, tác giả không liệt kê toàn bộ các tín hiệu của mỗi kênh mà chỉ tập trung giải thích cơ chế burst transaction. Chi tiết về các tín hiệu giao tiếp của mỗi kênh được mô tả trong tài liệu chuẩn.

Độ dài một burst (số beat) được quy định bởi AxLEN và tính như sau:
Độ dài burst (số beat) = AxLEN + 1
Số byte tối đa của một transfer dữ liệu (một beat) được quy định bởi AxSIZE. Kích thước này không được lớn hơn độ rộng bus dữ liệu (độ rộng RDATA/WDATA). Ví dụ, bus dữ liệu có độ rộng 32 byte thì AxSIZE[2:0] phải nhỏ hơn hoặc bằng 5.
Hình 5: Bảng giá trị của AxSIZE (ARSIZE/AWSIZE)
Loại burst được xác định bởi AxBURST. AXI hỗ trợ 3 loại burst là:
  • FIXED: Địa chỉ của mỗi transfer dữ liệu trong transaction là như nhau.
  • INCR: Địa chỉ của một transfer dữ liệu trong burst bằng địa chỉ của transfer trước đó tăng thêm một giá trị được quy định bởi AxSIZE. Ví dụ, AxSIZE[2:0] = 2, số byte của một transfer là 4 thì địa chỉ của transfer hiện tại bằng địa chỉ transfer trước tăng 4.
  • WRAP: Địa chỉ của một transfer dữ liệu trong burst bằng địa chỉ của transfer trước đó tăng thêm một giá trị được quy định bởi AxSIZE nhưng chỉ các bit địa chỉ LSB được tăng. Số lượng bit LSB được tăng phụ thuộc vào AxLEN và AxSIZE. Ví dụ, khi AxLEN = 7, số transfer dữ liệu là 8, nếu AxSIZE = 2 (4 byte) thì số bit LSB được tăng là 5. Nghĩa là địa chỉ của transfer hiện tại sẽ bằng địa chỉ của transfer trước với 5 bit LSB [4:0] được cộng thêm 4. Chú ý, các bit địa chỉ [*:5] sẽ không đổi.
    • Địa chỉ bắt đầu phải aligned theo AxSIZE
    • AxLEN phải bằng 1, 3, 7, 15 ứng với độ dài burst là 2, 4, 8 và 16 beat.
Hình 6: Bảng giá trị của AxBURST (ARBURST/AWBURST)

Loại response được xác định bằng giá trị trên RRESP và BRESP. AXI hỗ trợ 4 loại response:
Hình 7: Bảng giá trị của RRESP/BRESP

3) Kiểu burst FIXED
3.1) Ví dụ
Hình 8: Transaction đọc với kiểu FIXED burst
Hình 8 là một ví dụ về transaction đọc với kiểu burst FIXED. Thông số của transaction này như sau:
  • Địa chỉ bắt đầu: 0x1238
  • Độ dài burst là 8 với ARLEN[7:0] = 0x07
  • Kích thước mỗi beat là 4 byte với ARSIZE[2:0] = 0b010
  • Loại burst là FIXED với ARBURST[1:0] = 0b00
Giải thích waveform hình 8:
  • Kênh AR:
    • T0: Phía master tích cực tín hiệu ARVALID = 1 để báo hiệu cần thực hiện một transaction đọc. Địa chỉ đầu tiên của transaction (ARADDR) và các thông tin về burst (ARLEN, ARSIZE, ARBURST) phải được cung cấp ổn định trong suốt quá trình ARVALID tích cực.
    • T0 đến T1: Phía slave chưa sẵn sàng đáp ứng yêu cầu của phía master nên giữ ARREADY = 0.
    • T1: Phía slave sẵn sàng nhận thông tin về transaction của phía master nên tích cực AREADY = 1.
    • T2: Phía slave nhận thông tin về transaction đọc của phía master. Phía slave thôi tích cực AREADY vì không sẵn sàng nhận thêm yêu cầu mới (phía slave có thể giữ ARREADY = 1 nếu vẫn có thể tiếp tục nhận thêm yêu cầu transaction mới). Phía master thôi tích cực ARVALID vì không có thêm yêu cầu mới tiếp theo (phía master có thể tiếp tục giữ ARVALID = 1 nếu vẫn muốn phát tiếp yêu cầu transaction mới).
  • Kênh R:
    • Nếu phía slave có thể đáp ứng transaction đọc, nó sẽ tích cực RVALID = 1 kèm theo dữ liệu RDATA và trạng thái của transfer đọc RRESP. Thời gian từ T6 đến T7 là khoảng thời gian phía slave chưa có dữ liệu đọc để gửi.
    • Từ T8 đến T9, phía slave gửi một RRESP là SLVERR để báo hiệu transfer đọc này bị lỗi.
    • Từ T10 đến T11, phía slave gửi transfer đọc cuối cùng nên tích cực thêm tín hiệu RLAST = 1.
    • Phía master sẽ tích cực tín hiệu RREADY bất cứ khi nào nó sẵn sàng nhận transfer đọc. Trên waveform, phía master sẽ nhận các transfer đọc tại các thời điểm T3, T4, T5, T6, T8, T9, T10 và T11.
Do đây là kiểu burst FIXED nên địa chỉ của các dữ liệu D0 đến D7 đều giống nhau và bằng địa chỉ bắt đầu 0x1238.
Hình 9. Transaction ghi với kiểu burst FIXED
Hình 9 là một minh họa về waveform của transaction ghi với kiểu burst là FIXED. Khác với transaction đọc, response của transaction ghi chỉ được gửi 1 lần sau khi đã kết thúc burst trên kênh B.
3.2) Ứng dụng
Kiểu burst FIXED sử dụng để truy cập nhiều lần vào cùng một địa chỉ. Nó có thể dùng để truy xuất FIFO/LIFO. Mỗi transfer đọc/ghi sẽ tác động làm tăng giá trị con trỏ đọc/ghi của FIFO/LIFO.
Hình 10: Minh họa về sự sử dụng kiểu burst FIXED để truy xuất FIFO
Hình 10 minh họa về việc sử dụng kiểu FIXED burst truy xuất FIFO. Ở đây, địa chỉ của kênh AR/AW sẽ được lưu lại trong thanh ghi và dùng để giải mã tín hiệu đọc/ghi. Tín hiệu đọc ghi được tạo ra khi VALID và READY trên kênh R/W cùng tích cực. Khi tín hiệu đọc/ghi tích cực thì dữ liệu sẽ được đọc ra/ghi vào FIFO và giá trị con trỏ đọc/ghi sẽ được tăng lên.
4) Kiểu burst INCR
4.1) Ví dụ
Hình 11: Transaction đọc kiểu burst INCR
Hình 12: Transaction ghi kiểu burst INCR
4.2) Ứng dụng
Kiểu burst INCR được dùng phổ biến truy cập đến các vùng địa chỉ liên tiếp nhau như bộ nhớ hoặc các nhóm thanh ghi có địa chỉ liên tục.
Hình 13: Một bộ nhớ có địa chỉ liên tục có thể truy xuất dễ dàng bởi burst INCR

5) Kiểu burst WRAP
5.1) Ví dụ
Hình 14: Transaction đọc với kiểu burst WRAP
Hình 15: Transaction ghi với kiểu burst WRAP
5.2) Ứng dụng
Kiểu burst WRAP sử dụng để truy xuất cache line. Trong hệ thống tốc độ cao CPU không truy xuất trực tiếp bộ nhớ chính (main memory) vì tốc độ đọc/ghi chậm mà sử dụng bộ nhớ trung gian là cache. Nếu trong quá trình hoạt động, cache không chứa giá trị mà CPU cần, gọi là bị "miss", thì nó sẽ bắt đầu tìm giá trị bị "miss" từ bộ nhớ chính.
Dữ liệu được lấy từ bộ nhớ chính theo từng block có kích thước cố định gọi là một "cache line" hoặc "cache block". Mỗi cache line gồm nhiều ô nhớ có địa chỉ liên tục. Có hai cách lấy một cache line là:
  • Early restart: lấy theo thứ tự cache line từ địa chỉ đầu tiên đến địa chỉ cuối cùng của block đến khi gặp giá trị bị "miss" thì gửi giá trị này đến CPU để CPU tiếp tục xử lý. Để làm điều này, CPU dùng kiểu truy xuất INCR.
  • Critical word first: lấy bắt đầu từ giá trị bị miss, giá trị này gọi là "critical word", để có thể gửi nó đến CPU sớm, sau đó tiếp tục lấy những giá trị còn lại trong block (cache line). Để làm được điều này, CPU dùng kiểu truy xuất WRAP.
Hình 16: Minh họa ứng dụng của kiểu burst WRAP trong truy xuất cache line

Tóm lại, bài này tập trung phân tích hoạt động trao đổi dữ liệu của AXI dựa trên cơ chế burst và làm rõ các ứng dụng của từng kiểu burst.

Lịch sử cập nhật:
1) 2019.11.07 - Sửa "Kênh R: ARVALID=1" thành RVALID=1 (theo comment của bạn vanloctc)