CHƯƠNG 2 PHÁT TRIỂN NỀN TẢNG PHẦN CỨNG CẤU HÌNH LẠI ĐƯỢC
2.1. Thiết kế bộ định tuyến cho NoC
2.1.2. Đề xuất kiến trúc bộ định tuyến
Kiến trúc bộ định tuyến đề xuất sử dụng cấu hình mạng hai chiều dạng lưới (2D- Mesh), chuyển mạch gói, điều khiển luồng wormhole kết hợp với kênh ảo không đều trên cổng và thuật toán định tuyến XY. Bộ định tuyến có 5 cổng gồm cổng Bắc (N), Nam (S), Đông (E), Tây (W) và cổng nội bộ L (Hình 2.1). Tại mỗi cổng, dữ liệu có thể truyền theo hai hướng và có độ rộng là 34 bit. Kích thước của mỗi flit là 34 bit gồm 32 bit dữ liệu và 02 bit còn lại sử dụng cho nhận dạng loại flit. Có 3 loại flit: Flit tiêu đề, flit thân và flit đuôi. Thông tin định tuyến, địa chỉ nguồn và địa chỉ đích được chứa trong flit tiêu đề. Flit
thân và đuôi không chứa bất kỳ thông tin điều khiển nào. Cấu trúc của các flit được chỉ ra như Hình 2.2.
Router Mesh N
E
S L
W
34 34
d_in
d_out
d_in d_out ack_out
d_out
d_in
req_out ack_in
ack_out req_in
34
34 req_out
ack_in
d_in d_out
req_in
ack_out req_out
req_out
ack_out req_in ack_in
ack_out &
req_in ack_in &
req_out
34
34
34
34 3434
2 2
d_in
req_in
ack_in
Hình 2.1. Bộ định tuyến
Hình 2.2. Cấu trúc của các flit
FIFO
Switch VC 0
Arbiter 4 to1
N N
S N Flit
decoder
ack_out req_in d_in
ack_in req_out d_out
34 34
VC 1 VC 2 VC 3 VC 0
Arbiter 4 to1
req_out d_out 34
VC 1 VC 2 VC 3
ack_in
FIFO
S S Flit
decoder
ack_out req_in d_in
34
VC 0 Arbiter E
2 to1
req_out d_out 34
VC 1 ack_in
FIFO
E E Flit
decoder
ack_out req_in d_in
34
VC 0 Arbiter W
2 to1
req_out d_out 34
VC 1 ack_in
FIFO
W W Flit
decoder
ack_out req_in d_in
34
VC 0
Arbiter 4 to1
L
ack_in req_out d_out 34
VC 1 VC 2 VC 3 FIFO
L L Flit
decoder
ack_out req_in d_in
34
Hình 2.3. Kiến trúc bộ định tuyến đề xuất
Payload
Sour_Add Packet Seq
Number
Un
Paket size Dest_Add Used
00/
01
34 Bits
Payload 10
34 Bits
Payload 11
34 Bits
(a) Header flit
(b) Body flit
(c) Tail flit
Kiến trúc đề xuất của bộ định tuyến như Hình 2.3, bao gồm 5 khối chính: Bộ đệm ngõ vào (FIFO), bộ giải mã flit (Flit decoder), chuyển mạch (Switch), kênh ảo và bộ phân xử (Arbiter).
Bộ đệm ngõ vào dùng để lưu trữ tạm thời các flit.
Bộ giải mã flit thực hiện chức năng nhận, phân tích thông tin định tuyến trong flit tiêu đề và đưa ra thông tin định tuyến đến các ngõ ra cho gói tin.
Chuyển mạch thực hiện chức năng kết nối đường chuyển dữ liệu đến đúng ngõ ra tương ứng theo tín hiệu điều khiển từ khối giải mã flit.
Kênh ảo được thiết kế giống như các FIFO dùng để lưu trữ tạm thời các flit khi các flit chưa được cấp phát kênh vật lý.
Bộ phân xử thực hiện nhiệm vụ điều tiết các kênh ảo khi có yêu cầu truyền flit để cấp phát kênh vật lý, tương ứng.
Quá trình vận chuyển các flit từ ngõ vào đến ngõ ra của bộ định tuyến được diễn ra như sau:
Các flit đi vào bộ đệm FIFO và được lưu trữ tạm thời tại đây. Các tín hiệu bắt tay req_in và ack_out sẽ thông báo đến bên gửi tình trạng sẵn sàng ghi và ghi dữ liệu thành công vào FIFO. Tiếp theo các flit sẽ được đưa vào bộ giải mã flit. Tại đây địa chỉ nguồn và địa chỉ đích chứa trong flit tiêu đề được phân tích để đưa ra tín hiệu điều khiển hướng đi cho các flit. Tiếp theo bộ chuyển mạch sẽ dựa vào các tín hiệu điều khiển được tạo ra từ bộ giải mã flit để tiếp tục chuyển dữ liệu đến các ngõ ra và đưa vào các kênh ảo tương ứng. Cuối cùng, bộ phân xử sẽ lựa chọn và cấp phát kênh vật lý cho flit để truyền các flit đến các bộ định tuyến đích đến khi toàn bộ gói tin được truyền xong.
Điểm đặc biệt trong thiết kế này đó là việc bố trí các kênh ảo khác nhau tại các cổng nhằm tiết kiệm tài nguyên phần cứng nhưng vẫn tránh được tắc nghẽn và đảm bảo được hiệu năng mạng bằng cách kết hợp linh hoạt giữa việc sử dụng thuật toán định tuyến XY và việc bố trí số kênh ảo phù hợp tại các cổng ngõ ra. Điều này có thể được giải thích như sau: Theo nguyên tắc hoạt động của thuật toán định tuyến XY, khi chuyển các flit từ nguồn đến đích, đầu tiên các flit sẽ được truyền theo phương X sau đó đến phương Y đến khi tìm đúng địa chỉ đích sẽ dừng. Do vậy, cổng ngõ ra E sẽ nhận được dữ liệu từ các cổng ngõ vào W và L; cổng ngõ ra W sẽ nhận được dữ liệu từ cổng ngõ vào E và L; cổng ngõ ra S sẽ nhận được dữ liệu từ các cổng vào N, E, W và L; cổng ngõ ra N sẽ nhận được dữ liệu từ cổng ngõ vào S, E, W và L; cổng ngõ ra L sẽ nhận được dữ liệu từ các cổng ngõ vào N, S, E và W. Dựa trên phân tích này, tác giả bố trí 4 kênh ảo tại các cổng ngõ ra N và S và 2 kênh ảo cho các cổng ngõ ra còn lại E và W.
Chức năng của các khối được trình bày cụ thể dưới đây:
2.1.2.2. Bộ đệm ngõ vào
Các bộ đệm FIFO ngõ vào nhận các flit từ ngõ vào thông qua các đường dữ liệu vào d_in, lưu trữ các flit này vào hàng đợi của FIFO để đợi yêu cầu xử lý của các khối tiếp theo trong bộ định tuyến. Ngoài chức năng ghi/đọc dữ liệu vào/ra hàng đợi của FIFO, khối này cũng gửi một tín hiệu phản hồi ack_out về phía gửi để xác nhận việc truyền dữ liệu là thành công. Khi dữ liệu được đọc ra từ FIFO, khối này tiếp tục gửi một tín hiệu req_out đến bộ giải mã flit. Sơ đồ khối chức năng của bộ đệm FIFO ngõ vào được chỉ ra như Hình 2.4.
Hình 2.4. Sơ đồ khối của bộ đệm ngõ vào Hình 2.5. Sơ đồ khối bộ giải mã flit Bộ đệm FIFO ngõ vào bao gồm các khối: FIFO_MEM là bộ nhớ sử dụng để lưu trữ dữ liệu tạm thời; FIFO write_ctrl và FIFO read_ctrl là các máy trạng thái làm nhiệm vụ điều khiển quá trình ghi/đọc dữ liệu vào/ra hàng đợi. Đặc biệt, các khối điều khiển này được thiết kế độc lập nhau nhằm mục đích tăng tốc độ xử lý cho hàng đợi.
2.1.2.3. Bộ giải mã flit
Bộ giải mã flit chịu trách nhiệm phân tích và đánh dấu các loại flit thông qua tín hiệu bop. Nếu bop = „1‟ thì loại flit là flit tiêu đề. Nếu bop = „0‟ thì loại flit tương ứng là flit thân hoặc đuôi. Sau khi phân tích và đánh dấu các loại flit, bộ giải mã tiếp tục phân tích thông tin định tuyến trong flit tiêu đề để xác định địa chỉ nguồn, địa chỉ đích của gói tin, sau đó chuyển các flit đến các khối tiếp theo. Sơ đồ chức năng của bộ giải mã flit được chỉ ra như Hình 2.5.
Theo Hình 2.5, mô đun Addr_decoder chịu trách nhiệm so sánh địa chỉ nguồn với địa chỉ đích trong flit tiêu đề theo thuật toán định tuyến XY. Đầu tiên khối Addr_decoder sẽ so sánh địa chỉ theo phương X. Nếu địa chỉ theo phương X giữa nguồn và đích bằng nhau thì khối Addr_decoder sẽ tiếp tục so sánh địa chỉ theo phương Y. Nếu địa chỉ theo phương Y cũng bằng nhau thì dữ liệu sẽ được truyền theo kênh L đến tài nguyên xử lý được kết
FIFO write_ctrl
FIFO_MEM
d_in d_out
ack_in ack_out
req_in
empty
rd_en
clk
rst wr_en
req_out FIFO
read_ctrl
full
34 34
Flit_type decoder
data_sel
bop d_in[1:0]
Addr decoder
d_out
d_direction d_in
34
34 MUX 21
D_FF 34
rst
2 data_sel
2
nối với bộ định tuyến. Các trường hợp cụ thể được trình bày như trong lưu đồ thuật toán Hình 2.6; Mô đun Flit_type decoder chịu trách nhiệm phân loại loại flit; MUX_21 lựa chọn dữ liệu ngõ ra và một D_FF dùng để lưu trữ tín hiệu điều khiển hướng truyền dữ liệu.
X_nguồn < X_đích Bắt đầu
X_nguồn > X_đích
Y_nguồn < Y_đích
Y_nguồn > Y_đích
Truyền đến kênh W X_src = X_src + 1
Truyền đến kênh E X_src = X_src - 1
Truyền đến kênh N Y_src = Y_src + 1
Truyền đến kênh S Y_src = Y_src - 1
Truyền đến kênh L
Kết thúc Đúng
Đúng
Đúng
Đúng Sai
Sai
Sai
Sai
Hình 2.6. Thuật toán XY Hình 2.7. Cấu trúc của chuyển mạch
2.1.2.4. Chuyển mạch và kênh ảo
Chuyển mạch được xem như trái tim của bộ định tuyến, nó làm nhiệm vụ kết nối giữa ngõ vào và ngõ ra để đưa dữ liệu theo đúng địa chỉ đích mà bộ giải mã flit đã phân tích.
Cấu trúc của chuyển mạch được chỉ ra như Hình 2.7, bao gồm các Demux 1:2 cho ngõ vào N và S và các Demux 1:4 cho các ngõ vào E, W và L. Các tín hiệu điều khiển của Demux sẽ điều khiển kết nối chính xác địa chỉ ngõ vào đến địa chỉ ngõ ra.
Kênh ảo cũng thực hiện chức năng lưu trữ tạm thời các flit đến từ bộ chuyển mạch khi chưa được bộ phân xử cấp phát kênh vật lý. VC được thiết kế tương tự như khối FIFO ngõ vào. Tuy nhiên, quá trình điều khiển ghi/đọc của FIFO trong VC là không độc lập mà là phụ thuộc lẫn nhau. Có nghĩa là khi quá trình ghi dữ liệu vào hàng đợi hoàn thành thì quá trình đọc dữ liệu ra sẽ được phép thực hiện hoặc ngược lại khi quá trình đọc dữ liệu ra khỏi hàng đợi hoàn thành thì quá trình ghi dữ liệu vào FIFO sẽ được phép thực hiện.
DeMux1 : 2
34
N
ack_out
N_ctrl
DeMux1 : 4
2
E
ack_out
E_ctrl
ack_in
ack_in 35
DeMux1 : 2
34 ack_out
S_ctrl
34
34
34
VC0_N
34 ack_out req_in d_in
clk rst
34 ack_in req_out d_out Node 4
S
Node 12
Node 0
Node 13
Node 1
Node 5
Node 10
Node 14
Node 1 Node 2 Node 3
34 Node 4 Node 5 Node 6 Node 7 Node 0
SWITCH
VC1_N VC2_N
req_out
req_out req_in
req_in
ack_in req_out
ack_in req_out
VC3_N
VC0_S VC1_S VC2_S VC3_S
req_in
DeMux1 : 4
2
W
ack_out
W_ctrl
34 Node 2
Node 6
Node 8
Node 15 req_in
DeMux1 : 4
2
L
ack_out
L_ctrl
34 Node 3
Node 7
Node 9
Node 11 req_in
34 Node 8 Node 9
VC0_E VC1_E
34 Node 10 Node 11
VC0_W VC1_W
34 Node 12 Node 13 Node 14 Node 15
VC0_L VC1_L VC2_L VC3_L
34
34 d_in
2.1.2.5. Bộ phân xử
Bộ phân xử có trách nhiệm cấp phát kênh vật lý cho các kênh ảo khi chúng có nhu cầu trao đổi dữ liệu, đồng thời đảm bảo tính công bằng khi cấp phát kênh truyền vật lý cho các kênh ảo. Khi các kênh ảo có nhu cầu truyền dữ liệu, kênh vật lý ngõ ra sẽ bị chiếm dụng, các tín hiệu yêu cầu tương ứng (req_in_vc0; req_in_vc1; req_in_vc2; req_in_vc3) sẽ chuyển sang mức tích cực và gửi đến bộ phân xử, lúc này bộ phân xử sẽ giải quyết các yêu cầu này bằng cách nối các tín hiệu của kênh ảo tương ứng với kênh vật lý ngõ ra.
Trong trường hợp tất cả các kênh ảo cùng có nhu cầu chiếm dụng kênh vật lý ngõ ra thì bộ phân xử sẽ luân phiên cấp phát kênh vật lý cho từng kênh ảo đến khi không còn yêu cầu gửi đến.
Do các cổng ra E và W sử dụng 2 kênh ảo và các cổng ra N và S sử dụng 4 kênh ảo.
Vì vậy, có hai loại bộ phân xử được sử dụng trong thiết kế này như Hình 2.8 và Hình 2.9.
Hình 2.8. Bộ phân xử 2:1 Hình 2.9. Bộ phân xử 4:1