DecomposeReal4 (10026)

1) Przeznaczenie bloku
DecomposeReal4 służy do rozłożenia 4-bajtowej liczby rzeczywistej pojedynczej precyzji (Real4) na dwie wartości 16-bitowe.
Blok działa odwrotnie do ComposeReal4 i w Simultusie przebieg jest następujący:
-
przyjmuje jedną liczbę typu Real (R), czyli 8-bajtową liczbę rzeczywistą o podwójnej precyzji (double),
-
najpierw konwertuje ją do Real4 (4-bajtowej liczby rzeczywistej pojedynczej precyzji),
-
dopiero potem rozdziela wewnętrzną reprezentację bitową tej wartości Real4 na:
-
młodsze słowo 16-bitowe (low),
-
starsze słowo 16-bitowe (high).
-
Blok nie wykonuje przeliczeń matematycznych na etapie rozdzielania słów – operuje na reprezentacji bitowej wartości Real4 powstałej po konwersji.
2) Interfejs bloku (wejścia / wyjścia)
Wejście
in
Typ: R (Real)
Wejściem jest liczba rzeczywista typu Real w Simultusie, tj. double (8 bajtów), która ma zostać ostatecznie rozbita na dwa słowa 16-bitowe (po konwersji do Real4).
Wyjścia
low
Zawiera młodsze 16 bitów reprezentacji wartości Real4 utworzonej z in.
Odpowiada bitom 0…15.
high
Zawiera starsze 16 bitów reprezentacji wartości Real4 utworzonej z in.
Odpowiada bitom 16…31.
Oznaczenie R przy wejściu jednoznacznie wskazuje, że blok przyjmuje liczbę rzeczywistą typu Real (double). Rozbijanie dotyczy natomiast reprezentacji Real4 powstałej po konwersji.
3) Zasada działania (bit po bicie)
Blok działa w dwóch krokach:
Krok 1 – konwersja wejścia
-
in(Real w Simultusie, double 8 bajtów) → konwersja do Real4 (4 bajty)
Krok 2 – rozkład Real4 na dwa słowa 16-bit
Blok rozkłada 32-bitowy wzorzec bitowy liczby typu Real4 w następujący sposób:
-
low[15:0] = real4_bits[15:0] -
high[15:0] = real4_bits[31:16]
W zapisie operacyjnym:
-
low = bits32 AND 0xFFFF -
high = (bits32 >> 16) AND 0xFFFF
gdzie bits32 to wewnętrzna 4-bajtowa reprezentacja wartości Real4 uzyskanej z in.
4) Znaczenie faktu, że rozkład dotyczy Real4
Liczba Real4 jest zapisana w 4 bajtach jako:
-
bit znaku,
-
bity wykładnika,
-
bity mantysy.
Blok DecomposeReal4:
-
nie analizuje znaczenia tych pól,
-
nie zmienia ich,
-
jedynie dzieli cały 4-bajtowy wzorzec na dwie części po 16 bitów.
Oznacza to, że:
-
low i high nie są „liczbami rzeczywistymi”, tylko fragmentami reprezentacji bitowej Real4,
-
ich sens ujawnia się dopiero po ponownym złożeniu (np. w ComposeReal4 lub po przesłaniu do urządzenia).
Dodatkowo: ponieważ na wejściu jest Real (double), a rozkład dotyczy Real4, to przed rozbiciem wykonywana jest konwersja do pojedynczej precyzji, co może ograniczyć dokładność do tej dostępnej w Real4.
5) Kolejność słów (istotna w komunikacji)
Blok zawsze działa w ten sam sposób:
-
low = młodsze słowo (LSW),
-
high = starsze słowo (MSW).
Przy zapisie do rejestrów komunikacyjnych należy sprawdzić:
-
czy urządzenie oczekuje kolejności:
-
low → pierwszy rejestr, high → drugi,
-
-
czy odwrotnej.
Blok nie zamienia kolejności słów – jedynie je wydziela.
6) Procedura użycia krok po kroku
Podłącz liczbę Real (typ Simultusa: double, 8 bajtów) do wejścia in.
Odczytaj:
-
low jako młodsze 16 bitów,
-
high jako starsze 16 bitów
reprezentacji Real4 powstałej po konwersji wartości wejściowej.
Przypisz wartości low i high do rejestrów, zmiennych lub dalszych bloków.
Przy komunikacji zewnętrznej upewnij się, że kolejność zapisu odpowiada wymaganiom urządzenia.
7) Przykład na konkretnych liczbach
Przykład pokazuje mechanizm działania, oparty wyłącznie na reprezentacji bitowej.
Załóżmy, że po konwersji wartości wejściowej in do Real4 powstaje reprezentacja 4-bajtowa:
-
bits32 = 0x3F800000
Rozkład:
-
low = 0x0000 -
high = 0x3F80
Na wyjściach bloku:
-
low = 0 -
high = 16256(wartość wynikająca bezpośrednio z bitów)
Przykład pokazuje, że blok nie interpretuje wartości liczbowej na etapie rozdzielania słów, tylko rozdziela wzorzec bitowy Real4 (uzyskany po konwersji z typu Real w Simultusie).
8) Jak można wykorzystać blok DecomposeReal4
Blok DecomposeReal4 stosuje się w sytuacjach, gdy:
-
w programie pracujesz na zmiennej typu Real (double, 8 bajtów),
-
musisz zapisać ją lub przesłać jako dwa słowa 16-bitowe reprezentujące Real4 (po konwersji do pojedynczej precyzji).
Typowe zastosowania:
-
przygotowanie wartości rzeczywistych do zapisu w rejestrach komunikacyjnych,
-
transmisja danych do urządzeń, które operują na 16-bitowych rejestrach,
-
pełna para funkcjonalna z blokiem ComposeReal4 (rozkład → transmisja → złożenie).