Asynchronous Router

Specyfikacja

Router posiada M portów wejściowych i na każdym z nich może wczytać wartość z zakresu 0-(N-1).

Po wczytaniu wartości j na porcie i Router wysyła wartość i na porcie j

Po wysłaniu przez port j czeka na potwierdzenie

Po otrzymaniu potwierdzenia wysyła potwierdzenie na odpowiednim porcie i

Jedyną przeszkodą przy wczytywaniu wartości na porcie i jest sytuacja, kiedy Router nie wysłał jeszcze potwierdzenia poprzedniej transmisji na tym porcie

Jedyną przeszkodą przy wysyłaniu przez port j jest sytuacja kiedy Router wczyta na pewnym porcie wartość j. Wtedy mamy sytuację kiedy kilka wiadomości ma być wysłanych tym samym portem. Router sam wybiera kolejność.

Implementacja 1

Implementacja 2

Cell składa się z dwóch komponentów: C i Arbiter

C sprawdza czy wartość jest równa kolumnie w której jest. Jeśli tak to wysyła numer portu do Arbitera jeśli nie to wysyła wartość do następnego Cell'a

Arbiter może być w jednym z dwóch stanów: albo wysłał wartość otrzymaną od C albo otrzymaną od Arbitera poniżej. Gdy wysłał wartość otrzymaną od swojego C to po otrzymaniu potwierdzenia wysyła to potwierdzenie do C. Jeśli wysłał wartość otrzymaną od Arbitera poniżej to do niego wysyła potwierdzenie (oczywiście po uprzednim otrzymaniu potwierdzenia z góry).

Przykładowa formuła odróżniająca router 1 od 2

[[in0(0)]] <<in1(0)>> [[out0(1)]] F

Implementacja 3

Pliki