CHƢƠNG 2 : CÁC KHÁI NIỆM
2.5. Chiến lƣợc giảm SEU trong các FPGA dựa trên SRAM
SEU đƣợc công nhận là mối quan tâm chính về vấn đề độ tin cậy trong FPGA dựa trên SRAM. Tính năng của cấu hình lại từng phần linh động đƣợc giới thiệu trong các kiến trúc cấu hình lại mới không chỉ tăng cƣờng tính linh hoạt, mà cũng có thể đƣợc sử dụng cho việc cải thiện mức độ khả năng chịu lỗi của hệ thống. Vì vậy, bên cạnh các giải pháp về khả năng chịu lỗi cổ điển đƣợc liệt kê tại mục 2.4, một số kỹ thuật chịu lỗi sử dụng cấu hình lại linh động đối phó với SEU đã đƣợc đề xuất. Theo
loại SEU khác nhau trong bộ nhớ cấu hình, các chiến lƣợc thích hợp đƣợc chọn để đối phó với mỗi SEU cấu hình cụ thể.
Vì vậy, luận văn này phân loại SEU cấu hình sau hành vi về tính bền bỉ của chúng (tức là lỗi ảnh hƣởng đến khung cấu hình nhƣ thế nào trong FPGA, đƣợc mô tả tại mục 2.3.1). Sau đó, luận văn này cũng giới thiệu các chiến lƣợc tiềm năng đối phó với những SEU cấu hình.
2.5.1. Readback
Readback [68] là một hoạt động đọc thông tin cấu hình của bộ nhớ cấu hình. Sau khi một FPGA đƣợc lập trình, readback cho phép đọc dữ liệu lập trình của FPGA và các thông tin khác thông qua giao diện cấu hình.
Đầu tiên, readback có thể đƣợc sử dụng để đảm bảo rằng các dữ liệu cấu hình hiện thời đƣợc lƣu trữ trong FPGA là chính xác. Nó cung cấp khả năng phát hiện các SEU trong bộ nhớ cấu hình mà không làm gián đoạn hoạt động của mình.
Thứ hai, readback có thể đƣợc dùng để đọc trạng thái hiện tại của tất cả các CLB nội, bộ kết nối và hộp chuyển mạch cho việc gỡ lỗi phần cứng, chức năng xác minh của các ứng dụng máy tính cấu hình lại. Readback chỉ cung cấp khả năng phát hiện, nó phải hợp tác với một kỹ thuật hiệu chỉnh.
2.5.2. Tái cấu hình từng phần
Ả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
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.
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ị
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
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.