Ảnh hƣởng của rối loạn cấu hình là vĩnh viễn cho đến khi tải lại cấu hình tiếp theo. Nó có thể đạt đƣợc bằng cách cấu hình lại toàn bộ cụ thể là tải lại cấu hình của toàn bộ thiết bị. Giải pháp này có thể tạo ra một sự gián đoạn dịch vụ tạm thời của toàn bộ hệ thống, điều này có thể bị cấm đối với một số ứng dụng. Một giải pháp khác là sử dụng cấu hình lại từng phần để chỉ làm mới các mô-đun có liên quan mà không làm gián đoạn phần còn lại của mạch. Rõ ràng, với cấu hình lại từng phần để loại bỏ nhiễu loạn là ít tốn kém hơn thời gian .
Cấu hình sạch
Nếu trong khi readback, dòng dữ liệu cấu hình đƣợc tìm thấy không hợp lệ, nhiễu loạn nên đƣợc sửa chữa càng nhanh càng tốt để tránh bất kỳ kết quả không đƣợc tiên đoán. Kể từ khi một khung cấu hình là phần nhỏ nhất có thể lập trình lại, nên tải lại toàn bộ khung bị ảnh hƣởng với các dữ liệu chính xác bằng cách sử dụng kỹ thuật làm sạch. Kỹ thuật làm sạch có thể đƣợc kết hợp với readback để xác định vị trí bit lật và đảo lại nó, hoặc dữ liệu khung cơ sở có thể đƣợc lƣu trữ trong bộ nhớ có độ tin cậy cao mà bộ điều khiển làm sạch có thể tìm thấy thông tin cấu hình.
Kỹ thuật làm sạch
Rối loạn có thể tích lũy trong ma trận trong một thời gian dài, gây ra một lỗi trong hệ thống ngay cả khi dự phòng đƣợc áp dụng, nên cần thiết để làm sạch tất cả các rối loạn trong cùng một tần số để đảm bảo các chức năng chính xác. Kỹ thuật
Nguyễn Viết Hiếu – K16D2
thƣờng xuyên tải lại dữ liệu cấu hình với thông tin chính xác đƣợc gọi là kỹ thuật làm sạch [18]. Làm sạch đƣợc sử dụng để tránh sự tích tụ nhiễu loạn và tự bản thân việc làm sạch không chứa bất kỳ cơ chế phát hiện nào. Làm sạch có thể đƣợc sử dụng độc lập để làm sạch các nhiễu loạn bên trong ma trận, nó định kỳ làm mới bộ nhớ cấu hình. Trong trƣờng hợp này, tần số làm tƣơi phải là cao hơn mức dự kiến xuất hiện của các nhiễu loạn. Một nghiên cứu xuyên suốt về tỷ lệ nhiễu loạn nên đƣợc thực hiện trƣớc khi áp dụng kỹ thuật làm sạch, đòi hỏi rất nhiều điều tra của công nghệ sản xuất thiết bị cũng nhƣ điều kiện môi trƣờng. Do đó, điều này có thể trì hoãn đáng kể thời gian để thị trƣờng của hệ thống.
Trong luận văn này, phân biệt cấu hình sạch nhƣ các hoạt động tải lại hoặc sửa đổi một khung cấu hình với kỹ thuật làm sạch nhƣ các hoạt động tải lại tất cả các khung cấu hình của hệ thống mục tiêu.
Tái cấu hình dựa trên mô-đun
Nếu không xác định chính xác các khung cấu hình bị lỗi, toàn bộ mô-đun bị lỗi cần phải đƣợc cấu hình lại với dữ liệu cấu hình chính xác để loại bỏ lỗi. Việc này đòi hỏi toàn bộ hệ thống phải đƣợc thiết kế bằng cách sử dụng tái cấu hình từng phần dựa trên mô-đun. Tái cấu hình dựa trên mô-đun sử dụng quy trình thiết kế đƣợc giải thích tại mục 2.2.2. Các bitstream từng phần của các mô-đun có thể cấu hình lại đƣợc tạo ra bằng cách sử dụng phƣơng pháp này. Tái cấu hình một mô-đun đƣợc thực hiện bằng cách tải bitstream từng phần tƣơng ứng thông qua cổng cấu hình lại.
Kỹ thuật lát gạch - Tiling
Các lỗi thƣờng trú có thể xuất hiện trong ma trận do tích lũy lâu dài hoặc quá trình sản xuất bị lỗi. Loại lỗi này có thể gây nhiều rối loạn cấu hình và có thể đƣợc phát hiện bằng cách sử dụng sự kết hợp của nhiều chiến lƣợc. Tuy nhiên, lỗi thƣờng trú không thể đƣợc gỡ bỏ bằng cách tải lại dữ liệu cấu hình. Một giải pháp để sửa chữa lỗi thƣờng trú trong FPGA đƣợc trình bày trong [49]. Một mô-đun bị lỗi có thể đƣợc sửa chữa bằng cách cấu hình lại các chip để một khối logic có thể cấu hình lại bị hƣ hỏng (CLB - Configurable Logic Block) hoặc nguồn tài nguyên định tuyến không đƣợc sử dụng bởi thiết kế. Nhiều kỹ thuật đã đƣợc trình bày để cung cấp loại bỏ sự cố thƣờng trú cho các FPGA thông qua tái cấu hình. Một giải pháp là tạo ra tại thời gian chạy một cấu hình mới sau khi sự cố thƣờng trú đƣợc phát hiện. Giải pháp này là không khả thi vì tổng hợp logic rất phức tạp, chiến lƣợc sắp đặt và định tuyến chỉ có thể đƣợc thực hiện trên các máy tính bên ngoài. Một giải pháp khác đƣợc gọi là tiling (kỹ thuật lát gạch) là để tạo ra các cấu hình FPGA thay thế trƣớc khi biên dịch và lƣu trữ các các bitstream cấu hình trong bộ nhớ tĩnh. Hình 2.19 mô tả các nguyên lý tiling. Cùng một thiết kế có ba cấu hình khác nhau (a), (b) và (c) và mỗi cấu hình có một khu vực chƣa đƣợc sử dụng (gạch). Nếu một lỗi thƣờng trú đƣợc tìm thấy trong một ―viên gạch‖, cấu hình thích hợp mà có ―viên gạch‖ chƣa đƣợc sử dụng bao gồm các lỗi là đƣợc tải.
Nguyễn Viết Hiếu – K16D2
Hình 2.19: Nguyên lý lát gạch - Tiling
Tiling là một trong những kỹ thuật phổ biến nhất để đối phó với sự cố thƣờng trú bởi vì khi phát hiện có sự cố thƣờng trú, một cấu hình mới có thể đƣợc lựa chọn mà không có sự chậm trễ của định tuyến lại và tái lập lại. Tuy nhiên, giải pháp này yêu cầu số lƣợng bộ nhớ lớn cho lƣu trữ các cấu hình.
Việc sử dụng Tiling đòi hỏi phải áp dụng một cơ định vị lỗi thƣờng trú nhƣ: readback lặp đi lặp lại các khung bị lỗi, nếu lỗi vẫn tồn tại sau khi điều chỉnh liên tục, lỗi thƣờng trú đƣợc khai báo và định vị bởi readback. Bởi vì độ chi tiết của tái cấu hình dựa trên khung, nên ―viên gạch‖ không đƣợc nhỏ hơn một khung cấu hình.
2.5.3. Kết hợp các hướng tiếp cận
Sự kết hợp của vài phƣơng pháp tiếp cận chịu lỗi đã đƣợc khai thác. Các giải pháp từ [69, 37, 14] kết hợp readback với cấu hình sạch. Chúng có khả năng phát hiện và sửa lỗi bằng cách sử dụng các phƣơng pháp tiếp cận mức thấp là phát hiện các bit lật không mong muốn trong bộ nhớ cấu hình. Tuy nhiên, các hệ thống này không thể phân biệt đƣợc các lỗi phát hiện thực sự ảnh hƣởng đến thiết kế. Đôi khi, bit bị lật không thuộc về bất kỳ thiết kế nào, vì vậy việc sửa chữa lỗi này là vô nghĩa, bởi vì bit không nhạy cảm này không thực sự ảnh hƣởng đến chức năng hệ thống.
Mã kiểm tra CRC và phƣơng pháp nhân ba tài nguyên với bộ xác định chính đƣợc sử dụng song song trong [27]. Mã kiểm tra CRC đƣợc tạo ra tƣơng ứng với các mô-đun lặp, việc xác định (vote) đƣợc thực hiện dựa trên những CRC này để phát hiện các lỗi. Hệ thống này cũng có thể đƣợc phục hồi bằng cách sao chép bộ nhớ cấu hình của các FPGA không lỗi tới FPGA có lỗi. Trên thực tế, giải pháp này đòi hỏi phải xâm nhập sửa đổi mục đích thiết kế do đó có thể ảnh hƣởng đến các chức năng. Hơn nữa, giải pháp này chỉ có thể làm việc với hệ thống đa FPGA và không đƣợc áp dụng vào chỉ một thiết bị vì tính không đồng nhất của cấu trúc FPGA nội. Cuối cùng, hệ thống đa FPGA thực hiện giải pháp này phải sử dụng cùng một thiết bị FPGA cho toàn bộ nền tảng cũng vì sự không đồng nhất của các FPGA khác nhau.
Phƣơng pháp cấu hình lại từng phần linh đƣợc động đồng bộ với TMR đƣợc trình bày trong [17] kết hợp với tái cấu hình từng phần linh động với TMR. Phƣơng pháp này sử dụng TMR thô với một bộ xác định (voter) đặc biệt có thể chỉ ra các mô-đun bị
Nguyễn Viết Hiếu – K16D2
lỗi. Định nghĩa các điểm kiểm soát (check-point) cho phép đồng bộ hóa các mô-đun. Sử dụng tái cấu hình từng phần linh động, một khối bị lỗi là đƣợc cấu hình lại và tái đồng bộ hóa đƣợc thực hiện trong khi phần còn lại của hệ thống hoạt động. Kỹ thuật này làm cho nó có thể cấu hình lại một khối của TMR đang chạy, vì vậy mà không mất thông tin. Tuy nhiên, phƣơng pháp này là không thích hợp cho hệ thống lớn đƣợc bởi vì quá nhiều phần cứng của TMR. Hơn nữa, dung lƣợng bộ nhớ lớn là cần thiết để lƣu trữ bối cảnh tại điểm kiểm soát (check-point). Các điểm kiểm soát cần đƣợc phân tích cẩn thận để bảo dƣỡng các dịch vụ, chức năng. Cuối cùng, loại hệ thống này không có tính ứng dụng rộng rãi bởi vì nó chỉ thích nghi với máy trạng thái hữu hạn (FSM - Finite State Machine) nơi mà tất cả các trạng thái đƣợc xác định tốt trong giai đoạn thiết kế.
2.5.4. Tiêm lỗi
Để đánh giá độ tin cậy của một hệ thống, cần thiết để đánh giá hiệu quả các phƣơng án giảm lỗi áp dụng trong hệ thống. Điều này liên quan đến các thí nghiệm tiêm lỗi để ƣớc lƣợng các tham số lỗi. Nói chung, có rất nhiều cách để thực hiện tiêm lỗi. Một SEU trong một tế bào nhớ có thể đƣợc mô hình hóa nhƣ một bit lật. Nó có thể đƣợc dễ dàng tiêm trong thành phần bộ nhớ đƣợc mô tả trong ngôn ngữ mô tả phần cứng, chẳng hạn nhƣ VHDL hoặc Verilog, bằng cách thực hiện một hoạt động XOR giữa giá trị đƣợc lƣu trữ ban đầu và mặt nạ, mặt nạ này xác định bit sẽ đƣợc lật [29].
Với các FPGA dựa trên SRAM, lật bit có thể xảy ra trong bất kỳ bit nào của bitstream, kết quả là, thực hiện các lỗi tiêm trực tiếp trong bitstream FPGA mà không cần hiểu thiết kế và cấu trúc liên kết trong mô tả phần cứng. Bitstream có thể đƣợc trực tiếp sửa đổi bằng cách sử dụng bất kỳ trình soạn thảo văn bản trên máy tính. Sửa đổi này không cần biết cấu trúc thiết kế, nhƣng cấu trúc bitstream của thiết bị có liên quan thì các bit đƣợc thay đổi phải nằm trong phần dữ liệu mà không phải trong phần lệnh.
Bộ phát triển phần mềm JBits (SDK) [70] là một tập hợp các lớp Java cung cấp một giao diện chƣơng trình ứng dụng (API) vào bitstream của họ FPGA Xilinx Virtex- II. Giao diện này hoạt động hoặc trên các bitstream tạo ra bởi các công cụ thiết kế Xilinx, hoặc trên các bitstream readback từ phần cứng thực tế. Điều này cung cấp khả năng thiết kế, điều chỉnh và tự động thay đổi các mạch trong các thiết bị Virtex. JBits API cung cấp cho ngƣời dùng khả năng cấu hình trực tiếp CLB. Bằng cách sử dụng các lớp JBits, ta có thể thực hiện một lỗi tiêm chọn lọc trong bitstream, mà cũng có thể làm giảm thời gian tiêm lỗi. Các thao tác với bitstream bằng cách sử dụng trình soạn thảo văn bản hoặc JBits SDK là phƣơng pháp sử dụng máy tính bên ngoài. Phƣơng pháp trực tuyến [28] cũng đƣợc áp dụng bằng cách sử dụng các nguồn tài nguyên cấu hình lại đƣợc sẵn có trong thiết bị để thực hiện tái cấu hình lại linh động. Một bộ điều khiển chuyên dụng đƣợc xây dựng bên trong ma trận readback của khung liên quan, lật một bit bên trong các khung dữ liệu cấu hình, sau đó ghi các khung đã tiêm lỗi tới ma
Nguyễn Viết Hiếu – K16D2
trận bằng cách sử dụng quá trình làm sạch. Trƣớc khi thực hiện việc tiêm tiếp theo, các lỗi trƣớc đó nên đƣợc loại bỏ để tránh sự tích tụ lỗi. Lỗi có thể đƣợc loại bỏ bằng cách sử dụng kỹ thuật làm sạch thêm một lần nữa cho lỗi không ổn định hoặc tái cấu hình từng phần dựa trên mô-đun cho các lỗi ổn định. Nếu thiết kế không đƣợc phân chia nhƣ tái cấu hình dựa trên mô-đun, để đối phó với các lỗi ổn định cần khởi động lại toàn bộ hệ thống.
2.6. Tóm tắt và kết luận
Với tính linh hoạt của mình, FPGA là rất hợp với các ứng dụng nhúng có nhiệm vụ quan trọng, nhƣng chúng rất nhạy cảm với bức xạ và nhiễu điện từ [71]. Vì vậy, độ tin cậy của chúng có thể là không đủ, trừ khi một số kỹ thuật chịu lỗi có khả năng giảm nhẹ sai sót mềm đƣợc sử dụng. Những ảnh hƣởng chủ yếu đƣợc biết là các nhiễu loạn sự kiện đơn (SEU) hoặc các lỗi mềm, bởi vì chỉ vài trạng thái logic của vài phần tử nhớ bị thay đổi trong khi bản thân thiết bị là rất hiếm khi bị hƣ hỏng vĩnh viễn. Trong FPGA, SEU có thể trực tiếp làm hỏng kết quả tính toán hoặc gây ra thay đổi bộ nhớ cấu hình, có thể gây ra những thay đổi làm suy thoái chức năng và hiệu suất của thiết bị. Có hai cách để thực hiện các mạch chịu lỗi trong các FPGA dựa trên SRAM, nhƣ mô tả trong sơ đồ của hình 2.20.
Hình 2.20: Quy trình thiết kế giảm SEU và SET
Khả năng đầu tiên là thiết kế một ma trận FPGA mới bao gồm các thành phần chịu lỗi. Một số công ty FPGA cung cấp một số họ chịu bức xạ trong đó có các thành phần chịu lỗi. Các phƣơng án chịu lỗi dựa trên sự dự phòng nhƣng đƣợc xây dựng bên trong mạch và ngƣời dùng không cần phải quản lý điều đó. Cách tiếp cận này đòi hỏi rất nhiều kỹ sƣ và thời gian phát triển. Hơn nữa, các thiết bị đặc biệt chỉ có thị trƣờng
Nguyễn Viết Hiếu – K16D2
nhỏ nhƣ ô tô và hàng không vũ trụ là không thể cho phép sản xuất khối lƣợng lớn. Do đó các FPGA đặc biệt là thƣờng đắt hơn nhiều so với các thiết bị thƣơng mại.
Khả năng thứ hai là sử dụng các FPGA thƣơng mại và áp dụng kỹ thuật mô tả ở mức cao của thiết kế trƣớc khi mô tả này đƣợc tổng hợp trong FPGA. Ngƣời sử dụng có trách nhiệm để làm cứng thiết kế của mình mà không yêu cầu chế tạo chip mới. Nhanh chóng thay đổi hoàn toàn của cả phần cứng và cập nhật phần mềm đƣợc đảm bảo bởi các nhà sản xuất trong suốt thời gian sống của thiết bị. Thiết bị quá cũ có thể đƣợc dễ dàng thay thế bởi những cái mới nhờ vào khả năng tƣơng thích ngƣợc và do đó nó có thể thu hút sự chấp nhận từ ngƣời sử dụng.
Một số các FPGA hiện đại cung cấp tái cấu hình linh động không chỉ cung cấp một mức độ linh hoạt cao hơn, mà còn có giải pháp hiệu quả để sửa chữa SEU. Sử dụng tái cấu hình linh động sẽ cho phép phát hiện lỗi trên hệ thống trong quá trình hoạt động, định vị trí lỗi rất nhanh, điều chỉnh nhanh, nhanh chóng phục hồi từ những thất bại tạm thời, tránh khoảng nghỉ dài của chức năng ngắt, nhanh chóng sửa chữa lỗi thƣờng trú thông qua cấu hình lại và duy trì dịch vụ liên tục là rất quan trọng trong tính toán có độ tin cậy cao.
Trong phần còn lại của luận văn này, giới thiệu về mô hình kết hợp các phƣơng pháp tiếp cận khác nhau với tái cấu hình linh động: phát hiện lỗi hiệu quả, nhanh chóng sửa chữa và phục hồi từ lỗi. Luận văn này tập trung tới lỗi gây lên bởi SEU trong bộ nhớ cấu hình và các thành phần có thể cấu hình lại cũng nhƣ các lỗi thƣờng trú đơn.
Nguyễn Viết Hiếu – K16D2
CHƢƠNG 3: CHỊU LỖI TRONG CHIP HỆ THỐNG ĐA NHÂN ĐỘNG (DyMPSoC)
3.1. Tóm tắt
Sau khi nghiên cứu các giải pháp kỹ thuật cao về khả năng chịu lỗi trong các kiến trúc có thể cấu hình lại, có thể thấy rằng kỹ thuật về kiến trúc và khả năng chịu lỗi mức hệ thống là thú vị hơn bằng cách sử dụng FPGA thƣơng mại có sẵn thay vì trực tiếp sử dụng các FPGA chuyên dụng chịu đƣợc bức xạ.
Hiện nay, tính toán song song là một xu hƣớng quan trọng của hệ thống nhúng. Khả năng có thể đáp ứng yêu cầu ngày càng tăng trong sức mạnh tính toán để phân phối các nhiệm vụ trên các bộ xử lý khác nhau và để cho những bộ xử lý này hoạt