Thiết kế bộ giao tiếp mạng cho NoC

Một phần của tài liệu Luận án tiến sĩ nghiên cứu noc cấu hình lại được trên FPGA và phát triển thuật toán ánh xạ động ứng dụng trên nền tảng noc (Trang 54 - 59)

CHƯƠNG 2 PHÁT TRIỂN NỀN TẢNG PHẦN CỨNG CẤU HÌNH LẠI ĐƯỢC

2.2. Thiết kế bộ giao tiếp mạng cho NoC

2.2.1. Giới thiệu

Bộ giao tiếp mạng là khối logic rất quan trọng trong cấu trúc của NoC. Chức năng của nó tương tự như chức năng của card mạng kết nối giữa máy tính và mạng Internet [36, 45]

tức là thực hiện kết nối tài nguyên vào mạng tại các vị trí giao diện dữ liệu vào ra của bộ định tuyến [64]. Do sự khác biệt về kích thước dữ liệu, giao diện tín hiệu điều khiển của các tài nguyên với mạng nên bộ giao tiếp mạng có thể thay đổi tùy theo tài nguyên được kết nối với mạng. Bộ giao tiếp mạng có thể chia ra làm hai phần như sau: Phần thứ nhất là phần giao tiếp với bộ định tuyến được xem như phần không phụ thuộc vì dữ liệu vào bộ định tuyến là các flit có kích thước dữ liệu cố định theo thiết kế. Phần thứ hai là phần giao tiếp với tài nguyên, tùy thuộc vào loại tài nguyên mà kích thước dữ liệu có thể thay đổi.

Vì vậy phần này được gọi là phần phụ thuộc.

Có nhiều công trình nghiên cứu về kiến trúc của bộ giao tiếp mạng. Trong [76], các tác giả giới thiệu một kiến trúc của bộ giao tiếp mạng cơ bản cho NoC. Tuy nhiên, hạn chế của nghiên cứu này là trễ cao. Các tác giả trong [15] trình bày một bộ giao tiếp mạng sử dụng kỹ thuật tắt xung đồng hồ cho các khối không hoạt động để cắt giảm năng lượng tiêu thụ. Các tác giả trong [5, 29] sử dụng một kỹ thuật chia sẻ bộ giao tiếp trong mạng để tối ưu diện tích cho NoC. Trong [47], các tác giả sử dụng mã Gray trong thiết kế NI để giảm trễ. Các tác giả trong [23] đề xuất một bộ giao tiếp mạng tương thích với các lõi IP chuẩn AXI đang tồn tại. Bộ giao tiếp này cải thiện trễ trong truy xuất bộ nhớ với cơ chế ghi các gói tin.

Để có thể thực hiện một NoC hoàn chỉnh, trong mục này, tác giả đề xuất một kiến trúc mới cho bộ giao tiếp mạng tương thích với NoC dạng lưới đã được giới thiệu trong Mục 2.1 bằng cách sử dụng kỹ thuật xử lý song song trong quá trình ghi/đọc dữ liệu vào/ra các bộ đệm từ tài nguyên đến bộ định tuyến hoặc ngược lại góp phần vào giảm trễ và tăng hiệu năng cho toàn mạng.

2.2.2. Phương pháp tiếp cận

Hầu hết các bộ giao tiếp mạng hiện có sử dụng một bộ đệm đơn để lưu trữ dữ liệu tạm thời khi dữ liệu được truyền từ tài nguyên đến bộ định tuyến và ngược lại. Bởi vì ghi/đọc dữ liệu vào/ra một bộ đệm đơn không thể xảy ra đồng thời, được minh họa như Hình 2.13, do vậy độ trễ trong bộ giao tiếp mạng có thể tăng cao. Để khắc phục nhược điểm này, ý tưởng của tác giả là cho phép ghi/đọc dữ liệu vào/ra bộ đệm một cách đồng thời bằng cách chia một bộ đệm FIFO đơn với độ sâu K bit thành hai bộ đệm FIFO với độ sâu K/2 bit.

Hai bộ đệm được nối song song để ghi/đọc dữ liệu vào/ra chúng tại cùng một thời điểm như Hình 2.14. Ý tưởng này sẽ được chứng minh bằng lý thuyết để thấy rõ cách tiếp cận đã đề xuất có thể cắt giảm trễ cho bộ giao tiếp mạng là đáng kể.

WR_PK1 RD_PK1 Packet1

FiFo

2MxN clock cycles ...

Packet2 Packet3 PacketM

WR_PK2 RD_PK2 WR_PK3 RD_PK3 ... WR_PKM RD_PKM

Hình 2.13. Quá trình ghi/đọc dữ liệu vào/ra bộ đệm đơn

(MxN + 1) clock cycles

FiFo1

FiFo2

WR_PK0 RD_PK0

WR_PK1 RD_PK1

WR_PK2 RD_PK2 ...

...

WR_PK3 RD_PK3 WR_PKM RD_PKM

(MxN + 1) clock cycles

FiFo1

FiFo2

WR_PK1 RD_PK1

WR_PK2 RD_PK2

WR_PK3 RD_PK3 ...

...

WR_PK4 RD_PK4 WR_PKM RD_PKM

Hình 2.14. Quá trình ghi/đọc dữ liệu vào/ra bộ đệm kép

Giả sử rằng chúng ta muốn truyền M gói tin từ tài nguyên đến bộ định tuyến hoặc ngược lại. Thời gian truyền mỗi gói tin mất N chu kỳ đồng hồ. Như vậy, trễ của NI trong trường hợp sử dụng bộ đệm đơn và bộ đệm kép có thể được tính như sau:

Trễ trong trường hợp sử dụng bộ đệm đơn sẽ là:

2 *M*N (chu kỳ)

Trễ trong trường hợp sử dụng bộ đệm kép sẽ là:

* 1

M N (chu kỳ)

Do đó, trễ có thể được cắt giảm:

(2*M N* ) ( M N*  1) M N* 1 (chu kỳ)

(2.1)

(2.2)

(2.3)

Công thức (2.3) cho thấy khi sử dụng bộ đệm kép thì trễ sẽ được cắt giảm (M*N-1) chu kỳ so với trường hợp sử dụng bộ đệm đơn.

2.2.3. Đề xuất kiến trúc bộ giao tiếp mạng

34 bits

Kiến trúc NI FIFO A

full_FFA empty_FFA rd_en_FFA release_FFA

release_FFB A/B_select Flit_type C2R_READ_CTRL state_FFA

state_FFB req_router router_ack full_FFB empty_FFB rd_en_FFB wr_en_FFA empty_FFA full_FFA

release_FFA release_FFB pkt_size

C2R_WRITE_CTRL state_FFA

core_req state_FFB ack_core

wr_en_FFB empty_FFB full_FFB

FIFO B

32 bits

Flitilizer

router_ack req_router ack_core

core_req

Data_router Core_data

34 bits

FIFO A

full_FFA empty_FFA wr_en_FFA release_FFA pkt_size release_FFB

flit_en R2C_WRITE_CTRL state_FFA

state_FFB ack_router router_req full_FFB empty_FFB wr_en_FFB rd_en_FFA empty_FFA full_FFA

release_FFA release_FFB A/B_select R2C_READ_CTRL state_FFA Core_ack state_FFB req_core

rd_en_FFB empty_FFB full_FFB

FIFO B

De-flitilizer

router_req Router_Data Data_core

req_core core_ack 32 bits

32 bits

Mux

ack_router 32 bits

32 bits

32 bits

32 bits

32 bits

32 bits

32 bits

Hình 2.15. Kiến trúc tổng quát của bộ giao tiếp mạng

Kiến trúc bộ giao tiếp mạng được đề xuất dựa trên ý tưởng như Mục 2.2.2 với các thông số thiết kế NoC đã được lựa chọn trong Mục 2.1 như cấu trúc lưới hai chiều, kỹ thuật chuyển mạch gói, cơ chế điều khiển luồng wormhole kết hợp với kênh ảo, thuật toán định tuyến XY.

Kiến trúc của bộ giao tiếp mạng được đề xuất như Hình 2.15, bao gồm các khối chính sau: Các bộ đệm FIFO AB; các bộ điều khiển ghi/đọc dữ liệu vào/ra WRITE_CTRLREAD_CTRL; các bộ ghép/tách flit Flitilizer/De-Flitilizer mỗi khối sẽ thực hiện một chức năng riêng. Nguyên lý làm việc của các khối trong bộ giao tiếp mạng được diễn ra như sau:

FIFO AB là các bộ đệm FIFO được sử dụng để lưu trữ các gói tin. Mỗi bộ đệm có độ sâu 8 bit (8 ô nhớ) và độ rộng 32 bit vì mỗi flit bao gồm 32 bit dữ liệu và 02 bit nhận dạng loại flit. Bằng cách sử dụng hai FIFO, chúng ta có thể ghi và đọc dữ liệu vào/ra FIFO cùng một lúc. Khi một trong những FIFO được nạp đầy dữ liệu, dữ liệu sẽ được đọc ra từ FIFO này bởi khối READ_CTRL và đẩy đến bộ định tuyến hoặc tài nguyên. Tại cùng thời gian này, FIFO còn lại có thể được sử dụng để ghi dữ liệu mới đến từ tài nguyên hoặc bộ định tuyến. Các bộ đệm FIFO được thiết kế theo tiêu chuẩn vào trước ra trước với các tín hiệu cho phép ghi/đọc, các tín hiệu chỉ thị đầy/trống và độ rộng dữ liệu vào/ra 32 bit.

Trong thời gian hoạt động, ưu tiên ghi/đọc giữa các FIFO là bình đẳng. Ngoài ra, một FIFO chỉ thực hiện một hoạt động tại một thời điểm nhất định (ví dụ hoạt động ghi hoặc đọc).

WRITE_CTRLREAD_CTRL là khối điều khiển ghi/đọc dữ liệu vào/ra các FIFO AB. Khi FIFO nhận được tín hiệu req_in từ tài nguyên, khối WRITE_CTRL bắt đầu ghi flit tiêu đề vào FIFO trống. Nếu không có FIFO trống thì sẽ không có truyền dữ liệu xảy ra. Sau khi truyền, số packet_size được đọc ra từ flit tiêu đề để xác định chế độ ghi/đọc vào các FIFO. Có hai trường hợp thực hiện hoạt động ghi: Trường hợp (packet_size <= 8)(8 <packet_size <= 16). Trong trường hợp thứ nhất, khối WRITE_CTRL sẽ điều khiển ghi tất cả các flit của gói tin vào một FIFO trước khi giải phóng nó để đi vào hoạt động đọc. Trường hợp thứ hai, cả hai FIFO A và B được sử dụng để lưu trữ các gói tin. Khi một FIFO đầy, tín hiệu release của nó được thiết lập. Đồng thời, khối WRITE_CTRL cũng chuyển các flit còn lại của gói tin vào FIFO còn lại trước khi thiết lập tín hiệu release lên mức cao. Khối READ_CTRL sẽ điều khiển đọc các flit từ FIFO A và B theo thứ tự chính xác dựa trên các tín hiệu release từ hoạt động ghi. Một FIFO trong chế độ đọc sẽ gửi một tín hiệu indicator trở lại đến bộ điều khiển ghi để tránh ghi đè lên các dữ liệu hiện hành.

Các tín hiệu indicator sẽ bị xóa tự động khi một FIFO đọc xong tất cả các flit bên trong nó. Các khối điều khiển ghi/đọc WRITE_CTRLREAD_CTRL từ bộ định tuyến đến tài nguyên hoạt động tương tự như khối điều khiển ghi/đọc từ tài nguyên đến bộ định tuyến.

Các quá trình truyền dữ liệu giữa tài nguyên và bộ định tuyến hoạt động theo cơ chế bắt tay req/ack.

Các khối FlitilizerDe-Flitilizer được sử dụng để ghép và tách các bit nhận dạng loại flit (02 bit). Các bit nhận dạng loại flit này được tạo ra bởi khối READ_CTRL theo chiều từ tài nguyên đến bộ định tuyến (C2R: Core to Router) và được Flitilizer ghép vào để tạo ra flit 34 bit chuyển đến bộ định tuyến. Ngược lại, De-Flitilizer thực hiện tách 02 bit nhận dạng loại flit của các flit được truyền từ bộ định tuyến đến tài nguyên (R2C:

Router to Core) để tạo ra các gói tin 32 bit chuyển đến tài nguyên.

2.2.4. Kết quả và đánh giá

Bộ giao tiếp mạng đã đề xuất được mô hình hóa bằng ngôn ngữ Verilog, tổng hợp và mô phỏng bằng ISE 14.1 trên FPGA Virtex-6 chip 6VLX240TFF156. Các thông số như tài nguyên sử dụng, độ trễ, tốc độ hoạt động của NI đã đề xuất sẽ được phân tích và đánh giá. Bảng 2.4 thống kê tài nguyên sử dụng của NI với trường hợp sử dụng bộ đệm đơn và bộ đệm kép. NI sử dụng bộ đệm đơn mất khoảng 0,07% tài nguyên Register và 0,12% tài nguyên LUT so với tổng tài nguyên sẵn có của FPGA, trong khi với phiên bản NI sử dụng bộ đệm kép mất khoảng 0,08% tài nguyên Register và 0,24% tài nguyên LUT. Dễ thấy tài nguyên sử dụng của phiên bản bộ đệm kép tăng so với phiên bản sử dụng bộ đệm đơn, điều này có thể lý giải như sau: Xét về kích thước bộ đệm, gần như hai phiên bản là giống nhau vì bộ đệm kép được tách đôi từ bộ đệm đơn như đã trình bày trong Mục 2.2.2. Tuy nhiên, xét về mặt phức tạp của bộ điều khiển quá trình ghi/đọc trong phiên bản dùng bộ đệm đơn và bộ đệm kép thì phiên bản sử dụng bộ đệm kép có độ phức tạp lớn hơn. Đó cũng là nguyên nhân làm tăng tài nguyên của NI sử dụng bộ đệm kép.

Bảng 2.4. Kết quả tổng hợp trên FPGA

Tổng hợp sử dụng tài nguyên Logic

Utilization Sẵn có NI - 1 FIFO Tác giả

Đã sử

dụng % Đã sử dụng % Slice

Registers 301440 202 0,07 227 0,08 Slice LUTs 150720 186 0,12 361 0,24

IOBs 600 147 24,5 147 24,5

Kết quả tổng hợp cũng cho thấy rằng tốc độ hoạt động của NI do tác giả đề xuất lớn hơn so với tốc độ hoạt động của NI sử dụng bộ đệm đơn và trong nghiên cứu [4]. Nó được thể hiện như trong Bảng 2.5.

Bảng 2.5. Tốc độ hoạt động của các bộ giao tiếp mạng

Các nghiên cứu NI-1

FIFO

[4] Tác giả

MNI SNI

Tốc độ (Mhz) 302 310 252 397

Tiếp theo, chức năng của NI đã đề xuất sẽ được kiểm tra thông qua mô phỏng RTL bằng cách sử dụng một lõi giả (dummy core) và bộ định tuyến. Lõi giả có chức năng tạo ra các gói tin ngẫu nhiên và tiến hành truyền/nhận gói tin đi/đến từ NI. Bộ định tuyến có chức năng nhận và truyền dữ liệu đến lõi giả thông qua NI theo cơ chế bắt tay req/ack.

Kết quả truyền/nhận dữ liệu từ C2R và ngược lại từ R2C là chính xác. Hoạt động ghi/đọc dữ liệu vào/ra bộ đệm song song đã diễn ra. Điều này được thấy rõ trong biểu đồ thời gian

truyền thông giữa tài nguyên và bộ định tuyến như Hình 2.16. Kết quả mô phỏng cũng cho thấy rằng độ trễ truyền/nhận gói tin trung bình trong bộ giao tiếp mạng của tác giả đề xuất (94 chu kỳ đồng hồ) nhỏ hơn so với trễ truyền/nhận gói tin trung bình trong NI sử dụng bộ đệm đơn (126 chu kỳ đồng hồ).

Hình 2.16. Biểu đồ thời gian truyền các gói tin từ tài nguyên đến bộ định tuyến

Trong mục này, tác giả đã trình bày một kiến trúc mới cho bộ giao tiếp mạng trong NoC bằng ý tưởng ghi/đọc dữ liệu vào/ra bộ đệm một cách đồng thời. Các kết quả tổng hợp và mô phỏng cho thấy rằng thiết kế đã đề xuất có trễ thấp hơn và tốc độ hoạt động cao hơn so với cách tiếp cận sử dụng bộ đệm đơn.

Một phần của tài liệu Luận án tiến sĩ nghiên cứu noc cấu hình lại được trên FPGA và phát triển thuật toán ánh xạ động ứng dụng trên nền tảng noc (Trang 54 - 59)

Tải bản đầy đủ (PDF)

(107 trang)