PLN | EUR | USD

Spełnienie różnorodnych wymagań w dziedzinie funkcjonalności i bezpieczeństwa dzięki procesorom wielordzeniowym

Przez: Stephen Evanczuk

Przekazane przez: Północnoamerykańscy redaktorzy Digi-Key

Motoryzacja, przemysł, robotyka, systemy kontroli w budynkach i inne kluczowe zastosowania systemów wbudowanych będą obsługiwać coraz bardziej zróżnicowane zadania - od monitorowania w czasie rzeczywistym z niskim poborem mocy po multimedialne aplikacje wysokiego poziomu z wieloekranowymi wyświetlaczami graficznymi dla interfejsów człowiek-maszyna (HMI). Spełniając tak szerokie wymagania funkcjonalne, muszą one jednocześnie spełniać rygorystyczne normy bezpieczeństwa, muszą być tańsze i mniejsze oraz optymalizować równowagę między mocą a parametrami.

Aby sprostać tym często sprzecznym wymaganiom, deweloperzy do tej pory musieli albo zrezygnować z funkcjonalności albo bardziej komplikować projekty i proces produkcji poprzez dodawanie urządzeń niezbędnych do spełnienia określonych wymagań, dotyczących między innymi grafiki, zabezpieczeń i bezpieczeństwa. Deweloperzy tak naprawdę potrzebują jednego rozwiązania obsługującego szeroką gamę produktów spełniających te wymagania w szerokim zakresie krytycznych zastosowań systemów wbudowanych.

W tym artykule opisano pokrótce ewolucję projektowania krytycznych systemów wbudowanych. Następnie pokazano, w jaki sposób wielordzeniowe procesory aplikacyjne - zaprojektowane przez firmę NXP Semiconductors specjalnie pod kątem szybko rosnącej listy wymagań dotyczących zarówno szerokiej funkcjonalności, jak i możliwości poświadczenia bezpieczeństwa - mogą być wykorzystane do rozwiązywania problemów deweloperów.

Ewolucja zagadnień związanych z projektowaniem systemów wbudowanych

Tradycyjna rola urządzeń wbudowanych, czyli wspieranie ograniczonego zestawu funkcji systemu została w dużej mierze zastąpiona poprzez zapotrzebowanie na urządzenia o dużych możliwościach. W zastosowaniach przemysłowych, przykładowo, zapotrzebowanie na rozszerzone możliwości interfejsów HMI w inteligentnych narzędziach i sprzęcie wymaga procesorów zdolnych do generowania zoptymalizowanej grafiki, przy jednoczesnym spełnieniu bardziej tradycyjnych wymagań przemysłowych wobec pracy w czasie rzeczywistym. Podobnie w zastosowaniach motoryzacyjnych tendencja do tworzenia hierarchicznych architektur składających się z klastrów domen funkcjonalnych i bramek generuje zapotrzebowanie na procesory w pełni zdolne do spełnienia tych wymagań (ilustracja 1).

Schemat architektur hierarchicznych w systemach motoryzacyjnychIlustracja 1: tendencja do tworzenia bardziej hierarchicznych architektur systemów motoryzacyjnych wygenerowała zapotrzebowanie na bardziej zintegrowane, skalowalne rozwiązania w dziedzinie procesorów. (Źródło ilustracji: NXP Semiconductors)

W każdej domenie funkcjonalnej zapotrzebowanie na bardziej zaawansowane możliwości stale podnosi próg wydajności i zintegrowanych możliwości. Dla przykładu, pojawienie się wyświetlaczy przeziernych wymaga rozwiązań stale dostarczających kierowcom ważnych informacji w formie graficznej. Wraz z tymi wyświetlaczami nowej generacji, rosnąca potrzeba zwiększania świadomości otoczenia kierowcy skutkuje dodatkowymi wymaganiami dotyczącymi interfejsów kamer i wydajnej pracy zaawansowanego oprogramowania do rozpoznawania twarzy, które będzie w stanie wykryć oznaki senności.

Ponieważ zastosowania te stale ewoluują, zapotrzebowanie na wysoce zintegrowane, skalowalne rozwiązania staje się coraz pilniejsze, ponieważ trzeba sprostać coraz bardziej zróżnicowanym wymaganiom przy jednoczesnej minimalizacji rozmiarów, kosztów i złożoności. Korzystając z serii procesorów aplikacyjnych i.MX 8 firmy NXP, deweloperzy mogą wykorzystać kompatybilną platformę procesorów o szeregu możliwości i parametrach niezbędnych do obsługi szerokiego zakresu wymagań danego zastosowania. Seria NXP i.MX 8X należąca do grupy i.MX 8 jest odpowiedzią na rosnące zapotrzebowanie na procesory z certyfikatem bezpieczeństwa, wymagane w zastosowaniach motoryzacyjnych i przemysłowych średniej klasy.

Architektura wielordzeniowa pozwala zarządzać różnymi zadaniami

Jedną z trudności, z jakimi borykają się deweloperzy w procesie wdrażania urządzeń do zastosowań motoryzacyjnych i przemysłowych, jest ogromna różnorodność wymagań. Tam, gdzie mogliby spodziewać się, że poradzą sobie z zadaniami przetwarzania w czasie rzeczywistym lub aplikacji wysokiego poziomu, zapotrzebowanie na inteligentne podsystemy połączyło te znacząco różniące się od siebie sposoby przetwarzania. Coraz częściej deweloperzy potrzebują rozwiązań zapewniających zarówno niezawodną odpowiedź w czasie rzeczywistym, jak i wydajną pracę aplikacji, jednocześnie spełniając wymagania bezpieczeństwa funkcjonalnego.

Procesory z serii i.MX 8X firmy NXP zostały zaprojektowane z myślą o pracy w czasie rzeczywistym, wysokiej sprawności przetwarzania oraz niskim zużyciu energii i w pełni wykorzystują zaawansowaną architekturę wielordzeniowych procesorów (CPU) do zarządzania różnorodnymi zadaniami obliczeniowymi (ilustracja 2).

Schemat architektury wielordzeniowej serii i.MX 8X firmy NXPIlustracja 2: seria i.MX 8X firmy NXP wykorzystuje architekturę wielordzeniową obejmującą procesor wbudowany Arm Cortex-M4 (CM4) i wiele procesorów aplikacyjnych Arm Cortex-A35 do obsługi mieszanych zadań oprogramowania. (Źródło ilustracji: NXP Semiconductors)

Urządzenia i.MX 8X zawierają procesor Arm Cortex-M4 (CM4) z jednostką zmiennoprzecinkową (FPU), moduł ochrony pamięci (MPU), jednostkę akceleracji kryptograficznej mapowanej na pamięć (MMCAU) i różne moduły sterujące (MCM), które świetnie sprawdzą się w ogólnych zadaniach związanych z przetwarzaniem danych w czasie rzeczywistym. Aby móc obsługiwać zewnętrzne urządzenia peryferyjne, takie jak czujniki i aktuatory, zestaw użytkownika CM4 łączy w sobie kontroler przerwań sprzętowych (NVIC) z obszernym zestawem interfejsów i modułów, w tym przekładników pomiarowych małej mocy (LPIT), modulację szerokości impulsu (PWM) oraz inne funkcje powszechnie wymagane w zastosowaniach motoryzacyjnych i przemysłowych. Para pamięci podręcznych i pamięci TCM (Tightly Coupled Memory) z kodowaniem korekcyjnym (ECC) pomaga zminimalizować dostęp do pamięci zewnętrznej, poprawić szybkość pracy i radzić sobie z błędami pamięci.

Platforma CPU szybko wykonuje zadania aplikacji, ponieważ składa się z wielu wydajnych energetycznie procesorów aplikacyjnych (AP) Arm Cortex-A35 - dwóch AP w procesorach 8DualXPlus, takich jak MIMX8UX6AVLFZAC i czterech AP w procesorach 8QuadXPlus, takich jak MIMX8QX6AVLFZAC. Platforma CPU zawiera dedykowaną instrukcję (I$) i pamięć podręczną danych (D$) oraz współdzieloną pamięć 512kb poziomu 2 (L2) z kodowaniem korekcyjnym (ECC).

Rdzenie Arm Cortex-A35 architektury zapewniają zarówno zgodność oprogramowania, jak i skalowalność wydajności, obsługując zarówno 32-bitową kompatybilność wsteczną, jak i pracę 64-bitową. Aby jeszcze bardziej przyspieszyć wykonywanie wymagających obliczeniowo algorytmów, takich jak przetwarzanie sygnałów i uczenie maszynowe, procesory Arm Cortex-A35 posiadają funkcję przetwarzania wektorów zmiennoprzecinkowych (VFP) i rozszerzania architektury SIMD (Single Instruction Multiple Data) w technologii Arm Neon. Aby przyspieszyć pracę oprogramowania nad przetwarzaniem obrazu, systemami wizyjnymi i procesami uczenia maszynowego, warto skorzystać z biblioteki programistycznej dla mikrokontrolerów Arm zawierającej funkcje zoptymalizowane pod kątem architektury procesorów i procesorów graficznych (GPU) firmy Arm, a także biblioteki typu open source Ne10 C udostępniającej funkcje zoptymalizowane pod kątem architektury Arm do intensywnych obliczeniowo operacji.

Dedykowane silniki odciążające procesory główne

Oprócz zestawu użytkownika CM4 i wielordzeniowej platformy CPU Arm Cortex-A35, architektura ta posiada dodatkowe dedykowane silniki do zastosowań multimedialnych. Wraz z cyfrowym procesorem sygnałowym (DSP) do przetwarzania dźwięku i głosu, architektura integruje zarówno procesor graficzny (GPU) jak i procesor wideo (VPU). Procesor graficzny (GPU) urządzenia obsługuje standardowe biblioteki graficzne, przyśpieszając wykonywanie operacji za pomocą czterech oddzielnych czterokomponentowych wektorów zmiennoprzecinkowych (vec4) z 16 jednostkami wykonawczymi i wysokowydajnym, dwuwymiarowym silnikiem typu bit-blit. Procesor wideo (VPU) obsługuje popularne formaty wideo, przyspieszając dekodowanie do 4Kp30 (progresywny, 30Hz) i kodowanie do 1080p30. Z kolei dedykowany blok kontrolera wyświetlacza w układzie może sterować graficznym sygnałem wyjściowym aż do trzech niezależnych wyświetlaczy.

Aby jeszcze bardziej zmaksymalizować wydajność, architektura i.MX 8X integruje również dodatkowe rdzenie procesora zaprojektowane tak, aby uwolnić główne platformy procesora od dodatkowego obciążenia obliczeniowego, które powstaje zwykle podczas wykonywania zadań związanych z zarządzaniem systemem i bezpieczeństwem. W celu zarządzania systemem jednostka sterująca systemu (SCU) architektury zawiera zestaw CM4, który odpowiada zestawowi użytkownika CM4, ale pozostaje całkowicie dedykowany dla operacji SCU i jest niedostępny dla deweloperów (ilustracja 3).

Schemat dedykowanego podsystemu Arm Cortex-M4 (CM4) zintegrowanego głęboko z procesorami i.MX 8X firmy NXPIlustracja 3: jednostka SCU zintegrowana głęboko w procesorach i.MX 8X firmy NXP jest niedostępna dla programistów i wykorzystuje dedykowany podsystem Arm Cortex-M4 (CM4) w celu odciążenia głównych procesorów urządzenia od zadań związanych z zarządzaniem systemem. (Źródło ilustracji: NXP Semiconductors)

Oprócz zarządzania zasilaniem, taktowaniem i innymi funkcjami wewnętrznymi, jednostka SCU steruje multipleksacją wtyków i siłą napędową kanału wejścia/wyjścia podczas normalnej pracy. Zestaw użytkownika CM4 i Arm Cortex-A35 AP nie mają bezpośredniego dostępu do funkcji sprzętowych niskiego poziomu. To jednostka SCU służy do ich zrównoważenia, więc oprogramowanie działające na zestawie użytkownika CM4 lub AP musi po prostu wywołać funkcje interfejsu programowania aplikacji (API) SCU, aby wykonać funkcje takie jak wyłączanie niepotrzebnych stref zasilania. Jeśli na przykład jeden procesor współużytkuje strefę zasilana z innym procesorem, jednostka SCU po prostu potwierdza żądanie wyłączenia, ale utrzymuje zasilanie strefy do czasu, aż drugi procesor również wyda żądanie wyłączenia.

W celu zarządzania rozległym wsparciem bezpieczeństwa w urządzeniu i.MX 8X, w podsystemie kontrolera bezpieczeństwa (SECO) urządzenia wykorzystano kolejny dedykowany procesor. W ramach podsystemu SECO, zintegrowany procesor Arm Cortex-M0+ o niskim poborze mocy wykorzystuje oprogramowanie układowe do obsługi sprzętowych funkcji zabezpieczeń, w tym dostęp do magistrali prywatnej dla bezpiecznych kluczy, pamięć podlegającą jednokrotnemu programowaniu (OTP), której celem jest bezpieczne przechowywanie kluczy oraz bezpieczną pamięć nieulotną (SNVS) do przechowywania dodatkowych danych prywatnych lub kluczy ulotnych (ilustracja 4).

Schemat podsystemu i.MX 8X kontrolera zabezpieczeń (SECO) firmy NXPIlustracja 4: dedykowany procesor Arm Cortex-M0+ o niskiej mocy zarządza operacjami zabezpieczeń, w ramach podsystemu i.MX 8X kontrolera zabezpieczeń (SECO) firmy NXP, wykorzystując magistralę klucza prywatnego i wiele modułów sprzętowych do bezpiecznego przechowywania danych, przyśpieszenia zadań kryptograficznych i uwierzytelniania dostępu do debugowania. (Źródło ilustracji: NXP Semiconductors)

Poza tymi podstawowymi mechanizmami zabezpieczeń, podsystem SECO koordynuje operacje zabezpieczeń w celu wykrycia ingerencji i bezpiecznego debugowania za pośrednictwem modułu ADM (Authenticated Debug Module). Zintegrowany sprzętowy moduł zabezpieczeń CAAM (Cryptographic Acceleration and Assurance Module) umożliwia bezpieczną pracę i obsługuje pełen zestaw algorytmów zabezpieczeń, w tym symetryczną i asymetryczną kryptografię, funkcje hash oraz generator liczb losowych (RNG).

W standardowym trybie pracy jednostki przetwarzające w urządzeniu, w tym jednostki SCU, AP i akcelerator protokołu DTCP (Digital Transmission Content Protection), wykorzystują połączenie bezpieczeństwa SECO, aby uzyskać dostęp do funkcji CAAM poprzez magistralę systemową. Poza funkcją bezpośredniego dostępu do pamięci (DMA) modułu CAAM, dedykowany procesor SECO Cortex-M0+ nie ma dostępu do magistrali systemowej. Zamiast tego używa chronionych połączeń wewnętrznych, aby uzyskać dostęp do urządzeń peryferyjnych, bezpiecznej pamięci o dostępie swobodnym (RAM) i pamięci tylko do odczytu (ROM) oraz specjalnej magistrali kluczy prywatnych.

Magistrala kluczy prywatnych odgrywa centralną rolę w obsłudze procesorów i.MX 8X do szyfrowania i odszyfrowywania w locie, ponieważ wykorzystuje funkcje akceleratora protokołu DTCP. W tym przypadku procesor zabezpieczeń wykorzystuje swoje zasoby do dostarczenia kluczy prywatnych potrzebnych modułowi IEE (Inline Encryption/Decryption Engine) urządzenia, ponieważ bezpiecznie odczytuje dane z zaszyfrowanej pamięci masowej lub zapisuje je, bez angażowania żądającego procesora, kontrolera DMA ani urządzenia wejścia-wyjścia.

Opierając się na technologii TrustZone firmy Arm zintegrowanej z procesorami Cortex-A35, podsystem SECO współpracuje z jednostką SCU również podczas bezpiecznego rozruchu. W tym procesie jednostka SCU interpretuje ustawienia rozruchowe, konfiguruje źródła rozruchowe i ładuje obrazy rozruchowe do pamięci wewnętrznej lub zewnętrznej. Z kolei podsystem SECO wykorzystuje swoje funkcje kryptograficzne do uwierzytelniania podpisanych obrazów oprogramowania układowego po ich załadowaniu, ale przed ich wykonaniem.

Zabezpieczenie krytycznych wyświetlaczy i funkcji kontrolnych

O ile zdolność do wydajnego i bezpiecznego przetwarzania różnych zadań jest ważna, o tyle w przypadku kluczowych zastosowań, takich jak te z sektora motoryzacyjnego i przemysłowego, zdolność do zabezpieczenia kluczowych funkcji jest równie istotna. Grupa urządzeń i.MX 8X firmy NXP łączy w sobie funkcje przetwarzania z funkcjami certyfikatów zabezpieczeń koniecznymi dla spełnienia krytycznych wymagań.

Funkcje wsparcia bezpieczeństwa w tej grupie procesorów wbudowano na wielu poziomach, począwszy od samej produkcji w procesie technologicznym całkowicie zubożonego krzemu na podłożu izolacyjnym (FD-SOI), który zwiększa niezawodność systemu. Ponieważ bezpieczeństwo systemu zależy od solidnych fundamentów zabezpieczeń, połączenie punktów dostępowych obsługujących TrustZone, podsystemu SECO oraz możliwości bezpiecznego uruchamiania systemu może stworzyć rodzaj zaufanego środowiska niezbędnego, by zapobiegać zagrożeniom bezpieczeństwa i ochrony.

Jednocześnie możliwość samodzielnego przeprowadzania zadań krytycznych pod względem czasowym przy użyciu złożonego zestawu użytkownika CM4 oraz odciążenie podsystemów SCU i SECO z zadań krytycznych dla działania systemu, sprawia że funkcje krytyczne dla działania aplikacji nadal są dostępne pomimo zmiennego obciążenia. Firma NXP rozszerza tę koncepcję na obsługę wyświetlaczy o znaczeniu krytycznym poprzez autorską technologię SafeAssure, która integruje sprzętową ścieżkę przełączania awaryjnego wyświetlaczy o standardzie bezpieczeństwa ASIL B w urządzeniach i.MX 8X. Dzięki technologii SafeAssure użytkownicy otrzymują automatycznie obraz awaryjny w przypadku wykrycia przez urządzenie błędu integralności danych lub błędu procesora graficznego. Obraz awaryjny działa w tle i sprawia, że kluczowe informacje są dostępne nawet podczas awarii głównego wyświetlacza.

Obsługa aplikacji bezpieczeństwa rozciąga się na dostęp do pamięci w systemach opartych na i.MX 8X. Wśród obsługiwanych przez urządzenia MX 8X interfejsów pamięci znajduje się 8-bitowe kodowanie korekcyjne (ECC) dla niskonapięciowej pamięci Double Data Rate 3 (DDR3L). DDR3L ECC obsługuje kodowanie korekcyjne (ECC) w pamięci podręcznej L2 (ponownie ilustracja 2) oraz poziom 3 nienaruszalności bezpieczeństwa (SIL 3). Architektura i.MX 8X rozszerza również obsługę kodowania korekcyjnego (ECC) na zewnętrzne urządzenia pamięci masowej flash. Zintegrowany enkoder Bose, Ray-Chaudhuri, Hocquenghem (BCH) i moduł dekodera zapewniają 62-bitowe kodowanie korekcyjne (ECC) zdolne do korekcji od 2 do 20 błędów jednobitowych w bloku danych odczytywanych z tych urządzeń pamięci masowej.

Tworzenie zastosowań opartych na i.MX 8X

Jak w przypadku każdego procesora w tej klasie, wdrożenie projektu opartego na i.MX 8X wymaga starannego uwzględnienia surowych wymagań dotyczących zasilania, w tym kluczowych sekwencji włączania zasilania. Zasilanie urządzeń i.MX 8X wymaga sekwencyjnego lub równoczesnego doprowadzenia zasilania do czterech różnych grup zasilania, począwszy od podsystemu SVNS, poprzez SCU, wejście-wyjście i interfejsy pamięci, a skończywszy na pozostałej części urządzenia. Deweloperzy mogą spełnić ten wymóg, po prostu używając urządzeń PF8x00 firmy NXP z układem scalonym zarządzania zasilaniem (PMIC), które zapewniają kompletny zestaw szyn napięciowych i sygnałów sterujących potrzebnych do obsługi procesorów i.MX 8X, a także pamięci zewnętrznej i typowych urządzeń peryferyjnych systemu (ilustracja 5).

Schemat układów PMIC w urządzeniach PF8x00 firmy NXP zapewniających pełny zestaw szyn napięciowychIlustracja 5: moduły PMIC w urządzeniach PF8x00 firmy NXP zapewniają pełny zestaw szyn napięciowych i sygnałów sterujących potrzebnych do zasilania procesorów i.MX 8X. (Źródło ilustracji: NXP Semiconductors)

Podczas implementacji własnych projektów opartych na technologii i.MX 8X deweloperzy mogą korzystać z układów scalonych zarządzania zasilaniem (PMIC) MC33PF8100CCES firmy NXP, które są zaprogramowane do użytku z procesorami 8QuadXPlus, takimi jak MIMX8QX6AVLFZAC. Inne warianty PF8x00, takie jak MC33PF8100A0ES i MC33PF8200A0ES obsługują procesory i.MX 8X, ale nie są wcześniej zaprogramowane.

W zastosowaniach związanych z bezpieczeństwem, urządzenia serii PF8200 takie jak MC33PF8200A0ES, integrują funkcje zaprojektowane do obsługi systemów ASIL B. Wraz z wieloma monitorami wewnętrznymi, w tym z monitorem napięcia wyjściowego z dedykowanym BGR (bandgap reference), układy PMIC w urządzeniach PF8200 zawierają wtyk wyjścia awaryjnego (FSOB), umożliwiający utrzymanie systemu w stanie bezpiecznym podczas włączania zasilania lub w przypadku awarii zasilania. Dodatkowo, wbudowany autotest analogowy (ABIST) sprawdza wszystkie monitory napięcia, podczas gdy procedura autotestu weryfikuje inne funkcje urządzenia.

Chociaż układ PMIC w urządzeniach PF8x00 może uprościć projektowanie sprzętu dla systemów opartych na i.MX 8X, niektórzy deweloperzy mogą być zmuszeni do natychmiastowego rozpoczęcia ewaluacji urządzeń i.MX 8X i szybkiego prototypowania zastosowań opartych na i.MX 8X. Wieloczujnikowy zestaw implementacyjny (MEK) MCIMX8QXP-CPU i.MX 8X firmy NXP stanowi gotową platformę programistyczną, która łączy w sobie procesor i.MX 8QuadXPlus firmy NXP, układ PMIC F8100 firmy NXP, RAM 3GB, wbudowaną pamięć kontrolera multimedialnego (eMMC) 32GB oraz pamięć flash 64MB. Oprócz interfejsów audio, kamery i wyświetlacza, płytka wieloczujnikowego zestawu implementacyjnego (MEK) zawiera komplet czujników typowych dla zastosowań motoryzacyjnych lub przemysłowych. W celu zapewnienia dodatkowych opcji łączności, audio i rozszerzeń, deweloperzy mogą również dodać opcjonalną płytę bazową MCIMX8-8X-BB firmy NXP.

Podsumowanie

Zadania przetwarzania danych są coraz intensywniejsze w coraz liczniejszych zastosowaniach, takich jak motoryzacja, przemysł, systemy kontroli w budynkach i interfejsy HMI i obejmują zarówno tradycyjne przetwarzanie danych wejścia-wyjścia w czasie rzeczywistym, jak i przetwarzanie na poziomie nowatorskich zastosowań wykorzystujących grafikę multimedialną. Chociaż istnieją możliwości projektowe dostosowane do każdego rodzaju zadań, niewiele dostępnych rozwiązań zaspokaja rosnące zapotrzebowanie na wysokowydajne, energooszczędne rozwiązania, które spełnią wymagania dotyczące projektów z certyfikacją bezpieczeństwa w zastosowaniach motoryzacyjnych i przemysłowych.

Jak wykazano, dzięki zastosowaniu grupy wielordzeniowych procesorów firmy NXP Semiconductors, deweloperzy mogą skuteczniej wdrażać projekty, które są w stanie spełnić te niezwykle zróżnicowane wymagania i z łatwością je skalować, aby sprostać coraz to nowym wymaganiom w zakresie wysokiej wydajności.

Disclaimer: The opinions, beliefs, and viewpoints expressed by the various authors and/or forum participants on this website do not necessarily reflect the opinions, beliefs, and viewpoints of Digi-Key Electronics or official policies of Digi-Key Electronics.

Informacje o autorze

Stephen Evanczuk

Stephen Evanczuk has more than 20 years of experience writing for and about the electronics industry on a wide range of topics including hardware, software, systems, and applications including the IoT. He received his Ph.D. in neuroscience on neuronal networks and worked in the aerospace industry on massively distributed secure systems and algorithm acceleration methods. Currently, when he's not writing articles on technology and engineering, he's working on applications of deep learning to recognition and recommendation systems.

Informacje o wydawcy

Północnoamerykańscy redaktorzy Digi-Key