Nasze przemówienie na Open Source Summit. Pozostało 15 dni na przekazanie 2600 euro.

Nasz projekt płyty głównej PPC64

Wstępny termin Fazy1B to 18 listopada, więc pozostały dwa tygodnie na przekazanie pozostałych 2600 euro. Jeśli osiągniemy cel, płytka drukowana z symulacją magistrali SI powinna być gotowa do połowy grudnia.

W tym przypadku przed końcem 2020 roku rozpoczynamy prace nad produkcją Prototypów wraz z Akcją Darowizny Prototypów.

Musimy nadać nazwę płycie głównej, sugestie pozostają otwarte jeszcze przez kilka dni na naszym forum

Nasze sugestie dotyczące licencji Open Hardware i endianness na OSS 2020

Rozmawialismy o Cern Open Hardware License i endianiźmie na konferencji Open Source Summit + Embedded Linux w Europie 27 października 2020 r.

Cern Open Hardware License

Dlaczego nie licencja na oprogramowanie, taka jak GPL?
Licencje na sprzęt są specyficzne dla sprzętu, więc są napisane przy użyciu odpowiednich słów: producent, urządzenia, narzędzie CAD…

Dlaczego wybieramy CERN Open Hardware License v1.2?
Uważamy, że zapewnia lepszą ochronę licencjodawcy w porównaniu z innymi licencjami sprzętowymi, takimi jak licencje TAPR Open Hardware

Kim więc jest licencjodawca i licencjobiorca?
– W naszym projekcie my (Power Progress Community) jesteśmy licencjodawcą
… A licencjobiorca jest producentem sprzętu.
Licencjobiorca może produkować lub dystrybuować Produkty
– Licencjobiorca może modyfikować naszą pracę, ale modyfikacja musi być dostępna na tej samej lub równoważnej licencji
Licencjodawca jest chroniony
– Jakość i odpowiedzialność za sprzęt należą do licencjobiorcy

Inne ważne uwagi
– Oprogramowanie układowe, sterowniki i inne oprogramowanie wymagałyby ich własnej licencji
– Własność intelektualna należy do licencjodawcy
– Dokumentacja musi być dostarczona w odpowiednim formacie do modyfikacji (za pomocą narzędzia CAD)

Endianizm

Co to jest endianizm

W Polsce najczęściej używa się określenia „kolejność bajtów”. To sposób, w jaki dane są umieszczane w pamięci komputera. Wpływa na liczby całkowite, które są większe niż 1 bajt. Może to stanowić problem, gdy dwie różne architektury wymieniają dane. Jest to jeden z głównych problemów, o których musi pamiętać programista, pisząc oprogramowanie przenośne.

Endianizm w pamięci: Big Endian

Dane są odczytywane od lewej do prawej Najbardziej znaczący bajt znajduje się po lewej stronie
Słowo pod adresem 0x101 to:
0x0203 = 515
Podwójne słowo w 0x100 to:
0x01020304 = 16909060

Endianizm w pamięci: Little Endian

Dane są odczytywane od prawej do lewej
Najbardziej znaczący bajt znajduje się po prawej stronie
Słowo pod adresem 0x101 to:
0x0302 = 770
Podwójne słowo w 0x100 to:
0x04030201 = 67305985

Konwersja endianów

Istnieje kilka metod zamiany endianizmu

  • wymiana ręczna
  • automatyczna zamiana

Ręczna zamiana

16-bitowa zamiana bez znaku:
swapped = (num>>8) | (num<<8);

32-bitowa zamiana bez znaku:
swapped = ((num>>24)&0xff) | // move byte 3 to byte 0
((num<<8)&0xff0000) | // move byte 1 to byte 2 ((num>>8)&0xff00) | // move byte 2 to byte 1
((num<<24)&0xff000000); // byte 0 to byte 3

Istnieją gotowe do użycia funkcje, które mają takie samo zachowanie
bswap_16(x);
bswap_32(x);
bswap_64(x);

Wykrywanie architektury

Należy unikać ręcznej zamiany:
Wiąże się ze świadomością działającej architektury
Należy wykryć architekturę i zaimplementować określone przypadki, w przeciwnym razie kod nie będzie niezależny od architektury

Niektóre przydatne narzędzie z witryny pomaga w wykrywaniu architektury

#if __BYTE_ORDER == __LITTLE_ENDIAN
<LITTLE ENDIAN SWAP DEFINITION>
#elif __BYTE_ORDER == __BIG_ENDIAN
<BIG ENDIAN SWAP DEFINITION>
#end

Na przykład, jeśli żądanie little endian jest wymagane na platformie little endian, funkcja „#if define” zwróci dane bez zmian, w przeciwnym razie zostanie wywołana procedura wymiany

Funkcje konwersji

POSIX posiada przydatne narzędzia do automatycznej konwersji endianów zwane host-to-network i network-to-host:
#include <arpa/inet.h>
uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort);
Te funkcje są używane za każdym razem, gdy masz do czynienia z problemem endianness. Pamiętaj, że kolejność w sieci to „Najpierw najbardziej znaczący bajt”, innymi słowy, jest to Big Endian.

Istnieją inne funkcje do konwersji dużych / małych endianów.
Są to niestandardowe funkcje, ale są bardzo przydatne:
#include <endian.h>

uint16_t htobe16(uint16_t host_16bits);
uint16_t htole16(uint16_t host_16bits);
uint16_t be16toh(uint16_t big_endian_16bits);
uint16_t le16toh(uint16_t little_endian_16bits);

uint32_t htobe32(uint32_t host_32bits);
uint32_t htole32(uint32_t host_32bits);
uint32_t be32toh(uint32_t big_endian_32bits);
uint32_t le32toh(uint32_t little_endian_32bits);

uint64_t htobe64(uint64_t host_64bits);
uint64_t htole64(uint64_t host_64bits);
uint64_t be64toh(uint64_t big_endian_64bits);
uint64_t le64toh(uint64_t little_endian_64bits);

Projektowana nasza płyta główna ma pasowac do obudowy Slimbook Eclipse. Projekt PCB, nad którym obecnie pracujemy, powstaje przy użyciu Mentor Xpedition.

We wrześniu 2020 roku opublikowaliśmy w naszym repozytorium gitlab plik źródłowy Orcad z najnowszą wersją (v0.6) schematu elektrycznego, możesz głębiej poznać ten układ płytki, zaczynając od źródła Orcad.

Płyta główna – wierzch
Płyta główna – spód

Leave a Reply

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.