Hình 3.5 minh họa biểu đồ khả năng chịu lỗi của hệ thống FT-DyMPSoC.
Hình 3.5: Phương án giảm lỗi
Định kỳ các bộ vi xử lý đồng bộ hóa để phát hiện lỗi. Nếu có lỗi, bối cảnh bộ vi xử lý đƣợc lƣu vào SDRAM DDR2 (Checkpointing tại mục 2.4.3.2). Nếu một lỗi đƣợc phát hiện, chẩn đoán lỗi đƣợc đƣa ra để xác định nếu lỗi là thƣờng trú hay không. Nếu
nó là một lỗi tạm thời, cấu hình lại từng phần sửa chữa nó bằng cách tải về các bitstream thích hợp tới ICAP. Nếu lỗi thƣờng trú đƣợc xác định, kỹ thuật ―lát gạch‖ đƣợc sử dụng để đối phó với lỗi này. Sau đó, bối cảnh bộ vi xử lý lƣu cuối cùng đƣợc phục hồi để tiếp tục nhiệm vụ trong bộ xử lý này (Roll-back).
3.4. Thay đổi quy trình thiết kế
Tuy nhiên, công cụ Xilinx PlanAhead không cho phép để thiết lập một nhóm một vài IP (tất cả các tập ở mức cao nhất) nhƣ một mô-đun có thể cấu hình lại. Quy trình thiết kế cần phải đƣợc sửa đổi để đáp ứng các yêu cầu hệ thống mới.
Để đối phó với những hạn chế quy trình thiết kế tiêu chuẩn, luận văn này giới thiệu về sửa đổi quy trình thiết kế này. Phƣơng pháp thiết kế sửa đổi đƣợc dựa trên khái niệm thiết kế kiểu mô-đun đƣợc trình bày trong [60]. Tính năng này cho phép các thiết bị tách thành nhiều phần độc lập với tổng hợp, mã hoá, sắp đặt, định tuyến, và lập bản đồ. Sửa đổi đòi hỏi phải định nghĩa các thành phần Socket và Wrapper.
3.4.1. Thay đổi quy trình thiết kế
Thách thức đầu tiên từ cấu trúc của các lõi MicroBlaze IP. MicroBlaze IP là đƣợc cấu hình lại với các thiết bị ngoại vi nhƣ: bộ nhớ chƣơng trình BRAM, bộ điều khiển BRAM, bus PLB [64],.. (hình 2.2). Tại thời điểm này, tất cả các các IP là "bằng" tập con ở mức cao nhất (hình 3.6.a).
Hình 3.6: Phân cấp thiết kế
Nhƣng công cụ PlanAhead của Xilinx không cho phép để thiết lập một nhóm vài IP (tất cả các tập hợp con thể hiện ở mức cao nhất) nhƣ một mô-đun có thể cấu hình lại. Vì vậy, phân cấp hệ thống cần phải đƣợc sửa đổi nhƣ thể hiện trong hình 3.6 (b).
Ở giai đoạn thiết kế đầu tiên (hình 3.7), một thiết kế hoàn chỉnh tĩnh đƣợc xây dựng để kiểm tra hoạt động của toàn bộ hệ thống. Thủ tục thiết kế của giai đoạn này theo quy trình thiết kế tiêu chuẩn cho các thiết bị Xilinx (mục 2.2.2). Sau khi xác nhận các chức năng của bộ điều khiển SDRAM DDR2 chia sẻ, các bộ điều khiển ICAP và các kết nối FSL, chúng ta có một hệ thống hoạt động vẫn hoàn toàn tĩnh. Thiết kế này có tất cả các khối chức năng và các yếu tố cần thiết của hệ thống hoàn toàn linh động mà ta muốn xây dựng sau đó.
Giai đoạn thiết kế thứ hai phá vỡ các hệ thống thành nhiều phần bao gồm tất cả các phần cấu hình lại và phần tĩnh. Mỗi mô đun đƣợc mã hoá, tổng hợp và lập bản đồ theo quy trình thiết kế tiêu chuẩn Xilinx (giai đoạn III của hình 3.7).
Sau khi phân mảnh hệ thống, một số thành phần, chẳng hạn nhƣ bộ điều khiển ICAP hoặc bộ điều khiển DDR2, không còn kết nối với bus PLB. Bởi vì các bộ điều khiển trong phần tĩnh, trong khi các bus PLB thuộc MicroBlaze của mình trong các mô-đun có thể tái cấu hình. Tuy nhiên, các kết nối của các bus PLB không có thể đƣợc mở, vì vậy chúng ta cần thêm PLB_Socket trình bày dƣới đây.
Vào cuối giai đoạn III, các netlist của tất cả các PRM và logic tĩnh đƣợc tạo ra. Sau đó, ở giai đoạn IV, khởi tạo các mô-đun ở mức cao nhất bằng cách tạo ra những gói (wrapper) mô-đun. Sau khi những gói của bốn bộ vi xử lý và một phần tĩnh đƣợc thực hiện, Bus Macros đƣợc khởi tạo để kết nối tín hiệu thích hợp giữa các bộ phận hệ thống. Bây giờ thể hiện ở mức cao nhất có năm tập con: một phần tĩnh và bốn bộ xử lý (hình 3.6.b). Các tập con này là hộp đen và các netlist của chúng sẽ đƣợc gọi ra trong PlanAhead (Giai đoạn V). Ở giai đoạn này, bốn bộ xử lý có thể đƣợc thiết lập nhƣ là mô-đun có thể cấu hình lại. Chúng có thể đƣợc trải ra để tạo ra các bitstream phần cứng của toàn bộ hệ thống. Bƣớc VI của luồng hợp nhất các bộ phận phần cứng với các chƣơng trình MicroBlaze sửa đổi để hình thành các bitstream cuối cùng bao gồm bitstream đầy đủ ban đầu và tất cả các bitstream từng phần.
Sự hiện diện của logic tĩnh cũng rất cần thiết trong thiết kế. Trong khu vực tĩnh, Macros Bus đƣợc khởi tạo, nhƣng chúng đƣợc đặt tại các PRR ở giai đoạn sắp đặt và định tuyến để giữ cho các logic giao diện không thay đổi trong cấu hình lại. Bộ điều khiển cấu hình lại đƣợc ánh xạ trong khu vực này. Hai bộ ghép kênh đƣợc khởi tạo trong phần tĩnh của thiết kế.
3.4.2. Socket
Mục tiêu của xây dựng Socket là để giới thiệu sự hiện diện của các thiết bị ngoại vi tồn tại trong hệ thống con khác. Kể từ khi bộ điều khiển DDR2, bộ điều khiển ICAP (đƣợc kết nối với PLB Bus [64]) và các bus FSL đƣợc chia sẻ giữa bốn hệ thống bộ xử lý con, chúng phải đƣợc khởi tạo trong hệ thống phụ khác. Vì vậy, tại giai đoạn thiết kế hệ thống con, mỗi bộ xử lý không còn kết nối trực tiếp với các bộ điều khiển. Điều này tạo ra các lỗi tổng hợp phần cứng bởi vì các kết nối của PLB và bus FSL không phải là mở. Socket là một mặt nạ có một đầu kết nối đến bus để bảo tồn kết nối, đầu kia là để đƣợc kết nối với Bus Macros sau đó. Do đó, socket bây giờ là một thiết bị ngoại vi mới giúp làm đầy đủ các thành phần của một bộ xử lý. Đặc biệt là cho bus PLB, khi nó là một bus multi-slave, do đó, có một bộ dịch địa chỉ thực hiện trong các socket để bộ xử lý có thể giao tiếp với thiết bị ngoại vi thích hợp của bus PLB. Một vai trò khác của các socket là làm cho một thiết bị ngoại vi giả mạo xuất hiện trong các bộ nhớ địa chỉ của bộ xử lý giúp bộ vi xử lý điều khiển thiết bị ngoại vi còn thiếu với các chƣơng trình phần mềm. Điều này đòi hỏi một thay đổi nhỏ trong chƣơng trình của bộ vi xử lý.
3.4.3. Wrapper
Tất cả các giao diện kết nối của mỗi mô-đun có thể cấu hình lại đƣợc khai báo trong wrapper của nó, do đó, wrapper của PRM khác nhau cho một PRR phải giống nhau. Wrapper thực tế là một hộp đen đƣợc viết bằng ngôn ngữ HDL và mô tả tất cả các giao diện của một PRM với logic tĩnh. Bốn hàm đƣợc viết cho bốn bộ xử lý tƣơng ứng (hình chữ nhật nét đứt trong hình 3.1) để mỗi bộ xử lý có thể đƣợc thiết kế độc lập bằng cách sử dụng quy trình thiết kế tiêu chuẩn (Sec. Intro). Một lợi thế lớn của việc sử dụng Wrapper là chúng ta không phải quan tâm về sự phức tạp cấu trúc của một mô-đun cấu hình lại. Tất cả những khó khăn trong khi xây dựng một mô-đun phức tạp đƣợc quản lý bởi các công cụ FPGA Xilinx CAD, chúng ta chỉ cần giữ swrapper PRM thay thế để đƣợc giống nhƣ bản gốc.
Một lợi thế của quy trình thiết kế này là các cơ sở của việc tạo ra các wrapper HDL cho tất cả các mô-đun cấu hình lại giúp giảm bớt các thiết kế của hệ thống mô- đun phức tạp. Chỉ có một thay đổi nhỏ của những wrapper cần thiết để thích ứng với một mô-đun cấu hình lại thay thế cho hệ thống. Nếu chúng ta muốn thay thế phần N bởi phần N‘ (bất kể sự phức tạp của mô-đun), chúng ta chỉ cần giữ tên kết nối không thay đổi để wrapper HDL của nó là giống nhƣ bản gốc. Tất cả các cấu trúc phức tạp của các mô-đun N‘ đƣợc quản lý bởi các công cụ CAD.
3.5. Cải tiến FT-DyMPSoC
Hệ thống FT-DyMPSoC sử dụng một NoC thay vì liên kết điểm – điểm. Hệ thống với kiến trúc tự động cấu hình lại tin cậy (Re2DA) sử dụng một mạng dựa trên NoC đƣợc gọi là DRAFT (Dynamic Reconfigurable Adaptive Fat-Tree) [36]. Khả năng chịu lỗi ở mức độ đa nền tảng đã đƣợc đƣa vào mối quan tâm cung cấp một hệ thống có độ tin cậy cao dựa trên FT-DyMPSoC. Các nền tảng, bao gồm của vài FPGA và mỗi FPGA là một hệ thống FT-DyMPSoC. Khả năng chịu lỗi đƣợc quản lý ở cấp MPSoC cũng nhƣ mức độ đa nền tảng (cấp tổng thể hệ thống).
3.5.1. Hệ thống Re2DA
Vì sự phức tạp của hệ thống MPSoC liên tục tăng với các yêu cầu song song của các ứng dụng, liên kết mạng trở thành một mối quan tâm hàng đầu đến việc sử dụng mạng trên chip (NoC). NoC, giống DRAFT [36], cung cấp sự linh hoạt và khả năng mở rộng đến các ứng dụng. FT-DyMPSoC sử dụng DRAFT nhƣ kiến trúc truyền thông trung tâm trong các bộ vi xử lý trong một hệ thống MPSoC. Bên cạnh các ứng dụng ngƣời dùng, DRAFT cũng đƣợc sử dụng cho mục tiêu khả năng chịu lỗi. Dự kiến ứng dụng ngƣời dùng là thành lập 4 ứng dụng trên ô tô, nhằm mục đích nhiệm vụ có mức độ bảo mật khác nhau. Các cơ chế chịu lỗi đảm bảo các chức năng hệ thống tùy thuộc vào các mức độ bảo mật, nhiệm vụ an ninh cao nhất sẽ đƣợc quản lý đầu tiên.
Hình 3.8: Cấu trúc nội của Re2DA
Hiện nay, rất nhiều kiến trúc liên kết mạng đƣợc thiết kế nhƣng cấu trúc mạng của chúng có thể đƣợc phân loại trong một vài họ cơ bản [50]. Chúng chính là kiến trúc dựa trên bus, các cấu trúc ma trận nhƣ mắt lƣới và hình xuyến, cây dựa trên cấu trúc liên kết giống nhƣ fat- trees, cấu trúc vòng (ring) cơ bản, và cuối cùng là mạng tùy chỉnh. Tuy nhiên, cấu trúc phổ biến nhất cho thực hiện trong nền tảng của hệ thống bằng cách sử dụng cấu hình lại linh động dựa trên bus, các mắt lƣới, và các fat- trees [21]. Chúng tôi sử dụng trong công việc này mạng DRAFT [36] đƣợc chuyển thể từ một cấu trúc dựa trên fat- tree và đƣợc thiết kế đặc biệt đƣợc thực hiện trong hệ thống thực hiện cấu hình lại linh động. Hơn nữa, nó cung cấp hiệu năng mạng tốt nhất trong khi tiêu thụ tài nguyên phần cứng ít hơn so với lƣới khác hoặc dựa trên mạng fat-tree. Hiệu năng về độ trễ và băng thông kết hợp là thú vị để truyền cả một luồng video và quá cảnh của các từ điều khiển đƣợc sử dụng cho mục đích chịu lỗi. Đó là lý do tại sao các mạng DRAFT đƣợc chọn cho hệ thống cấu hình lại tự động FT-DyMPSoC.
Các cơ chế phát hiện lỗi của hệ thống này cũng đƣợc dựa trên các ma trận kết nối. Tuy nhiên, các ma trận đƣợc thích nghi với mạng DRAFT. Sử dụng những ma trận sửa đổi, hệ thống có khả năng phát hiện lỗi cho dù trong các bộ vi xử lý, DRAFT hoặc trong các kết nối của DRAFT. Khi một lỗi đƣợc phát hiện, cấu hình lại linh động của các mô-đun liên quan đƣợc đƣa ra để sửa lỗi. Nếu thông qua các ma trận kết nối bằng cách sử dụng DRAFT, bộ xử lý đƣợc báo cáo bị ngắt kết nối từ bộ xử lý khác, nó có thể là bộ xử lý không thành công hoặc liên kết là thất bại. Trong trƣờng hợp đó, DDR đƣợc sử dụng để phân biệt các lỗi. Tất cả các bộ vi xử lý viết một cờ trong các vị trí cụ thể của chúng trong DDR và đọc những cờ của những bộ xử lý khác. Nếu không tìm thấy cờ của một bộ xử lý, bộ xử lý này là bị lỗi. Nếu cờ đƣợc tìm thấy thành công, bộ xử lý vẫn còn làm việc, do đó, trả về lỗi kết nối.
Các bộ vi xử lý định kỳ đồng bộ hóa bản thân, chia sẻ các ma trận kết nối, và lƣu các bối cảnh bộ vi xử lý cho mục đích phát hiện lỗi trong giai đoạn lƣu trữ (Checkpointing). Các bối cảnh làm giảm trạng thái của các bộ vi xử lý đƣợc thƣờng xuyên lƣu trong DDR bản thân bộ vi xử lý. Sau khi cấu hình lại của một bộ xử lý bị lỗi, trạng thái của bộ vi xử lý này cần phải đƣợc phục hồi để lƣu trữ trạng thái cuối
cùng trƣớc khi xảy ra lỗi. Vì vậy, bối cảnh chính xác cuối cùng sẽ đƣợc nạp lại các bộ vi xử lý chỉ sau khi cấu hình lại (Rollback).
3.5.2. Nền tảng nhiều FPGA
Hình 3.9: Chịu lỗi trong nền tảng nhiều FPGA
Nhƣ hình 3.9, hệ thống này bao gồm bốn FPGA kết nối với nhau bằng cách sử dụng hai mạng Ethernet (trong tƣơng lai có thể dựa trên giao diện PLC, trong khi đề án khác đƣợc xây dựng trên các kết nối RF nhƣ nghiên cứu trong dự án CIFAER [78]). Mạng đầu tiên đƣợc định tuyến thông qua một chuyển đổi mạng, các mạng khác tạo thành một cấu trúc liên kết vòng cho mục đích chịu lỗi. Các giao thức Ethernet đƣợc xây dựng bởi bộ điều khiển Ethernet nhƣ các phần cứng thiết bị ngoại vi MicroBlaze và các LightWeight IP [35] nhƣ các thƣ viện phần mềm. LwIP là một gói mã nguồn mở bằng cách sử dụng giao thức TCP / IP, có thể dễ dàng thích nghi với PLC và modem không dây. Mỗi FPGA có chứa một hệ thống FT-DyMPSoC.
Trên hệ thống tổng thể, mỗi FPGA giao tiếp với một bộ nhớ có thể đƣợc truy cập bởi tất cả các bộ vi xử lý bên trong cùng một FPGA. Bộ nhớ này đƣợc phân chia thành ba phân đoạn (hình 3.9):
Một cho lƣu trữ tất cả các bitstream và các bối cảnh của tất cả các bộ vi xử lý FPGA cụ thể.
Một cho lƣu trữ tất cả các bitstream của FPGA tiếp theo trong mạng vòng. Một dành riêng và đƣợc sử dụng trong trƣờng hợp xảy ra thất bại trong hệ
thống. Phân khúc này sẽ giúp chuyển các bitstream và các bối cảnh giữa FPGA khác nhau.
Các phân đoạn bộ nhớ đảm bảo sự tồn tại của ít nhất một bản sao của tất cả các bitstream trên toàn bộ mạng lƣới.
Hình 3.10: Chiến lược phục hồi lỗi
Nhƣ chúng ta có thể nhìn thấy trong hình 3.10 (a), bitstream của mỗi FPGA hiện tại trong bộ nhớ nội của nó và cũng có trong bộ nhớ nội của FPGA trƣớc đó trong cấu trúc liên kết vòng. Ví dụ, FPGA1 lƣu trữ bitstream của 1 và các bitstream 2, FPGA2 lƣu trữ của bitstream 2 và bitstream 3 và tiếp tục. Những sao chép sẽ đƣợc sử dụng trong trƣờng hợp lỗi hệ thống, và cho phép bối cảnh chuyển đổi nhanh chóng.
Độ chịu lỗi đƣợc duy trì ở hai cấp độ trong hệ thống. Mức Intra-FPGA tƣơng ứng với các chiến lƣợc chịu lỗi mỗi bên trong FPGA, và có liên quan đến việc thiết kế các hệ thống FT-DyMPSoC. Chiến lƣợc giảm thiểu lỗi đƣợc thực hiện bằng cách sử dụng thuật toán ma trận kết nối, và lỗi đƣợc giảm nhẹ bằng cách sử dụng cấu hình lại linh động ở cấp độ bộ vi xử lý. Cấp độ thứ hai đƣợc gọi là Inter-FPGA mức độ tƣơng ứng với hệ thống tổng thể trình bày trong hình 3.9. Để phát hiện lỗi trong mạng tổng thể, tất cả các các FPGA trao đổi thƣờng xuyên trong khung phát hiện. Những khung chứa các bối cảnh phần mềm của bốn MicroBlazes của mỗi FPGA. Một mặt, điều này sẽ giúp phát hiện lỗi trong mạng. Mặt khác, bao gồm các bối cảnh trong khung phát hiện sẽ giúp đỡ để tiếp tục nhiệm vụ của một FPGA bị lỗi trên FPGA khác. Trong quá trình trao đổi nếu bối cảnh của một FPGA (tức là FPGA3 hình 3.10) không nhận đƣợc từ các mạch khác, FPGA3 đƣợc tuyên bố bị lỗi. Có 2 khả năng: các MicroBlaze 1 (hỗ trợ các giao diện mạng) của FPGA3 là bị lỗi, gây ra các thông tin liên lạc bị mất của FPGA này, hoặc toàn FPGA3 là bị lỗi. Để phân biệt 2 khả năng này, các liên kết ethernet thứ cấp đƣợc sử dụng. FPGA2 và FPGA4 cố gắng để giao tiếp với MicroBlaze 2 và 3 của FPGA3. Nếu những thông tin liên lạc không thành công, toàn bộ FPGA3 đƣợc khai báo là lỗi, nếu không, chỉ các MicroBlaze 1 là tỗi.