Metody weryfikacji użyte przy tworzeniu procesora Intel® Pentium® 4

Historia powstania procesora

Budowa procesora Pentium 4

Procesor Pentium 4 składa się z 42 milionów tranzystorów wykonanych w technologii 0.18u i połączonych sześcioma warstwami aluminiowych ścierzek. Kostka ma rozmiar 217 mm2 i pobiera 55 watów (w wersji 1.5 GHz). Procesor ma przepustowość szyny 3.2 GB/sekundę. W Pentium 4 dodano 144 nowych 128-bitowych rozkazów SIMD (Single Instruction Multiple Data), które nazwano SSE2 (Streaming SIMD Extension 2).


Diagram 1: Uproszczony diagram blokowy Pentium 4


Diagram 2: Architektura Pentium 4

Potrzeba weryfikacji

Po tym jak błąd w procesorze Intel Pentium kosztował około 500 mln $, Intel zdał sobie sprawę z tego, że należy lepiej weryfikować modele procesorów jeszcze zanim trafią one do produkcji.

Specjalnie na potrzeby weryfikacji Pentium 4, został skompletowany zespól około 70 specjalistów. Rdzeń zespołu stanowiło 10 pracowników biorących poprzednio udział w weryfikacji procesora Pentium Pro. Dodatkowych 40 pracowników zatrudniono w 1997 roku wśród absolwentów college'ów. Kolejnych 20 pracowników zatrudniono w 1998 roku. Na wczesnym etapie prac, dużym wysiłkiem było wyszkolenie nowego personelu.

Oczywiście obecnie nie jest możliwa pełna formalna weryfikacja tak skomplikowanego urządzenia jak procesor Pentium 4. W związku z tym formalną weryfikację zastosowano tylko do niektórych fragmentów procesora takich jak jednostka zmiennoprzecinkowa czy układ dekodujący instrukcje.

Metody i narzędzia weryfikacji

Weryfikację Pentium 4 można podzielić na dwa etapy: najpierw przeprowadzono weryfikację modelu, a następnie weryfikację krzemowego prototypu. W każdym etapie zastosowano wiele metod i narzędzi.

Weryfikacja modelu

Weryfikacja krzemowego prototypu

Wykryte błędy

Łącznie w procesie weryfikacji znaleziono 7855 błędów, z czego około 100 znaleziono za pomocą metod formalnych. Prawdopodobnie 20 spośród tych 100 błędów nie udałoby się znaleźć bez zastosowania metod formalnych, gdyż szansa na ich trafienie w testowaniu była bardzo mała.

Dwa z wykrytych za pomocą formalnej weryfikacji błędów, to przykłady klasycznych problemów z dziedziny obliczeń zmiennoprzecinkowych:

  1. W instrukcji FADD dla pewnej kombinacji argumentów 72-bitowy sumator ustawiał bit przeniesienia na 1, gdy nie występowało przeniesienie.
  2. W instrukcji FMUL bit "sticky" nie był poprawnie ustawiany dla pewnych kombinacji wartości mantys argumentów, przy ustawionym trybie zaokrąglania do góry. Konkretnie:
    src1[67:0] := X*2(i+15) + 1*2i
    src2[67:0] := Y*2(j+15) + 1*2j
    gdzie i+j = 54 i {X,Y} są dowolnymi 68-bitowymi liczbami całkowitymi.
    Zauważmy, że błąd ten prawdopodobnie nigdy nie zostałby znaleziony w praktyce, gdyż szansa jego wystąpienia dla losowych liczb wynosi około 1 do 5*1020 .

Omówienie znalezionych błędów

W procesorze Pentium 4 udało się wykryć 350% więcej błędów niż w procesorze Pentium Pro. Przy aktualnie zastosowanej metodologii, procent wykrytych błędów jest zbliżony do 100%.

Łączny rozkład błędów:

Błędy znalezione podczas pracy w poszczególnych zespołach:

Źródła i dodatkowe materiały



Autor prezentacji: Dymitr Pszenicyn
Email: dp189434@students.mimuw.edu.pl