Chương 1. Tổng quan về kiểm tra bộ nhớ, các mô hình lỗi và mạch logic tự kiểm tra bộ nhớ
1.4. Các thuật toán kiểm tra
1.4.2. Các thuật toán March
Kích thước của bộ nhớ càng ngày lớn và nhiều lỗi phức tạp xuất hiện. Các thuật toán truyền thống hoặc là không đủ mạnh để phát hiện lỗi, hoặc là mất quá nhiều thời gian để chạy kiểm tra. Có nhiều thuật toán mới được phát triển nhưng nếu chúng có độ phức tạp tính toán cao hơn độ phức tạp tuyến tính theo thời gian thì việc sử dụng sẽ là không khả thi. Hình 1-6 thể hiện mối liên hệ giữa độ phức tạp tính toán và thời gian kiểm tra [3].
Hình 1–6 So sánh độ phức tạp tính toán và thời gian kiểm tra Theo dữ liệu trong hình 1-6, nếu bộ nhớ 1Gigabit được kiểm tra với thuật toán có độ phức tạp tuyến tính n thì thời gian kiểm tra chỉ là 1.75 phút nhưng nếu kiểm tra với thuật toán có độ phức tạp n2 thì sẽ mất 3659 năm.
Vì lí do đó, một thuật toán tuyến tính theo thời gian, đủ đơn giản mà vẫn phát hiện được các lỗi SAF, TF, CF được phát triển. Chúng ta gọi đó là thuật toán March. Hiện nay, thuật toán March đã phát triển rất phổ biến và có rất nhiều thuật toán March biến thể mới. Một số thông tin về thuật toán March được giới thiệu dưới đây [3].
1.4.2.1. Kí hiệu cho thuật toán March Test
↑ Địa chỉ thay đổi theo thứ tự tăng dần.
↓ Địa chỉ thay đổi theo thứ tự giảm dần.
↕ Địa chỉ thay đổi theo thứ tự bất kỳ.
r0 lệnh đọc dữ liệu 0 từ ô nhớ
r1 lệnh đọc dữ liệu 1 từ ô nhớ
w0 lệnh ghi dữ liệu 0 từ ô nhớ
w1 lệnh ghi dữ liệu 1 từ ô nhớ
Độ phức tạp tính toán của thuật toán March phụ thuộc số lượng lệnh có trong thuật toán. Ví dụ với thuật toán có 10 lệnh đọc/ghi dữ liệu thì độ phức tạp tính toán là 10n.
1.4.2.2. Một số thuật toán March cơ bản
Sau đây là một số thuật toán March cơ bản đã được nghiên cứu và sử dụng [2,3,4,8].
a) MATS+
Thuật toán MATS+ phát hiện được tất cả lỗi SAF và AF, nó thường được sử dụng thay cho thuật toán MATS khi kiểm tra bộ nhớ với công nghệ được sử dụng chưa rõ. Độ phức tạp tính toán là 5n. Kí hiệu cho MATS+ như sau
{↕(w0);↑(r0,w1);↓(r1,w0)}
b) MATS++
Thuật toán MATS++ là một thuật toán hoàn chỉnh, không dư thừa và đã được tối ưu. Nó khá giống MATS+ test nhưng có thể phát hiện lỗi TF. Độ phức tạp tính toán là 6n và thuật toán này được đề cử cho việc kiểm tra các lỗi unlinked SAF và TF.
{↕(w0);↑(r0,w1);↓(r1,w0,r0)}
c) March X
Thuật toán MARCH X được gọi tên như vậy vì nó đã được sử dụng mà không được công bố chính thức. Nó phát hiện được các lỗi unlinked SAF, AF, TF và CFin. Độ phức tạp tính toán của MARCH X là 6n.
{↕(w0);↑(r0,w1);↓(r1,w0);↕(r0)}
d) March C, C−
March C thường được dùng để phát hiện các lỗi unlinked CFid; tất nhiên nó cũng phát hiện được các lỗi AF, SAF, unlinked TF, CFst, and unlinked CFin.
Độ phức tạp tính toán của March C là 11n.
{↕(w0);↑(r0,w1);↑(r1,w0);↕(r0);↓(r0,w1);↓(r1,w0);↕(r0)}
March C− phát hiện được các lỗi SAF and unlinked TF bởi vì các ô nhớ được đọc theo trạng thái 0,1,0,....Do đó cả chiều chuyển trạng thái ↑ và ↓, và lệnh
đọc sau đó đều được diễn ra. March C− cũng phát hiện các lỗi CFid, CFin and CFst với sự giới hạn là các lỗi CF là không kết nối. Độ phức tạp tính toán là 10n.
{↕(w0);↑(r0,w1);↑(r1,w0);↓(r0,w1);↓(r1,w0);↕(r0)}
e) March A
March A là thuật toán ngắn nhất để phát hiện lỗi linked CFids; tất nhiên nó kiểm tra được các lỗi AF, SAF, linked CFid, TF không liên kết với CFid, và lỗi CFin liên kết với CFid. Chứng minh cho March A đã được hoàn thiện. Độ phức tạp của nó là 15n.
{↕(w0);↑(r0,w1,w0,w1);↑(r1,w0,w1);↓(r1,w0,w1,w0);↓(r0,w1,w0)}
f) March Y
Thuật toán MARCH Y là mở rộng của MARCH X. Độ phức tạp của nó là 8n và nó có thể phát hiện được tất cả các lỗi giống như MARCH X.
{↕(w0);↑(r0,w1,r1);↓(r1,w0,r0);↕(r0)}
g) March B
Thuật toán March B là mở rộng của March A, so với March A, nó phát hiện thêm được lỗi TF liên kết với CFin hoặc CFid. Để làm được điều này, phần tử M1 của March A được mở rộng thêm hai lệnh đọc vì lỗi TF không thể bị che bởi lỗi CF khi không có lệnh ghi đến ô nhớ khác. Độ phức tạp thuật toán là 17n.
{↕(w0);↑(r0,w1,r1,w0,r0,w1);↑(r1,w0,w1);↓(r1,w0,w1,w0);↓(r0,w1,w0)}
1.4.2.3. Tổng kết
Hình 1-7 là số liệu thực tế khả năng phát hiện lỗi của một số thuật toán March đối với bộ nhớ SRAM 16-Kbit [1,6].
Hình 1–7 Khả năng phát hiện lỗi của một số thuật toán Và bảng 1-1 tóm tắt mô hình lỗi mà một số thuật toán phát hiện được [2].
Bảng 1–1Tổng kết mô hình lỗi
Lỗi AF SAF TF CF Lỗi khác TC
MARCHING 1/0 DS D N N 14n
MATS D D N N 4n
MATS+ D D D N 5n
MATS++ D D D N 6n
MARCH X D D D D Ul-CFin 6n
MARCH C D D D D Ul-CFin 11n
MARCH C- D D D D Ul-CF 10n
MARCH A D D D D l-TF 15n
MARCH Y D D D D l-CF 8n
MARCH B D D D D Read access time 7n
N=‟No‟, L=‟locate‟, D=‟detect‟, LS= „locate some‟, DS=„detect some‟, TC=‟Test complexity‟
Các thuật toán được mô tả bên trên là các thuật toán tiêu biểu và được sử dụng rộng rãi. Thực tế, càng nhiều thuật toán được triển khai, càng nhiều lỗi bộ
nhớ được phát hiện. Tôi đã thống kê và tìm được 42 thuật toán March. Do đó trong luận văn này, tôi đề xuất kiến trúc kiểm tra bộ nhớ sử dụng đủ thông tin từ 42 thuật toán March. Với số lượng thuật toán lớn như vậy, kiến trúc kiểm tra bộ nhớ này có thể phát hiện được nhiều lỗi cho nhiều loại bộ nhớ khác nhau. Kiến trúc này đồng thời cũng rất linh hoạt, chúng ta có thể chọn thuật toán tốt nhất để kiểm tra cho một loại bộ nhớ nhất định.
Danh sách 42 thuật toán March được sử dụng trong việc thiết kế thuật toán kiểm tra như bảng 1-2 [1,3,4,9]:
Bảng 1–2Tổng kết 42 thuật toán March
MATS MOVI SOA-MATS+ IFA-9N
MATS+ March U March LR IFA-13N
MATS++ March U- SOA-March C-- 6N
Marching 1/0 9N March G Algorithm A
March X March LA March GS March B+
March C Marinescu A March M LA-
March C- Alogirthm B March LRD LAD
March A SOA-CFst March LRDD LADD-
March Y SOA-March B-- March UD March G+
March B SOA-March C- March UD- March PS
Check board March FT