LỜI CAM ĐOAN. i
LỜI CẢM ƠN .ii
MỤC LỤC . iii
DANH MỤC CÁC TỪ VIẾT TẮT .vii
DANH MỤC CÁC HÌNH VẼ, ĐỒ THỊ. x
DANH MỤC CÁC BẢNG BIỂU .xii
MỞ ĐẦU .1
1. Đặt vấn đề.1
2. Mục tiêu, đối tượng, phương pháp và phạm vi nghiên cứu.3
3. Các kết quả đạt được của luận án .5
4. Cấu trúc của luận án.6
CHƯƠNG 1 CƠ SỞ LÝ THUYẾT .7
1.1. Lý thuyết về mạng trên chip.7
1.1.1. Nguồn gốc và thuật ngữ .7
1.1.2. Cấu hình mạng.8
1.1.2.1. Mạng lưới n-chiều (n-Dimensional Mesh).9
1.1.2.2. Mạng K-ary n-cube .9
1.1.2.3. Mạng có số chiều thấp.10
1.1.3. Cơ chế điều khiển luồng.10
1.1.3.1. Bản tin .10
1.1.3.2. Cơ chế điều khiển luồng Store-and-Forward (SAF).11
1.1.3.3. Cơ chế điều khiển luồng Wormhole (WH).11
1.1.3.4. Cơ chế điều khiển luồng Virtual cut-through (VCT) .12
1.1.3.5. Cơ chế điều khiển luồng kênh ảo (Virtual Channel) .12
1.1.4. Thuật toán định tuyến .13
1.1.4.1. Phân loại định tuyến .13
1.1.4.2. Các vấn đề trong định tuyến.14
1.1.5. Tổng quan kiến trúc bộ định tuyến.14
1.2. Công nghệ FPGA. 16iv
1.2.1. Kiến trúc FPGA .17
1.2.1.1. Tổng quan kiến trúc FPGA .17
1.2.1.2. Kiến trúc FPGA của Xilinx.18
1.2.2. Cấu hình lại từng phần.19
1.2.2.1. Cấu hình lại từng phần động .21
1.2.2.2. Các ưu điểm của cấu hình lại từng phần.22
1.2.2.3. Hỗ trợ cấu hình lại trong FPGA của Xilinx .23
1.3. Kỹ thuật ánh xạ ứng dụng lên nền tảng mạng trên chip . 24
1.3.1. Bài toán ánh xạ .24
1.3.2. Ánh xạ tại thời gian thiết kế .25
1.3.3. Ánh xạ tại thời gian chạy .26
1.4. Kết luận chương. 26
CHƯƠNG 2 PHÁT TRIỂN NỀN TẢNG PHẦN CỨNG CẤU HÌNH LẠI ĐƯỢC
CHO NoC . 28
2.1. Thiết kế bộ định tuyến cho NoC. 28
2.1.1. Giới thiệu.28
2.1.2. Đề xuất kiến trúc bộ định tuyến.29
2.1.2.1. Lựa chọn các thông số thiết kế.29
2.1.2.2. Bộ đệm ngõ vào.32
2.1.2.3. Bộ giải mã flit.32
2.1.2.4. Chuyển mạch và kênh ảo .33
2.1.2.5. Bộ phân xử.34
2.1.3. Kết quả và đánh giá .34
2.1.3.1. Kết quả tổng hợp .35
2.1.3.2. Kết quả mô phỏng .36
2.2. Thiết kế bộ giao tiếp mạng cho NoC . 40
2.2.1. Giới thiệu.40
2.2.2. Phương pháp tiếp cận.40
2.2.3. Đề xuất kiến trúc bộ giao tiếp mạng.42
2.2.4. Kết quả và đánh giá .44
2.3. Phát triển nền tảng phần cứng cấu hình lại từng phần động . 45
2.3.1. Giới thiệu.45v
2.3.2. Xây dựng hệ thống (nền tảng phần cứng) cấu hình .47
2.3.2.1. Luồng thiết kế .47
2.3.2.2. Thiết lập hệ thống .48
2.3.3. Các trường hợp nghiên cứu.50
2.3.3.1. Cấu hình lại cơ sở hạ tầng truyền thông.50
2.3.3.2. Cấu hình lại các PE .53
2.3.4. Kết quả thực nghiệm .54
2.4. Kết luận chương. 56
CHƯƠNG 3 TRIỂN KHAI CÁC ỨNG DỤNG CÓ THỂ ĐIỀU CHỈNH MỨC CHẤT
LƯỢNG VÀO NỀN TẢNG CẤU HÌNH LẠI ĐƯỢC DỰA TRÊN NoC TẠI THỜI
GIAN CHẠY . 57
3.1. Giới thiệu. 57
3.2. Mô tả bài toán ánh xạ. 59
3.3. Các định nghĩa và xây dựng bài toán ánh xạ . 60
3.3.1. Mô hình ứng dụng.60
3.3.1.1. Đồ thị tác vụ ứng dụng.61
3.3.1.2. Mô hình chất lượng .61
3.3.2. Mô hình phần cứng.62
3.3.3. Xây dựng bài toán ánh xạ .63
3.4. Các giải pháp cho bài toán ánh xạ các ứng dụng lên NoC tại thời
gian chạy . 65
3.4.1. Giải pháp tối ưu sử dụng thuật toán tìm kiếm đầy đủ .66
3.4.1.1. Thuật toán .66
3.4.1.2. Kết quả mô phỏng và đánh giá.67
3.4.2. Giải pháp heuristic cho bài toán ánh xạ tại thời gian chạy .70
3.4.2.1. Chiến lược chọn vùng gần lồi.70
3.4.2.2. Thuật toán ánh xạ heuristic.73
3.4.2.3. Kết quả mô phỏng và đánh giá.75
3.5. Kết luận chương. 82
KẾT LUẬN . 83
Nội dung và các kết quả đạt được của luận án. 83
Đóng góp khoa học của luận án. 84vi
Hướng phát triển của luận án . 85
DANH MỤC CÁC CÔNG TRÌNH ĐÃ CÔNG BỐ CỦA LUẬN ÁN. 86
TÀI LIỆU THAM KHẢO . 87
107 trang |
Chia sẻ: trungkhoi17 | Lượt xem: 464 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Luận án 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 - Nguyễn Văn Cường, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
hỉ ra rằng tần số làm việc cực đại của bộ định tuyến đã đề
xuất có thể đạt đến 426,6 MHz.
Bảng 2.2. Tài nguyên sử dụng của các bộ định tuyến trên FPGA
Tổng hợp sử dụng tài nguyên
Logic
Utilization
Sẵn có
2 kênh ảo Tác giả 4 kênh ảo
Sử dụng % Sử dụng % Sử dụng %
Slice Registers 301440 1027 0,34 1399 0,46 1692 0,56
Slice LUTs 150720 1026 0,68 1274 0,85 1814 1,20
36
2.1.3.2. Kết quả mô phỏng
Tính chính xác và chức năng của bộ định tuyến sẽ được kiểm tra với các mô phỏng,
bao gồm hai trường hợp: Mô phỏng RTL (Register Transfer Level) để kiểm tra chức năng
cho bộ định tuyến, mô phỏng toàn mạng để đánh giá độ trễ và thông lượng. Trong trường
hợp thứ nhất, kết quả mô phỏng quá trình truyền dữ liệu từ ngõ vào đến ngõ ra của bộ
định tuyến sẽ được cung cấp. Trong trường hợp thứ hai, kết quả mô phỏng về giá trị độ trễ
và thông lượng trung bình với kích thước mạng 3x3 được chỉ ra. Chi tiết mô phỏng được
mô tả dưới đây:
Trường hợp thứ nhất, công cụ mô phỏng ISIM (ISE Simulator) được tích hợp sẵn
trong bộ ISE 14.1 của hãng Xilinx được sử dụng. Để kiểm tra deadlock free, chức năng
của bộ định tuyến, một vài kịch bản mô phỏng sẽ được thực hiện như sau:
Kịch bản 1: Dữ liệu được đưa đến một kênh ngõ vào bất kỳ và tuần tự chuyển đến
các kênh ngõ ra còn lại. Để chứng minh cho kịch bản này, tác giả tiến hành truyền các
gói tin vào kênh L đã được gán sẵn địa chỉ định tuyến đến các ngõ ra N, S, E và W. Kết
quả mô phỏng cho thấy dữ liệu nhận được tại các kênh ngõ ra hoàn toàn đúng với dữ
liệu đưa vào kênh L (Hình 2.10a).
a) Vào kênh L – Ra các kênh N, S, E và W
b) Vào tuần tự các kênh N, L, E và W – Ra kênh S
37
c) Vào đồng thời các kênh N và E – Ra kênh S
d) Vào đồng thời các kênh N, L, E và W – Ra kênh S
Hình 2.10. Kết quả mô phỏng RTL cho các kịch bản
Kịch bản 2: Dữ liệu được đưa tuần tự đến 4 kênh ngõ vào và gửi đến cùng một
kênh ngõ ra. Để kiểm tra kịch bản này, tác giả tiến hành gửi các gói tin vào các kênh N,
E, W và L đã được gán sẵn địa chỉ định tuyến đến ngõ ra S. Kết quả mô phỏng cho thấy
dữ liệu nhận được tại kênh ngõ ra đúng với dữ liệu đã được đưa vào các kênh ngõ vào
(Hình 2.10b).
38
Kịch bản 3: Dữ liệu được đưa đồng thời đến 2 kênh ngõ vào và cùng gửi đến một
kênh ngõ ra. Chọn kênh ngõ vào N và E; kênh S ngõ ra sau khi truyền dữ liệu và so
sánh dữ liệu nhận với dữ liệu gửi ban đầu là phù hợp (Hình 2.10c).
Kịch bản 4: Dữ liệu được đưa đồng thời đến 4 kênh ngõ vào và cùng gửi đến một
kênh ngõ ra. Dữ liệu được bơm đồng thời đến 4 kênh ngõ vào là N, E, W và L gửi đến
kênh ngõ ra S. Dữ liệu nhận được tại kênh ngõ ra là đúng so với dữ liệu được đưa vào
các kênh ngõ vào N, E, W và L (Hình 2.10d).
Trường hợp thứ hai, độ trễ và thông lượng trung bình của mạng với kích thước 3x3 sử
dụng bộ định tuyến chứa 1, 2, 4 kênh ảo và bộ định tuyến đã đề xuất sẽ được đánh giá và
so sánh. Các thông số mô phỏng được thiết lập như Bảng 2.1 và sử dụng công cụ Noxim
trong [27]. Kết quả mô phỏng về độ trễ và thông lượng trung bình như Hình 2.11 và Hình
2.12.
Hình 2.11. Trễ trung bình toàn mạng Hình 2.12. Thông lượng trung bình toàn mạng
Hình 2.11 cho thấy trễ trung bình toàn mạng sử dụng kiến trúc bộ định tuyến của tác
giả nhỏ hơn trễ trong NoC sử dụng bộ định tuyến 1 và 2 kênh ảo; trường hợp bộ định
tuyến sử dụng 4 kênh ảo thì độ trễ chênh lệch rất nhỏ. Cụ thể, trong trường hợp lưu lượng
đưa vào mạng nhỏ ứng với tốc độ bơm flit vào mạng có giá trị 0,05 flits/cycle/node thì
trễ trong các trường hợp là như nhau. Nếu tiếp tục tăng lưu lượng đưa vào mạng bằng
cách tăng tốc độ bơm flit vào mạng thì độ trễ cũng dần tăng lên. Trường hợp 1 và 2 kênh
ảo tăng rất nhanh bởi vì kênh ảo không đáp ứng được lưu lượng tăng, ngược lại độ trễ
trong thiết kế của tác giả tăng chậm và gần như tiệm cận với trường hợp sử dụng 4 kênh
ảo. Trễ bão hòa đạt được khi tốc độ bơm flit vào mạng lần lượt tại các giá trị 0,16, 0,20,
0,24 và 0,235 flits/cycle/node tương ứng với mạng sử dụng bộ định tuyến chứa 1, 2, 4
kênh ảo và thiết kế của tác giả.
Hình 2.12 chỉ ra thông lượng trung bình toàn mạng trong các trường hợp sử dụng bộ
định tuyến 1, 2, 4 kênh ảo và bộ định tuyến của tác giả. Thông lượng tăng dần khi tốc độ
bơm flit vào mạng tăng, đến khi tốc độ bơm flit vào mạng đạt đến các giá trị 0,18, 0,23,
39
0,27 và 0,26 flits/cycle/node thì thông lượng cũng đạt đến giá trị bão hòa tương ứng cho
các trường hợp sử dụng 1, 2, 4 kênh ảo và của tác giả. Dễ thấy thông lượng trong mạng sử
dụng bộ định tuyến có chứa số lượng kênh ảo lớn là lớn hơn. So với trường hợp bộ định
tuyến sử dụng 2 kênh ảo, thiết kế của tác giả cải thiện hiệu năng lên đến 13,1%. Tuy
nhiên, so với trường hợp 4 kênh ảo thì thông lượng trong thiết kế của tác giả chỉ giảm
khoảng 2,22%.
Tóm lại, NoC sử dụng kiến trúc bộ định tuyến do tác giả đề xuất là không tắc nghẽn,
có độ trễ nhỏ và thông lượng cao hơn so với các trường hợp NoC sử dụng bộ định tuyến
chứa 1, 2 kênh ảo; đối với trường hợp 4 kênh ảo, mức chênh lệch các thông số này là rất
nhỏ.
Bảng 2.3. Một vài so sánh tham khảo với kiến trúc bộ định tuyến đã đề xuất
Thông số/Công trình [57] [82] [71] Tác giả
Công nghệ Stratix III Virtex-2 Virtex-5 Virtex-6
Độ rộng dữ liệu (bit) 32 32 16 32
Register N/A N/A 389 1399
LUT 1580 1455 1480 1274
Fmax (MHz) N/A 150 166 426,6
Cấu hình mạng Mesh Mesh Mesh Mesh
Bảng 2.3 chỉ ra một số so sánh tham khảo về các thông số như tài nguyên sử dụng, tốc
độ hoạt động giữa kiến trúc bộ định tuyến do tác giả đề xuất và các kiến trúc do các tác
giả khác đã được công bố (Lưu ý trong cột 3 của Bảng 2.3, tài nguyên sử dụng của một
vài bộ định tuyến được ước lượng từ tổng tài nguyên của mạng). Mỗi đề xuất được thực
hiện trên các công nghệ FPGA khác nhau. Do đó, rất khó để so sánh trực tiếp với nhau.
Tuy nhiên, kết quả so sánh vẫn mang lại cho chúng ta những thông tin để tham khảo. Đề
xuất của tác giả sử dụng tài nguyên bé hơn khi so sánh với các thiết kế trong [57, 82].
Trong [82] các tác giả thực hiện bộ định tuyến dựa trên cấu trúc lưới hai chiều trên FPGA
Virtex-2, tần số hoạt động trong trường hợp này chỉ đạt 150 Mhz trong khi thiết kế của tác
giả có thể đạt đến 426,6 Mhz. Tương tự, trong [71], kiến trúc bộ định tuyến được thực
hiện trên FPGA Virtex-5 với độ rộng dữ liệu chỉ là 16 bit. Kết quả tổng hợp cho thấy rằng
nghiên cứu này sử dụng tài nguyên LUT lớn hơn và tần số hoạt động nhỏ hơn so với thiết
kế của tác giả.
Trong mục này, một kiến trúc bộ định tuyến mới với số lượng kênh ảo không đều trên
cổng đã được trình bày. Kết quả tổng hợp và mô phỏng cho thấy rằng kiến trúc bộ định
tuyến đã đề xuất tránh được tắc nghẽn và cắt giảm tài nguyên phần cứng trung bình lên
40
đến 23,5% so với bộ định tuyến sử dụng 4 kênh ảo, tần số làm việc lớn nhất có thể đạt đến
426,6 Mhz. Trễ và thông lượng trong mạng cũng được cải thiện. Kết quả đạt được là rất
quan trọng, nó sẽ là cơ sở cho việc tích hợp nhiều thành phần của NoC vào FPGA.
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.
41
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
1 1
2 2
3 3
4 4
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à:
* 1M N (chu kỳ)
Do đó, trễ có thể được cắt giảm:
(2* * ) ( * 1) * 1M N M N M N (chu kỳ)
(2.1)
(2.2)
(2.3)
42
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
F
li
ti
li
z
e
r
router_ack
req_router
ack_core
core_req
Data_routerCore_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
D
e
-f
li
ti
li
z
e
r
router_req
Router_DataData_core
req_core
core_ack
32 bits
32 bits
M
u
x
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 A và B; các bộ điều khiển ghi/đọc dữ liệu vào/ra WRITE_CTRL và
READ_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:
43
FIFO A và B 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_CTRL và READ_CTRL là khối điều khiển ghi/đọc dữ liệu vào/ra các FIFO A
và B. 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)
và (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_CTRL và READ_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 Flitilizer và De-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.
44
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
45
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.
2.3. Phát triển nền tảng phần cứng cấu hình lại từng phần động
2.3.1. Giới thiệu
Các hệ thống nhúng thường được thiết kế để triển khai nhiều ứng dụng với chất lượng
dịch vụ và các yêu cầu xử lý khác nhau. Trong những năm gần đây, công nghệ FPGA
không ngừng phát triển, số lượng tài nguyên và tốc độ xử lý trên nó đang dần tăng, giá
thành và tiêu thụ năng lượng tiếp tục giảm, nhiều tính năng mới được tích hợp, đặc biệt là
khả năng cấu hình lại từng phần động [89, 97]. Do vậy, hệ thống trên chip dựa trên FPGA
đã trở thành nền tảng đầy hứa hẹn cho các hệ thống nhúng hiệu năng cao vì nó cung cấp
một sự cân bằng tốt giữa hiệu năng, rút ngắn thời gian đưa sản phẩm ra thị trường, chi phí
và tính linh hoạt. Theo hướng này, hầu hết các hệ thống nhúng dựa trên FPGA đã được
phát triển để hỗ trợ các ứng dụng đa phương tiện và các ứng dụng xử lý tín hiệu [30, 38,
48, 58]. Các ứng dụng này thường đòi hỏi cơ sở hạ tầng truyền thông linh hoạt, hiệu năng
cao và khả năng xử lý dữ liệu nhanh. Do vậy, phát triển một nền tảng nhúng cấu hình lại
được trên FPGA dựa theo mô hình NoC tại thời gian chạy là hết sức cần thiết và phù hợp
với hướng phát triển này. Trong khuôn khổ của luận án này, tác giả tập trung vào phát
triển một nền tảng phần cứng đa lõi cấu hình lại được trên FPGA bao gồm một lõi vi xử lý
nhúng (ví dụ: Microblaze hoặc ARM) và các PE cấu hình lại được, chúng được kết nối
với nhau thông qua kiến trúc truyền thông NoC. Nền tảng này có khả năng tự động cấu
46
hình lại cơ sở hạ tầng truyền thông một cách linh hoạt để thích nghi với các yêu cầu thay
đổi của ứng dụng hoặc cho phép cấu hình lại các lõi PE để đáp ứng yêu cầu khi triển khai
các ứng dụng có thể điều chỉnh mức chất lượng lên nền tảng.
MicroBlaze/
ARM
ICAP
DDR3
UART
Vùng tĩnh Vùng cấu hình lại được
FPGA
Bus Macro
Hình 2.17. Mô hình kiến trúc cấu hình trên FPGA
Để tạo ra một nền tảng phần cứng có thể cấu hình lại được dựa trên FPGA, bước đầu
tiên là thực hiện phân vùng thiết bị vật lý. Hình dạng và sự phân bố các khu vực trên thiết
bị vật lý đại diện cho kiến trúc cấu hình lại cơ bản mà hệ thống có thể được phát triển. Các
thiết lập của các vùng được chia vào hai khu vực: Khu vực tĩnh và khu vực cấu hình như
Hình 2.17. Tất cả các thành phần của hệ thống mà không cần phải thay đổi tại thời gian
chạy được đặt bên trong khu vực tĩnh của thiết bị. Trong khi các chức năng có thể tự động
cấu hình lại tại thời gian chạy phải được đặt trong khu vực cấu hình (khu vực động) [97].
Khu vực cấu hình có thể được chia thành một ma trận với nhiều ô (tile). Mỗi ô đại diện
cho một vùng cấu hình của thiết bị. Tất cả các kênh truyền thông giữa khu vực tĩnh và khu
vực cấu hình hoặc giữa các khu vực cấu hình có thể được đảm bảo tin cậy bằng các bus
Macro. Việc lựa chọn các khối chức năng để đặt vào khu vực tĩnh hoặc khu vực cấu hình
sẽ ảnh hưởng lớn đến cả sự linh hoạt và hiệu năng của hệ thống cuối cùng. Do vậy, người
thiết kế cần phải có một chiến lược phân vùng hợp lý và đúng đắn cho các khối chức năng
trước khi đặt chúng vào khu vực tĩnh hay khu vực cấu hình.
Trước khi phát triển một nền tảng phần cứng cấu hình lại trên FPGA dựa trên mô hình
NoC chúng ta cần xem xét lựa chọn các giải pháp phù hợp với các mục tiêu thiết kế đề ra.
Giải pháp đầu tiên có thể xem xét đó là cho phép cấu hình lại cơ sở hạ tầng truyền thông
mạng, có thể cấu hình bộ định tuyến hoặc các thành phần trong bộ định tuyến như bộ
đệm, chuyển mạch, bộ phân xử, v.v. hoặc cấu hình cả cấu hình mạng để tối ưu kiến trúc
truyền thông, trong khi duy trì cố định vị trí của các PE (lõi tính toán). Giải pháp này hoàn
toàn phù hợp với kịch bản các ứng dụng chạy trên hệ thống có tải làm việc thay đổi động
47
(ví dụ: thay đổi hiệu năng, thay đổi mức chất lượng). Giải pháp thứ hai có thể được lựa
chọn đó là thay đổi tự động các PE tại thời gian chạy, trong khi cơ sở hạ tầng truyền thông
mạng được giữ cố định. Giải pháp này rất phù hợp cho bài toán ánh xạ các ứng dụng khác
nhau lên hệ thống hoặc hệ thống có tài nguyên hạn chế nhưng yêu cầu triển khai nhiều
ứng dụng lên nó tại các thời điểm khác nhau. Cuối cùng, người thiết kế có thể kết hợp cả
hai giải pháp để tạo ra một hệ thống cấu hình lại có tính linh hoạt và khả năng thích nghi
cao. Tuy nhiên, giải pháp này có thể làm tăng thời gian thiết kế cũng như tăng độ phức tạp
trong việc quản lý các tác vụ cấu hình tại thời gian chạy.
Trong giới hạn của nghiên cứu này, tác giả sẽ tập trung vào phát triển một nền tảng
mẫu có thể thực hiện theo giải pháp thứ nhất hoặc giải pháp thứ hai. Phần tiếp, các nội
dung như xây dựng thống cấu hình lại, các trường hợp nghiên cứu và thử nghiệm hệ thống
trên FPGA sẽ được trình bày.
2.3.2. Xây dựng hệ thống (nền tảng phần cứng) cấu hình
2.3.2.1. Luồng thiết kế
Tác giả sử dụng luồng thiết kế như Hình 2.18 để thiết lập một hệ thống cấu hình lại
được từng phần động cho NoC trên FPGA.
Buffer, Router,
Topo or PE
Dynamic nestlist
(.ngc)
ISE
C project
SDK
Plan Ahead
Systems and
BlackBox
Static netlist
(.bmm, .ngc, .ucf)
XPS
ELF file
Bitstream
FPGA
Hình 2.18. Sơ đồ luồng thiết lập hệ thống
Các bộ công cụ của Xilinx được sử dụng trong luồng thiết kế này bao gồm: ISE, XPS
(Xilinx Platform Studio), PlanAhead và SDK (Software Development KIT) phiên bản
14.1. Khu vực tĩnh và hộp đen (blackbox) của hệ thống được tạo ra bởi công cụ XPS. XPS
thực hiện kết nối các lõi IP và tổng hợp để tạo ra các file nestlist (.ngc file) cũng như các
file ràng buộc (.bmm file), đồng thời tạo các driver và datasheet để phục vụ cho việc phát
triển phần mềm ở các công đoạn tiếp theo. Công cụ ISE được sử dụng để tổng hợp và tạo
ra các mô đun đặt vào khu vực động của FPGA. Cụ thể, các bộ đệm với kích thước khác
48
nhau hoặc các cấu hình mạng chứa các bộ định tuyến đã được tính toán, tối ưu các thông
số theo từng ứng dụng cụ thể (ví dụ: Kích thước bộ đệm, số kênh ảo, loại chuyển mạch,
v.v.). Hoặc các lõi PE tương ứng theo ứng dụng sẽ được tổng hợp để chuẩn bị cho việc tạo
ra file cấu hình (bitstream file). Các file cấu hình nạp vào FPGA khi hệ thống yêu cầu
được tổng hợp bởi công cụ PlanAhead từ các file đã được tạo ra từ công cụ XPS và ISE
nói trên. Tiếp theo một phần mềm điều khiển sẽ được phát triển trên công cụ SDK và
được biên dịch thành một file có cấu trúc ELF, sau đó được nạp xuống
Các file đính kèm theo tài liệu này:
- luan_an_nghien_cuu_noc_cau_hinh_lai_duoc_tren_fpga_va_phat_t.pdf