Transaction Layer Lớp Giao Dịch, một thành phần không thể thiếu trong mô hình OSI Open Systems Interconnection, đóng vai trò then chốt trong việc điều khiển và quản lý luồng dữ liệu giữa
TỔNG QUAN
Giới thiệu đề tài
Ngành công nghiệp thiết kế vi mạch tại Việt Nam hiện đang tập trung chủ yếu vào các công đoạn Back-end, với các kỹ sư chủ yếu tối ưu hóa bố cục, kết nối và kiểm tra vật lý của chip Tuy nhiên, đề tài thiết kế RTL (Register-Transfer Level) đang nổi lên như một điểm sáng mới, mở ra cơ hội phát triển trong lĩnh vực này.
Lớp Giao Dịch (Transaction Layer) là một phần quan trọng trong mô hình OSI, đóng vai trò quyết định trong việc quản lý luồng dữ liệu giữa các thiết bị PCIe bên trong DPU PCIe, chuẩn giao tiếp tốc độ cao phổ biến trong các hệ thống máy tính hiện đại, cho phép kết nối các thiết bị ngoại vi như card đồ họa, card mạng và ổ cứng SSD với bo mạch chủ Lớp Giao Dịch hoạt động như một người điều phối dữ liệu, đảm bảo việc truyền tải chính xác các gói dữ liệu giữa các thiết bị.
Transaction Layer không chỉ là một yếu tố điều phối mà còn là cầu nối thiết yếu, giúp kết nối và truyền tải dữ liệu giữa các con chip khác nhau Vai trò này cực kỳ quan trọng trong việc xây dựng các hệ thống phức tạp, nơi nhiều con chip cần hợp tác để thực hiện các tác vụ tính toán và xử lý dữ liệu hiệu quả.
Dựa trên nền tảng của Transaction Layer trong chuẩn giao tiếp PCI Express, Transaction Layer Modeling là hệ thống mô phỏng và kiểm tra hoạt động của Transaction Layer, đảm nhận các chức năng quan trọng như mô phỏng truyền nhận dữ liệu giữa các thiết bị PCIe, giải mã gói dữ liệu để trích xuất thông tin cần thiết và khởi tạo thông tin điều khiển để đảm bảo hoạt động chính xác Đề tài này không chỉ cung cấp kiến thức chuyên sâu về lĩnh vực mới mẻ tại Việt Nam mà còn mở ra cơ hội nghiên cứu và phát triển tiềm năng, góp phần vào sự phát triển của ngành công nghiệp vi mạch trong nước.
Mục tiêu thiết kế
Ngành thiết kế vi mạch tại Việt Nam đang phát triển mạnh mẽ, nhưng chủ yếu tập trung vào giai đoạn Back-end, chưa chú trọng đến thiết kế Đề tài “Thiết kế Transaction Layer Modeling cho PCI Express 5.0” là một hướng đi mới, tập trung vào vị trí RTL design trong quy trình thiết kế chip ASIC Mục tiêu của đề tài là nâng cao hiểu biết về quy trình thiết kế RTL, từ đó cải thiện khả năng tư duy logic và áp dụng hiệu quả các chuẩn giao tiếp.
TLM được thiết kế với các tính năng sau:
• Hoạt động với tần số 1.6GHz
• Đường nhận dữ liệu vào tương thích với PCIe 5.0 và các phiên bản cũ
• Hỗ trợ truyền/nhận nhiều kênh
• Hỗ trợ tạm dừng hệ thống mà không mất dữ liệu
Quản lý lưu lượng kênh truyền giúp đảm bảo rằng khi một kênh truyền hoặc nhận bị tắc nghẽn, các kênh khác vẫn hoạt động bình thường Hệ thống tự động khôi phục kênh truyền khi gặp sự cố hoặc tắc nghẽn, duy trì hiệu suất hoạt động liên tục.
Ngôn ngữ và phần mềm thiết kế
Ngôn ngữ thiết kế: ngôn ngữ mô tả phần cứng Systemverilog
PERIPHERAL COMPONENT INTERCONNECT EXPRESS (PCIE) 5.0
Giới thiệu PCI Express 5.0
PCI Express (PCIe) 5.0 là chuẩn kết nối tiên tiến được phát triển để liên kết các thành phần máy tính như card đồ họa, card mạng và ổ đĩa SSD Được công bố bởi PCI-SIG vào năm 2019, PCIe 5.0 cung cấp nhiều cải tiến vượt trội so với PCIe 4.0, giúp nâng cao hiệu suất và băng thông hệ thống một cách đáng kể.
Một trong những điểm nổi bật nhất của PCIe 5.0 là tốc độ truyền dẫn dữ liệu lên đến
PCIe 5.0 đạt tốc độ 32 GT/s, gấp đôi PCIe 4.0 và gấp bốn lần PCIe 3.0, cho phép chuyển dữ liệu lên đến 64GB/s trên mỗi làn đường Điều này giúp tăng cường khả năng xử lý dữ liệu nhanh chóng và hiệu quả cho các ứng dụng yêu cầu băng thông cao như trò chơi video, đồ họa 3D, tính toán khoa học và truyền dữ liệu lớn.
Bảng 2.1: Tốc độ truyền của PCIe (CPU/GPU)
Phiên bản PCIe Tốc độ truyền dữ liệu (lên đến)
PCIe 5.0 có khả năng tương thích ngược với các phiên bản PCIe trước, cho phép card mở rộng và thiết bị PCIe 3.0 hoặc 4.0 hoạt động trên khe cắm PCIe 5.0, mặc dù hiệu suất sẽ giảm theo chuẩn thấp hơn Để đạt tốc độ truyền dẫn dữ liệu cao hơn, PCIe 5.0 áp dụng kỹ thuật PAM4 (Pulse Amplitude Modulation 4), thay vì NRZ (Non-Return-to-Zero) như các phiên bản trước, cho phép truyền dẫn dữ liệu với 4 trạng thái tín hiệu, từ đó nâng cao hiệu suất kết nối.
Mặc dù PCIe 5.0 cung cấp hiệu suất và băng thông vượt trội, việc triển khai công nghệ này cần sự hỗ trợ đồng bộ từ phần cứng và phần mềm như bo mạch chủ, vi xử lý, card mở rộng và hệ điều hành Vì vậy, mặc dù đã có mặt trên thị trường từ năm 2020, việc áp dụng PCIe 5.0 vẫn gặp một số thách thức.
4 việc sử dụng PCIe 5.0 vẫn đang trong giai đoạn chuyển đổi và không phải tất cả các thiết bị mới đều hỗ trợ chuẩn này ngay từ đầu
PCIe 5.0 đại diện cho một bước tiến quan trọng trong công nghệ kết nối máy tính, mang lại hiệu suất và băng thông vượt trội so với các phiên bản trước Công nghệ này cũng đảm bảo tính tương thích với các thiết bị PCIe hiện tại và tương lai.
Các lớp (Layer) trong PCI Express 5.0
PCIe 5.0 hoạt động dựa trên một kiến trúc layer, mỗi layer đảm nhận một vai trò cụ thể trong quá trình truyền dẫn dữ liệu Các layer chính trong PCIe 5.0 bao gồm Physical Layer, Transaction Layer và Data Link Layer [4]
2.2.1 Physical Layer (lớp vật lý)
Lớp vật lý (PHY) trong PCIe 5.0 đóng vai trò quan trọng trong việc truyền tải dữ liệu qua các đường truyền, với các chức năng chính bao gồm việc đảm bảo kết nối ổn định và hiệu quả.
Giao tiếp điện tử: PHY là phần chuyển đổi tín hiệu điện từ các thiết bị PCIe thành các tín hiệu điện áp hoặc dòng điện, giúp truyền dẫn hiệu quả qua đường truyền.
PHY thực hiện việc điều chỉnh và tái tạo tín hiệu nhằm đảm bảo chất lượng truyền dẫn dữ liệu, đặc biệt quan trọng ở tốc độ cao của PCIe 5.0.
PHY có chức năng phát hiện và xử lý các lỗi trong quá trình truyền dẫn dữ liệu, bao gồm việc sửa chữa lỗi hoặc báo cáo chúng đến các lớp khác trong giao thức PCIe.
2.2.2 Data Link Layer (lớp liên kết dữ liệu)
Data Link Layer chịu trách nhiệm điều khiển việc truyền dẫn dữ liệu trên đường truyền PCIe và bao gồm các tính năng sau:
Lớp Liên Kết Dữ Liệu đảm bảo việc đồng bộ hóa dữ liệu, giúp dữ liệu được truyền dẫn một cách có thứ tự trên đường truyền PCIe, từ đó giảm thiểu sự cố và nguy cơ mất mát dữ liệu.
Tầng Liên Kết Dữ Liệu thực hiện kiểm tra lỗi trên dữ liệu được truyền tải nhằm đảm bảo tính toàn vẹn và phát hiện, sửa chữa lỗi khi cần thiết.
Quản lý luồng tại lớp liên kết dữ liệu (Data Link Layer) đóng vai trò quan trọng trong việc điều phối truyền dữ liệu giữa các thiết bị PCIe, nhằm tối ưu hóa việc sử dụng băng thông truyền dẫn một cách hiệu quả nhất.
2.2.3 Transaction Layer (lớp giao dịch)
Transaction Layer quản lý việc truyền dẫn dữ liệu giữa các thiết bị hỗ trợ giao tiếp theo chuẩn PCIe, bao gồm các chức năng sau:
Quản lý băng thông trong lớp giao dịch đảm bảo việc chia sẻ băng thông trên đường truyền PCIe giữa các thiết bị, đồng thời nâng cao độ tin cậy và hiệu suất trong quá trình truyền dữ liệu.
Transaction Layer chịu trách nhiệm gán địa chỉ cho các gói tin dữ liệu và xác định các thiết bị mục tiêu mà dữ liệu sẽ được gửi đến.
Transaction Layer thực hiện việc kiểm soát truy cập vào đường truyền PCIe, đảm bảo rằng chỉ những thiết bị được phép mới có thể truy cập vào đường truyền này.
TRANSACTION LAYER TRONG PCI EXPRESS 5.0
Transaction Layer trong kiến trúc PCI Express
Lớp giao dịch (Transaction Layer) là phần quan trọng trong kiến trúc PCI Express, chịu trách nhiệm truyền tải dữ liệu một cách đáng tin cậy và hiệu quả giữa các thiết bị Nó thường được tích hợp trong DPU (Data Processing Unit) và đảm bảo các chức năng chính của hệ thống hoạt động mượt mà.
Transaction Layer sử dụng giao thức "Split-Transaction" với khả năng pipeline, cho phép xử lý đồng thời nhiều giao dịch, tăng hiệu suất truyền dữ liệu
Mô hình này chia giao dịch thành hai phần:
• Request Phase: Thiết bị gửi yêu cầu dữ liệu hoặc thực hiện một thao tác
• Completion Phase: Thiết bị nhận phản hồi với kết quả của thao tác hoặc dữ liệu được yêu cầu
Hai giai đoạn này có thể diễn ra độc lập và không cần chờ đợi lẫn nhau, cho phép tận dụng tối đa băng thông và giảm độ trễ
❖ Phân loại và Xử lý TLP:
Transaction Layer cung cấp cơ chế phân loại và xử lý TLPs theo thứ tự ưu tiên và các yêu cầu khác nhau, đảm bảo rằng các TLP quan trọng được xử lý trước và đáp ứng yêu cầu về thời gian thực.
❖ Kiểm soát Luồng Dữ liệu:
Sử dụng cơ chế credit-based flow control để quản lý luồng dữ liệu giữa các thiết bị và tránh tình trạng quá tải [4]
Cơ chế này cho phép thiết bị nhận kiểm soát lượng dữ liệu mà nó có thể xử lý, đảm bảo truyền dữ liệu hiệu quả và ổn định
❖ Bảo vệ dữ liệu (tùy chọn):
Hỗ trợ tùy chọn cho việc "đầu độc dữ liệu" (data poisoning) và kiểm tra tính toàn vẹn dữ liệu đầu-cuối (end-to-end data integrity) [4]
Data poisoning là một phương pháp quan trọng để đánh dấu dữ liệu không hợp lệ, nhằm ngăn chặn việc sử dụng sai thông tin Việc kiểm tra tính toàn vẹn dữ liệu giúp đảm bảo rằng dữ liệu không bị thay đổi trong quá trình truyền tải, từ đó nâng cao độ tin cậy của hệ thống.
❖ Xây dựng và Xử lý TLP:
Trong lớp giao dịch (Transaction Layer), gói tin dữ liệu được gọi là TLP (Transaction Layer Packet) được truyền tải Lớp giao dịch có nhiệm vụ xây dựng và giải mã TLPs, bao gồm việc thêm và loại bỏ header, data payload, cùng với thông tin kiểm tra lỗi.
• Quality of Service (QoS): cho phép ưu tiên các loại lưu lượng dữ liệu khác nhau
• Virtual Channels: cho phép chia sẻ băng thông giữa nhiều chức năng khác nhau của thiết bị
• Atomic Operations: hỗ trợ các thao tác nguyên tử để đảm bảo tính nhất quán dữ liệu
• Quản lý năng lượng (Power Management):
▪ Hỗ trợ các trạng thái năng lượng khác nhau cho các thiết bị, ví dụ:
▪ Hoạt động đầy đủ: thiết bị hoạt động bình thường
▪ Tắt nguồn một phần: thiết bị tiêu thụ ít năng lượng hơn nhưng vẫn có thể hoạt động
▪ Tắt nguồn hoàn toàn: thiết bị tiêu thụ năng lượng tối thiểu
Transaction Layer Dữ liệu
Hệ thống sử dụng giao thức PCIe thiết lập và duy trì giao tiếp chặt chẽ giữa các thiết bị thông qua quá trình truyền tải dữ liệu tiên tiến Dữ liệu được đóng gói thành các gói tin đặc biệt và được truyền qua lớp trung gian gọi là Transaction Layer, nơi các gói tin trải qua biến đổi và xử lý Khi gói tin hoàn chỉnh, nó được gọi là TLP (Transaction Layer Dữ liệu) và được chuyển đến các thiết bị khác, đảm bảo truyền tải dữ liệu hiệu quả và đáng tin cậy.
Trong cơ chế giao tiếp của hệ thống, giao dịch (Transaction) bao gồm hai phần chính: yêu cầu (Requests) và hoàn thành (Completions) Requests chứa thông tin về các tác vụ hoặc dịch vụ mà thiết bị muốn thực hiện, trong khi Completions cung cấp thông tin về kết quả và trạng thái của các yêu cầu đó Để trao đổi và truyền tải thông tin giữa các thiết bị, cả hai thành phần này được đóng gói dưới dạng các gói tin thông tin cụ thể, không chỉ chứa dữ liệu của Request và Completion mà còn bao gồm thông tin đi kèm và mã hóa cần thiết để đảm bảo giao tiếp chính xác và hiệu quả.
Posted Không yêu cầu giao dịch phản hồi (completion transaction)
Thường sử dụng cho: giao dịch ghi (write transaction)
Non-posted Yêu cầu giao dịch phản hồi (completion transaction)
Thường sử dụng cho: thao tác đọc (read transaction) Completion
Completion chỉ được sử dụng khi thật sự cần thiết, chẳng hạn như để trả lại dữ liệu đã đọc hoặc để xác nhận việc hoàn thành các giao dịch ghi I/O và cấu hình.
❖ Phân loại Transaction Layer Packet (TLP) [4]:
Yêu cầu đọc bộ nhớ là một yêu cầu đặc biệt mà hệ thống gửi đi để truy xuất và thu thập dữ liệu từ một địa chỉ cụ thể trong bộ nhớ Khi nhận được yêu cầu này, thiết bị sẽ đọc dữ liệu tại địa chỉ đã chỉ định và gửi kết quả về cho hệ thống, cung cấp thông tin cần thiết cho các quá trình xử lý và truy cập dữ liệu.
Yêu cầu ghi nhớ là một yếu tố quan trọng trong hệ thống, được sử dụng để ghi dữ liệu mới vào địa chỉ bộ nhớ đã chỉ định Khi cần cập nhật thông tin hoặc lưu trữ dữ liệu mới, yêu cầu này sẽ được gửi đến thiết bị để thực hiện việc ghi, đảm bảo rằng các thay đổi được áp dụng và lưu trữ chính xác.
Yêu cầu đọc cấu hình là một thao tác mà hệ thống thực hiện để truy xuất thông tin cấu hình của một thiết bị cụ thể Thao tác này giúp hệ thống nắm rõ các thiết lập và tùy chỉnh đã được cấu hình, từ đó có khả năng điều chỉnh và quản lý các thiết lập một cách hiệu quả hơn.
Yêu cầu cấu hình ghi là một yếu tố quan trọng trong việc cập nhật hoặc thay đổi thông tin cấu hình của thiết bị Khi cần điều chỉnh thiết lập hoặc áp dụng tùy chỉnh mới, yêu cầu này được gửi đến thiết bị để thực hiện các thay đổi cần thiết, đảm bảo thiết bị hoạt động hiệu quả và đáp ứng đúng nhu cầu sử dụng.
Yêu cầu đọc I/O là một quá trình quan trọng trong việc thu thập dữ liệu từ các thiết bị đầu vào/ra Khi hệ thống cần thông tin từ thiết bị ngoại vi hoặc cảm biến, yêu cầu này được gửi để đọc dữ liệu và truyền về cho hệ thống, từ đó giúp cập nhật và xử lý thông tin mới nhất.
Yêu cầu ghi I/O là một phần quan trọng trong hệ thống, được sử dụng để ghi dữ liệu và điều khiển các thiết bị đầu vào/ra Khi cần quản lý hoạt động của thiết bị ngoại vi hoặc cảm biến, yêu cầu này sẽ được gửi đến thiết bị để thực hiện các lệnh điều khiển hoặc ghi dữ liệu mới, đảm bảo rằng các thiết bị hoạt động chính xác và đáp ứng yêu cầu của hệ thống.
Yêu cầu tin nhắn (Message Request) là một công cụ quan trọng để gửi thông điệp từ hệ thống đến thiết bị khác, giúp thiết lập liên lạc và thông báo thông tin giữa các thành phần trong mạng Điều này đảm bảo rằng thông tin được truyền tải chính xác và hiệu quả.
Giao dịch trong hệ thống bao gồm hai phần chính là Yêu cầu (Request) và Hoàn thành (Completion), được truyền tải và giao tiếp giữa các thiết bị thông qua các gói tin (TLP).
Hình 3.1 (Hình 2.2 trang 105 [4]) cung cấp cái nhìn tổng quan về TLP (Transaction Layer Dữ liệu), bao gồm một hoặc nhiều TLP Prefix tùy chọn, giúp xác định mục đích và thuộc tính của gói tin.
TLP Header chứa thông tin quan trọng về quá trình truyền tải dữ liệu, trong khi Payload chứa thông tin cụ thể được truyền đi cho một số loại gói tin Cuối cùng, TLP Digest là tùy chọn, có thể cung cấp thông tin bổ sung để kiểm tra lỗi thông qua mã CRC.
Hình 3.1: Định dạng TLP Header [4]
Hình 3.2 cung cấp một cái nhìn chi tiết và phức tạp về cấu trúc và thành phần của TLP, làm nổi bật cách mà các thành phần khác nhau kết hợp và tương tác để tạo thành một gói tin hoàn chỉnh.
Hình 3.2: Định TLP Header chi tiết (big endian formart) [4]
TLP Prefixes trong giao thức PCIe đóng vai trò quan trọng trong việc mở rộng và cung cấp thông tin bổ sung cho các gói tin truyền tải Chúng định rõ loại TLP, mức ưu tiên và thiết bị đích đến, từ đó giúp tối ưu hóa và quản lý hiệu quả quá trình truyền tải dữ liệu.
THIẾT KẾ HỆ THỐNG
Yêu cầu và lưu ý thiết kế hệ thống
4.1.1 Yêu cầu của hệ thống
• Hỗ trợ nhiều kênh truyền
Hỗ trợ truyền và nhận dữ liệu hiệu quả bao gồm việc nhận đầy đủ dữ liệu, trong đó toàn bộ chuỗi dữ liệu cần được gửi đi để đảm bảo quá trình xử lý diễn ra chính xác Bên cạnh đó, xáo trộn dữ liệu theo kênh cho phép nhận nhiều kênh truyền đồng thời mà không cần phân biệt thứ tự gửi, tạo thuận lợi cho việc xử lý dữ liệu nhanh chóng và linh hoạt.
Hỗ trợ xử lý tắc nghẽn là một tính năng quan trọng, giúp đảm bảo rằng khi một kênh truyền hoặc nhận gặp sự cố, các kênh khác vẫn hoạt động bình thường Kênh bị tắc nghẽn sẽ tự động xóa dữ liệu để khôi phục lại khả năng truyền tải, từ đó duy trì hiệu suất tổng thể của hệ thống.
• Giải mã TLP Header: giải mã Header để lấy nhưng thông tin cần thiết
• Khởi tạo TLP Header: nhận thông tin từ các thành phần trong chip sau đó khởi tạo
Hỗ trợ dừng hoạt động mà vẫn đảm bảo tính toàn vẹn của dữ liệu là rất quan trọng Khi xảy ra sự cố ở đầu nhận hoặc không nhận dữ liệu, dữ liệu đã được truyền trước đó sẽ được bảo toàn cho đến khi kênh truyền hoạt động trở lại Điều này giúp ngăn chặn mất mát hoặc sai lệch dữ liệu.
Các thông tin bao gồm TLP, thông tin giải mã từ Header sẽ dùng struct để dễ dàng thực hiện trong việc thiết kế
• TLP được xếp theo dạng đóng gói từ MSB đến LSB (Bảng 4.1 và Bảng 4.2)
TLP 512b struct typedef struct packed { logic [511:0] dat logic [5:0] nob logic sop logic eop
TLP 256b struct typedef struct packed { logic [255:0] dat logic [4:0] nob logic sop logic eop
• Thông tin giải mã từ TLP Header struct (Bảng 4.3)
Bảng 4.3: AXI-Stream TUSER struct typedef struct packed { Mô tả logic [1:0] trans_typ; 2’b00: Memory
Tự định nghĩa logic rw_req; 0: write
Tự định nghĩa logic add_req; 0: 3DW
The article defines various logic parameters according to the PCIe standard, including logic for tags, attributes, traffic classes, and other control signals Specifically, it outlines the definitions for logic tags as {T9, T8, Tag[7:0]}, attributes as {Attr2, Attr[1:0]}, traffic classes as TC, and additional signals such as LN, TH, TD, EP, and AT, each represented with their respective bit configurations.
The PCIe standard defines various logic parameters essential for communication, including 19-bit logic for LBE, 32-bit logic for high addresses (haddr), and 30-bit logic for low addresses (laddr) Additionally, it specifies 2-bit logic for PH, 16-bit logic for Requester ID (req_id), 8-bit logic for Bus Number (bus_num), 5-bit logic for Device Number (dev_num), and 3-bit logic for Function Number (fcn_num) The standard also includes 3-bit logic for Completion Status (cpl_sta), logic for BCM, and 7-bit logic for Lower Address (cpl_laddr).
Theo chuẩn PCIe logic [3:0] cfg_xtreg_num; Xt Reg Num Theo chuẩn PCIe logic [5:0] cfg_reg_num; Reg Num Theo chuẩn PCIe logic [11:0] byte_cnt; Tự định nghĩa
• AXI-Stream TUSER struct (Bảng 4.4)
Bảng 4.4: AXI-Stream TUSER struct
AXI-Stream TUSER struct typedef struct packed { mux_user_t user_info; logic sop;
Sơ đồ khối và hoạt động
Hình 4.1: Sơ đồ khối hệ thống tổng quan
Hình 4.2: Sơ đồ khối hệ thống chi tiết (datapath)
4.2.2 Các khối giao tiếp với TLM và TLM
Trong thiết kế này, thiết bị giao tiếp với Core thông qua TLM là CXL (Compute Express Link) sử dụng chuẩn giao tiếp là PCIe 5.0
Bộ điều khiển CXL (Compute Express Link) là một thành phần thiết yếu trong hệ thống sử dụng giao thức CXL/PCIe, có nhiệm vụ quản lý và điều phối dữ liệu giữa các thiết bị và thành phần khác nhau trong hệ thống.
Bộ điều khiển CXL thường được tích hợp vào các chip điều khiển (SoC) hoặc card mở rộng, chịu trách nhiệm quản lý giao tiếp giữa CPU, GPU, FPGA, bộ nhớ và các thiết bị lưu trữ khác thông qua giao thức CXL/PCIe Nó cũng điều khiển truy cập bộ nhớ và dữ liệu giữa các thiết bị, đồng bộ hóa hoạt động, đảm bảo hiệu suất và độ tin cậy của hệ thống.
Hình 4.3: Sơ đồ khối CXL
Bảng 4.5: Chân tín hiệu CXL [3]
Tên tín hiệu Chiều Độ rộng Mô tả
TX CXL tl_tx_wait0 output 1 Tích cực khi CXL không nhận dữ liệu tl_tx_data0 input CXL0: 512
Dữ liệu ngõ vào tl_tx_valid0 input CXL0: 16
1 bit valid tương ứng 4 Byte data tl_tx_sop0 input 1 Input start of dữ liệu tl_tx_eop0 input 1 Input end of dữ liệu
RX CXL tl_rx_wait0 input 1 Tích cực khi phía nhận dữ liệu từ CXL không nhận dữ liệu tl_rx_data0 output CXL0: 512
Dữ liệu ngõ ra tl_rx_valid0 output CXL0: 16
1 bit valid tương ứng 4 Byte data tl_rx_sop0 output 1 Output start of dữ liệu tl_rx_eop0 output 1 Output end of dữ liệu
Trong thiết kế chip, Core bao gồm các thành phần chính với nhiều module khác nhau để xử lý dữ liệu từ CXL qua giao thức TLM Mục đích xử lý dữ liệu phụ thuộc vào yêu cầu thiết kế cụ thể Trong bối cảnh thiết kế TLM, giao tiếp giữa TLM và Core chủ yếu dựa trên chuẩn AXI-Stream.
Giao thức AXI-Stream là công nghệ giao tiếp quan trọng trong thiết kế hệ thống trên chip SoC, được phát triển để đáp ứng nhu cầu truyền dữ liệu liên tục và không đồng bộ giữa các module.
Stream đã trở thành một lựa chọn phổ biến trong việc xây dựng các hệ thống có hiệu suất cao và độ tin cậy
Trong hệ thống SoC (System on Chip), truyền dữ liệu giữa các module là quy trình thiết yếu Để đáp ứng yêu cầu về tốc độ, độ tin cậy và khả năng mở rộng, việc thiết kế cơ chế giao tiếp hiệu quả trở nên phức tạp AXI-Stream đã giải quyết những thách thức này bằng cách tối ưu hóa quá trình truyền dữ liệu và giảm thiểu sự phức tạp của giao thức.
AXI-Stream nổi bật với tính chất không đồng bộ, cho phép các module trong hệ thống hoạt động độc lập và hiệu quả Tính năng này không chỉ nâng cao hiệu suất tổng thể mà còn tạo điều kiện thuận lợi cho việc tích hợp và mở rộng hệ thống trong tương lai.
AXI-Stream cung cấp cơ chế linh hoạt cho việc xử lý dữ liệu liên tục, hỗ trợ nhiều ứng dụng như xử lý tín hiệu số, hình ảnh và video Tính linh hoạt và khả năng tùy chỉnh của AXI-Stream làm cho nó trở thành công nghệ mạnh mẽ và phổ quát trong thiết kế hệ thống điện tử và viễn thông.
❖ Các tín hiệu chính của AXI-Stream (theo chuẩn của AMBA) [1]:
• TVALID: khi tín hiệu này ở mức cao (HIGH) có nghĩa là bên hướng truyền TX
(Transmiter) đang có gói tin khả dụng (valid transfer)
• TREADY: khi tín hiệu này ở mức cao (HIGH) có nghĩa là bên hướng nhận RX
(Receiver) có thể nhận được gói tin từ hướng truyền TX
TDATA là gói tin chứa dữ liệu được truyền giữa hai thiết bị, và việc truyền chỉ diễn ra khi cả tín hiệu TVALID và TREADY đều ở mức cao (HIGH), thể hiện quá trình bắt tay (Handshake) trong giao thức AXI-S.
• TSTRB: chỉ ra số byte khả dụng trong TDATA khi truyền
• TKEEP: tương tự như TSTRB nhưng TKEEP nhưng ở tầng thấp hơn
• TLAST: chỉ ra valid cuối cùng của gói tin khi truyền
• TID: chỉ ra ID từ thiết bị truyền đến trong 1 hệ thống giao tiếp nhiều thiết bị
• TUSER: chứa những thông tin cần thiết trong gói tin (người dùng tự định nghĩa)
Hình 4.4: Cách bắt tay (Handshake) trong AXI-Stream [1]
Hình 4.5: Sợ đồ khối Core
Bảng 4.6: Chân tín hiệu Core [1]
Tên tín hiệu Chiều Độ rộng Mô tả
The TX Core features an i_axis_tready input for TREADY and an o_axis_tvalid output for TVALID, alongside a 512-bit output for o_axis_tdata (TDATA) It also includes an o_axis_tid output with 2 bits (TID), a 64-bit output for o_axis_tkeep (TKEEP), a 1-bit output for o_axis_tlast (TLAST), and an o_axis_tuser output structured as user_info_t (TUSER).
The RX Core includes several key inputs and outputs for data handling: the o_axis_tready output indicates readiness with a 1-bit TREADY signal, while the i_axis_tvalid input signifies valid data through a 1-bit TVALID signal The i_axis_tdata input carries 512 bits of data as TDATA, and the i_axis_tid input contains a 2-bit identifier as TID Additionally, the i_axis_tkeep input supports a 64-bit keep signal, the i_axis_tlast input marks the end of a packet with a 1-bit TLAST signal, and the i_axis_tuser input is structured as user_info_t for additional user-defined information.
Transaction Layer Modeling (TLM) là một module quan trọng trong việc mô hình hóa và tối ưu hóa Transaction Layer theo tiêu chuẩn PCIe TLM hoạt động như một thành phần trung gian, giúp các thiết bị giao tiếp qua PCIe truyền và nhận dữ liệu một cách linh hoạt và hiệu quả Ngoài việc làm kênh truyền thông giữa các thiết bị, TLM còn quản lý giao tiếp và đảm bảo mã hóa, giải mã các gói tin dữ liệu (TLPs) một cách chính xác và an toàn.
TLM đảm nhận vai trò quan trọng trong việc kiểm soát luồng dữ liệu và đồng bộ hóa tốc độ truyền thông giữa các thiết bị Nó hỗ trợ xử lý lỗi và phục hồi dữ liệu khi có sự cố, từ đó nâng cao tính toàn vẹn và độ tin cậy của quá trình truyền thông Nhờ vào TLM, dữ liệu truyền qua mạng PCIe luôn được đảm bảo đến đúng đích.
Hình 4.6: Vị trí của TLM trong chip
Hình 4.6 minh họa vị trí của TLM trong chip, nơi mà CXL controller thực hiện chức năng giao tiếp với Host thông qua dữ liệu đầu vào là TLP Để truyền TLP vào chip core, cần phải sử dụng TLM.
Hình 4.7: Các khối giao tiếp với TLM
❖ Ứng dụng trong hệ thống:
Khi các thiết bị tham gia hệ thống (CXL Device) gửi các gói tin dữ liệu, TLM sẽ đảm nhận trách nhiệm vận chuyển các gói tin này
Quản lý lưu lượng truy cập khi nhiều thiết bị CXL gửi dữ liệu cùng lúc là rất quan trọng Điều này đảm bảo rằng dữ liệu được truyền đi và nhận về một cách liên tục và an toàn.
Gắn Header (truyền từ PCIe Handler) vào Payload Tách Header ra khỏi Payload
Chịu trách nhiệm giải mã / khởi tạo TLP Header
Chuyển đổi dữ liệu sang chuẩn giao tiếp AXI-Stream để truyền về Core theo hướng RX, đồng thời nhận dữ liệu từ Core và quản lý theo kênh dựa vào ID theo hướng TX.
4.2.3 Hoạt động của hệ thống
Việc vận chuyển gói tin TLPs trong hệ thống gồm 2 hướng:
Thiết kế hệ thống
FIFO (First In First Out) là một thành phần thiết yếu trong thiết kế vi mạch, đảm nhiệm vai trò lưu trữ dữ liệu theo thứ tự thời gian Nguyên tắc hoạt động của FIFO là dữ liệu được nhập vào trước sẽ được xuất ra trước, đảm bảo tính nhất quán và hiệu quả trong việc xử lý thông tin.
Thiết kế FIFO dựa trên RAM cho phép lưu trữ dữ liệu vào RAM thay vì sử dụng thanh ghi Trong trường hợp tổng số bit mà FIFO có thể lưu trữ nhỏ hơn hoặc bằng 3072 bit, việc sử dụng thanh ghi sẽ là lựa chọn tối ưu để lưu trữ dữ liệu.
Trong PCIe, chuỗi dữ liệu từ SOP đến EOP có độ dài tối đa là 1024 DW, tương đương với 4096 Byte (32768 bit) Do lượng bit cần lưu trữ lớn, việc thiết kế FIFO sẽ sử dụng RAM để lưu trữ dữ liệu hiệu quả.
FIFO Req/Ack được thiết kế dựa theo cách bắt tay giữa tín hiệu Request và Acknowledge, giống như TVALID và TREADY của AXI-Stream
Hình 4.10: Cách Req/Ack bắt tay trường hợp hợp 1
Hình 4.11: Cách Req/Ack bắt tay trường hợp 2
❖ Đặc điểm RAM sử dụng
• SRAM cổng kép: có thể đọc và ghi cùng thời điểm
• Đọc dữ liệu mất 2 clock: dữ liệu sẽ có sau 2 clock kể từ khi việc yêu cầu đọc dữ liệu từ RAM xảy ra
• Trong thực tế trong SRAM được sử dụng trong thiết kế chip, còn gọi là RAM
Chip hay RAM nội bộ cho phép đọc dữ liệu với độ trễ 0 Tuy nhiên, do dữ liệu được lấy từ mạch tổ hợp, có thể xảy ra sai sót và thiếu chính xác về timing Để cải thiện timing, các nhà sản xuất SRAM thường áp dụng phương pháp làm trễ 1 clock sau khi đọc dữ liệu, tiếp theo là thêm 1 clock nữa để kiểm tra độ chính xác và sửa lỗi Do đó, tổng thời gian để dữ liệu có thể sử dụng được với độ chính xác và toàn vẹn là 2 clock sau khi thực hiện đọc.
Hình 4.12: Sơ đồ khối FIFO Req/Ack
Việc đọc dữ liệu từ RAM gặp phải độ trễ 2 clock, dẫn đến việc sử dụng dữ liệu sau khi đọc sẽ chậm hơn so với quá trình bắt tay giữa Request (Req) và Acknowledge (Ack) Để khắc phục điều này, chúng tôi sẽ thiết kế một FIFO với chức năng lưu trữ dữ liệu sau khi đọc từ RAM thông qua thanh ghi (FIFO Adapt).
FIFO Adapt được thiết kế để đọc dữ liệu thông qua giao diện Req/Ack Khi còn khả năng lưu trữ, FIFO Adapt sẽ tự động đọc dữ liệu từ RAM để đảm bảo luôn có dữ liệu sẵn sàng.
FIFO Req/Ack còn có những tín hiệu trạng thái để kiểm tra được trạng thái của FIFO và dùng cho những ứng dụng khác
• RAM: Dùng để lưu trữ dữ liệu được ghi vào FIFO Số lượng có thể lưu trữ tối đa là 64
• FIFO Control: Điều khiển việc đọc và ghi dữ liệu vào RAM
• FIFO Adapt: Giao tiếp/lưu trữ dữ liệu từ RAM Đảm bảo việc đọc dữ liệu theo interface Req/Ack
Bảng 4.7: Chân tín hiệu FIFO Req/Ack
Chân tín hiệu bao gồm các thông số sau: clk input 1 với tần số 1.6 GHz, rst_n input 1 dùng để reset toàn bộ dữ liệu về 0, ffwr input 1 là tín hiệu cho phép ghi dữ liệu vào FIFO, ffwrdi input 512/256 chứa dữ liệu được ghi vào FIFO Ngoài ra, ack input 1 được sử dụng để đọc dữ liệu từ FIFO, req output 1 tích cực khi FIFO có dữ liệu, reqinfo output 512/256 cung cấp dữ liệu trong FIFO, và fftfull output 1 tích cực khi FIFO gần đầy.
FIFO có thể lưu trữ - 2) fffull output 1 Tích cực khi FIFO đầy fflen output 7 Thể hiện số lượng data hiện tại trong
• Khi có tín hiệu reset, dữ liệu trong RAM và FIFO Adapt đều trống (Hình 4.12)
Sau khi thực hiện reset, dữ liệu đầu tiên sẽ được ghi vào FIFO Adapt để đảm bảo việc đọc dữ liệu diễn ra khi nhận được tín hiệu Ack Nếu tín hiệu Ack không xuất hiện, dữ liệu sẽ tiếp tục được ghi vào FIFO Adapt cho đến khi bộ nhớ đầy Quá trình này được minh họa từ Hình 4.13 đến Hình 4.19.
Hình 4.13: FIFO req/ack sau khi reset
Hình 4.14: FIFO req/ack ghi dữ liệu 1
Hình 4.15: FIFO req/ack ghi dữ liệu 2
Hình 4.16: FIFO req/ack ghi dữ liệu 3
Hình 4.17: FIFO req/ack ghi dữ liệu 4
Hình 4.18: FIFO req/ack ghi dữ liệu 5
Hình 4.19: FIFO req/ack ghi dữ liệu 6
Hình 4.20: FIFO req/ack ghi dữ liệu 7
Khi FIFO Adapt được đầy, dữ liệu tiếp theo sẽ được lưu vào RAM Quá trình này tiếp tục diễn ra cho đến khi đạt đến giới hạn lưu trữ của RAM.
Khi FIFO Adapt và RAM cùng chứa dữ liệu, việc đọc dữ liệu từ FIFO Adapt đồng thời với RAM giúp lấp đầy khoảng trống dữ liệu vừa đọc Điều này đảm bảo quá trình ghi và đọc dữ liệu diễn ra liên tục và nhanh chóng, không bị ảnh hưởng bởi độ trễ trong việc truy xuất dữ liệu từ RAM.
Hình 4.21: FIFO req/ack đọc dữ liệu 1
Hình 4.22: FIFO req/ack đọc dữ liệu 2
Hình 4.23: FIFO req/ack đọc dữ liệu 3
Hình 4.24: FIFO req/ack đọc dữ liệu 4
Hình 4.25: FIFO req/ack đọc dữ liệu 5
Hình 4.26: FIFO req/ack đọc dữ liệu 6
Hình 4.27: FIFO req/ack đọc dữ liệu 7
• Đóng vai trò giao tiếp với thiết bị CXL Hỗ trợ giao tiếp đa thiết bị
• Quản lý lưu lượng: mỗi thiết bị sẽ có tốc độ truyền/nhận khác nhau Quản lý việc truyền dữ liệu theo thứ tự
Hình 4.28: Sơ đồ khối RX Shift
Bảng 4.8 trình bày chân tín hiệu của module RX Shift, bao gồm các tín hiệu như clk, rst_n và tl_rx_data0 Tín hiệu clk là đầu vào với tần số 1.6GHz, tín hiệu rst_n dùng để reset toàn bộ dữ liệu về 0, và tín hiệu tl_rx_data0 có 4 đầu vào cho CXL0 với độ rộng 512.
CXL1/2/3: 256 Data được truyền từ CXL tl_rx_valid0 input 4 CXL0: 16
1 bit valid tướng ứng với
The 4-byte data structure includes the tl_rx_sop0 input, which signifies the start of the data, marking the first piece of information The tl_rx_eop0 input indicates the end of the data, highlighting the last segment Additionally, the i_ack input serves as an acknowledgment signal from the Round, confirming the receipt of data.
Robin Mux o_req output 4 1 Tín hiệu Req tích cực khi có data o_tlp output 4
• Giao tiếp với CXL (truyền/nhận dữ liệu)
• Chuyển đổi dữ liệu từ CXL thành TLP
FIFO là một phương pháp quản lý dữ liệu hiệu quả, sử dụng thanh ghi để lưu trữ dữ liệu như một bộ đệm, nhằm cải thiện thời gian nhận dữ liệu từ CXL.
Hình 4.29: Sơ đồ khối module RX Adapt
Bảng 4.9: Chân tín hiệu module RX Adapt
Tên tín hiệu Chiều Độ rộng Mô tả clk input 1 Clock 1.6GHz rst_n input 1 Reset toàn bộ dữ liệu được lưu trữ về
0 tl_rx_valid0 input CXL0: 16
CXL1/2/3: 8 1 bit valid tương ứng với 4 byte data tl_rx_data0 input CXL0: 512
CXL1/2/3 features a 256 data input, with tl_rx_sop0 marking the start of the data and tl_rx_eop0 indicating the end of the data Additionally, tl_rx_wait0 serves as an output signal.
Khi FIFO ở trạng thái đầy và không có tín hiệu ack để đọc FIFO Thì tín hiệu wait sẽ được kích hoạt để CXL không truyền dữ liệu
42 i_ack input 1 Acknowledge từ module RX Shift o_req output 1 Request khi FIFO có dữ liệu o_tlp output
Dữ liệu từ CXL sẽ được lưu trữ trong FIFO, bao gồm các thông tin như data, sop, eop và valid Khi FIFO có dữ liệu, tín hiệu o_req sẽ được kích hoạt.
Chức năng dừng tạm thời của hệ thống
Chức năng dừng hay Back pressure là một tính năng quan trọng giúp đầu nhận và đầu truyền giao tiếp hiệu quả trong quá trình truyền và nhận dữ liệu Tính năng này đảm bảo rằng dữ liệu không bị thất thoát khi đầu nhận gặp sự cố hoặc ngừng nhận dữ liệu.
Có hai dạng back pressure là: End to End và Point to Point
4.4.2 So sánh và kết luận
❖ Back pressure End to End
Back pressure theo dạng End to End đề cập đến việc chỉ có điểm đầu và điểm cuối trong giao tiếp, với đầu xa không quan tâm đến thời gian của các thành phần ở giữa.
Hình 4.50: Back pressure End to End
Hình 4.50 thể hiện áp lực ngược giữa Core và CXL, trong đó Core sẽ gửi tín hiệu cho CXL dừng gửi dữ liệu khi không nhận được dữ liệu Ưu điểm của phương pháp này là sự đơn giản trong thiết kế giao tiếp giữa đầu truyền và nhận Tuy nhiên, người dùng sẽ không thể nhận biết được độ trễ khi dữ liệu được truyền qua TLM.
Việc thiết kế back pressure theo mô hình End to End cho hệ thống dữ liệu có thể dẫn đến sai lệch và mất mát dữ liệu trong quá trình truyền tải.
❖ Back pressure Point to Point
Hình 4.51: Back pressure Point to Point
Khác với mô hình End to End, back pressure theo kiểu Point to Point mang lại tính linh hoạt và khả năng kiểm soát dữ liệu hiệu quả trong quá trình hoạt động Mô hình này cho phép truyền và nhận dữ liệu thông qua giao tiếp giữa các khối riêng lẻ trong hệ thống, tuy nhiên, thiết kế của nó có độ phức tạp cao hơn so với mô hình End to End.
❖ Kết luận: Do TLM giữ vai trò quan trọng trọng việc truyền dữ liệu vào trong
Core Nên sẽ thiết kế backpress dạng Point to Point trong hệ thống
KẾT QUẢ MÔ PHỎNG VÀ SYNTHESIS
Kết quả mô phỏng
Kiểm tra hoạt động của hệ thống khi truyền dữ liệu vào ngõ vào là rất quan trọng Kết quả mong đợi là dữ liệu ở ngõ ra phải giống và đầy đủ như chuỗi dữ liệu ban đầu, đồng thời Header cần được tách riêng khỏi dữ liệu.
• TLP Header format: Memory write request 3DW
• Tổng độ dài 1 dữ liệu: 4096 Byte (1024 DW) chia nhỏ thành 64 gói dữ liệu
▪ Nob: 64 Byte/gói dữ liệu
▪ Data: chuỗi dữ liệu theo thứ tự dữ liệu (Hình 5.1, Hình 5.2, Hình 5.3) Ví dụ:
Hình 5.1: RX Testcase 1 gói dữ liệu ngõ vào 0
Hình 5.2: RX Testcase 1 gói dữ liệu ngõ vào 1
Hình 5.3: RX Testcase 1 gói dữ liệu ngõ vào 2
Hình 5.4: RX Testcase 1 gói dữ liệu ngõ ra 0
Trong Hình 5.4, 52 Byte đầu của tín hiệu o_axis_tdata là 0, đại diện cho phần dữ liệu của gói dữ liệu 0 sau khi đã tách Header Tiếp theo, 12 Byte sau đó chứa chuỗi 0101_0101_0101_0101_0101_0101, tương ứng với 16 Byte đầu của gói dữ liệu ngõ vào 1.
Hình 5.5: RX Testcase 1 output valid 1
Tương tự trong Hình 5.5 ở clock tiếp theo 48 Byte đầu là gói dữ liệu ngõ vào
1, 12 Byte tiếp theo là dữ liệu của gói dữ liệu ngõ vào 2
Hình 5.6: RX Testcase 1 gói dữ liệu ngõ ra 2
Tương tự trong Hình 5.6 ở clock tiếp theo 48 Byte đầu là dữ liệu của gói dữ liệu ngõ vào 2, 12 Byte tiếp theo là gói dữ liệu ngõ vào 3
Hình 5.7: RX Testcase 1 output EOP
Trong Hình 5.7, dữ liệu tại EOP có 52 Byte đầu tiên là ‘h…3f3f3f, với giá trị ‘h3f tương ứng với 63, khớp với giá trị của gói dữ liệu cuối là chuỗi số 63 (‘h3f) 12 Byte cuối cùng là 0, cho thấy phần Header đã được tách khỏi chuỗi gói dữ liệu ban đầu.
Hình 5.8: RX Testcase 1 output tuser
In Figure 5.8, the signal o_axis_tuser is observed with trans_typ set to 0, rw_req at 0, and add_req also at 0, indicating that the Header represents a Memory Read request as required by the testcase The fields lbe and fbe are both equal to "hf," with req_id being 'h00aa' and laddr set to 0000_00bb Additionally, the length field is 0, which corresponds to 4096 Bytes, matching the initial data of the Header.
Trong bài kiểm tra đầu tiên, dữ liệu được truyền vào input liên tục, nhưng khi hệ thống phát tín hiệu wait (wait = 1’b1), dữ liệu ở input sẽ được giữ lại cho đến khi wait trở về 1’b0 Khi wait về 1’b0, quá trình truyền dữ liệu ở ngõ vào sẽ tiếp tục Tương tự, trong bài kiểm tra thứ hai, dữ liệu ở ngõ ra cũng được kiểm tra để đảm bảo tính chính xác và đầy đủ như ban đầu.
• Loại TLP Header: Memory write request 3DW
• Tổng độ dài 1 dữ liệu: 4096 Byte (1024 DW) chia nhỏ thành 64 gói dữ liệu
▪ Data: chuỗi dữ liệu theo thứ tự dữ liệu Ví dụ: Gói dữ liệu 0: {Header,416’h…00000000} Gói dữ liệu 1 “512’h….010101010101”
Khi tín hiệu tl0_rx_wait0 = 1’b1, dữ liệu từ CXL sẽ bị giữ lại cho đến khi tín hiệu này chuyển thành 1’b0, cho phép tiếp tục truyền Trong Hình 5.9, tín hiệu tl0_rx_wait0 = 1’b1 xuất hiện ở dữ liệu thứ 3 với giá trị ‘h…0505, và giá trị này được giữ lại cho đến khi tl0_rx_wait0 = 1’b0 Kết quả ngõ ra của gói dữ liệu thứ 3 vẫn giữ nguyên giá trị ‘h 0505 Qua testcase 2, tính năng dừng hoạt động của hệ thống đã được kiểm chứng thành công.
Dự liệu được truyền vào ngõ vào là chuỗi dữ liệu theo thứ tự giống với testcase
Khi thực hiện kiểm tra với testcase, kênh 0 và kênh 1 đều truyền dữ liệu, dẫn đến việc cả hai kênh đều có kết quả dữ liệu ngõ ra mong muốn Tuy nhiên, có sự khác biệt giữa dữ liệu ngõ ra của kênh 0 và kênh 1, cụ thể là độ dài dữ liệu: kênh 0 có độ dài 64 Byte, trong khi kênh 1 chỉ có 32 Byte.
• Dạng TLP Header: Memory read request 4DW
• Tổng độ dài 1 dữ liệu: 4096 Byte (1024 DW) chia nhỏ thành 64 valid
▪ Data: chuỗi dữ liệu theo thứ tự dữ liệu Ví dụ:
• Loại TLP Header: Memory read request 3DW
• Tổng độ dài 1 dữ liệu: 2048 Byte (512 DW) chia nhỏ thành 64 gói dữ liệu
▪ Nob: 32 Byte/gói dữ liệu
▪ Data: chuỗi dữ liệu theo thứ tự dữ liệu (Hình 5.10) Ví dụ:
Hình 5.10: RX Testcase 3 dữ liệu ngõ vào
Hình 5.11: RX Testcase dữ liệu ngõ ra
Hình 5.12: RX Testcase 3 dữ liệu ngõ ra channel 1
Trong Hình 5.11 và Hình 5.12 dữ liệu ngõ ra channel 1 tại SOP gồm: 20 Byte
Gói dữ liệu 0, sau khi tách 12 Byte Header, sẽ có 32 Byte cho Gói dữ liệu 1 và 12 Byte cho Gói dữ liệu 2, phần bù dữ liệu sau khi tách Header Kết quả dữ liệu ngõ ra phù hợp chính xác với kịch bản của testcase 3.
Hình 5.13: RX Testcase 3 Channel 1 TUSER
The TUSER results in Figure 5.13 indicate that with trans_typ set to 0, rw_req equal to 1, and add_req at 0, the Header corresponds to a Memory Read Request of 3DW The laddr field is 0000_00cc, the req_id field is 0044, and the byte_cnt field is 2048 bytes These findings align with the Header input at channel 1.
Hình 5.14: RX Testcase 3 Channel 0 TUSER
Kết quả TUSER ở Hình 5.14 với trans_typ = 0, rw_req = 1 và add_req = 1 xác định Header là Memory Read Request 4DW Các trường haddr, laddr, req_id và byte_cnt lần lượt có giá trị 0000_00aa, 0000_00bb, 0033 và 0 (1024 byte) Những kết quả này phù hợp với Header được đưa vào qua ngõ vào kênh 0.
Kiểm tra hoạt động của hệ thống bằng cách truyền chuỗi dữ liệu vào đầu vào Kết quả mong đợi là dữ liệu ở đầu ra phải giống hệt và đầy đủ như chuỗi dữ liệu ban đầu, cùng với Header được khởi tạo đúng cách.
The Memory Read request for the 4DW interface includes several user information parameters: the transaction type is set to '00', indicating a read operation, while the read/write request is '1', confirming it's a read request The address request is also '1', specifying the need for address information Other parameters such as tag, attribute, and various status flags are set to '0', indicating default or inactive states The last byte enable (lbe) and first byte enable (fbe) are both set to 'hF', allowing full byte access The high address (haddr) is 'hAA', and the low address (laddr) is 'hBB' The request ID is 'hCC', with completion ID, status, and related fields set to '0', signifying no completion or additional configurations The configuration register numbers and byte count are also set to '0', indicating no specific configurations or data transfer requirements.
• Tổng độ dài dữ liệu 1 dữ liệu: 4096 Byte (1024 DW) chia nhỏ thành 64 gói dữ liệu
▪ Nob: 64 Byte/gói dữ liệu
▪ Data: chuỗi dữ liệu theo thứ tự dữ liệu (Hình 5.15) Ví dụ:
Hình 5.15: TX Testcase 1 dữ liệu ngõ vào channel 0
Hình 5.16: TX Testcase 1 output Gói dữ liệu 0
Quan sát Hình 5.16 ta thấy 16 Byte đầu tiên của dữ liệu ngõ ra
Header 2000_0010_00cc_00ff_0000_00aa_0000_02ec được tạo ra từ thông tin của TUSER Byte đầu tiên có giá trị 20 (8’b00100000), theo “bảng 3.3” và “bảng 3.2”, cho thấy đây là loại Memory Read request 4DW, đúng theo yêu cầu của testcase.
Hình 5.17: TX Testcase 1 output Gói dữ liệu 1
Hình 5.18: TX Testcase 1 output Gói dữ liệu 2
Dữ liệu đầu vào sẽ được xáo trộn theo từng kênh mà không quan tâm đến thứ tự truyền Sau khi xáo trộn, cần kiểm tra từng kênh đầu ra để đảm bảo rằng dữ liệu đầu ra của chuỗi dữ liệu là chính xác và đầy đủ.
The Memory Read request for 4DW indicates that the transaction type is set to '00', with a read request (rw_req) and an address request (add_req) both enabled The user information includes a tag of '0' and attributes such as tc, lnf, th, td, ep, and at all set to '0' The last byte enable (lbe) and first byte enable (fbe) are both set to 'hF', while the high address (haddr) is 'hAA' and the low address (laddr) is 'hBB' The physical address (ph) is '0', the request ID (req_id) is 'hCC', and both the completion ID (cpl_id) and completion status (cpl_sta) are '0' The completion byte count (cpl_bcm) and completion low address (cpl_laddr) are also '0', with configuration register numbers (cfg_xtreg_num and cfg_reg_num) set to '0', and the byte count is specified as '1024'.
• Số lượng dữ liệu: 1/channel
• Tổng độ dài 1 dữ liệu channel 0/1/2/3: 1024 Byte (256DW) chia nhỏ thành 16 valid
▪ Data: chuỗi dữ liệu theo thứ tự dữ liệu (Hình 5.19) Ví dụ:
Hình 5.19: TX Testcase 2 dữ liệu ngõ vào
Hình 5.20: TX Testcase 2 dữ liệu ngõ ra channel 0 Kết quả data ở Hình 5.20 giống với ở testcase 1 Chứng tỏ channel 0 vẫn hoạt động khi có kênh 1
Hình 5.21: TX Testcase 2 dữ liệu ngõ ra channel 1
Kết quả data ở Hình 5.21 tại EOP kết quả data tính từ MSB là 16 Byte ‘0f, phần
16 Byte còn lại là 0 do Header sau khi khởi tạo được chèn vào SOP nên chuỗi dữ liệu bị dịch sang 16 Byte, đúng như mong muốn của testcase
Hình 5.22: TX Testcase 2 dữ liệu ngõ ra kênh 2
Tương tự, kết quả data ở Hình 5.22 tại EOP kết quả dữ liệu tính từ MSB là 16
Kết quả Synthesis
Hệ thống yêu cầu hoạt động ở tần số 1.6GHz, do đó cần thực hiện quá trình synthesis để kiểm tra tính đúng đắn của thiết kế Thông số clock được thiết lập cho quá trình synthesis là 1600Hz, tương ứng với 1.6GHz (Hình 5.24).
Hình 5.24: Thiết lập clock synthesis 1.6GHz
Sau khi tổng hợp, số TNS (Total Negative Slack) đạt giá trị 0, cho thấy không có sự thiếu hụt thời gian trong quá trình truyền dữ liệu giữa các logic Điều này chứng tỏ thiết kế hệ thống đáp ứng yêu cầu hoạt động ổn định ở tần số 1.6GHz.