Cómo aprender a programar sistemas integrados y VLSI por mi cuenta

Primero, déjenme responder sobre la programación de sistemas embebidos.

Los dos lenguajes de programación más comunes para programar sistemas embebidos son C y Assembly. Aunque C ++, Java, Python, JavaScript, Lua y Rust también se usan en algunos sistemas integrados, no estoy seguro de qué tan ampliamente se aceptan los lenguajes posteriores como estándar de la industria.

Los sistemas integrados se pueden programar como bare-metal (sin sistema operativo) o con la presencia de un sistema operativo (versiones integradas de Linux o RTOS como VxWorks, FreeRTOS, QNX., Etc. o Windows CE o Windows IoT core).

Si es de metal desnudo, entonces el objetivo (sistema integrado) necesita una PC con las herramientas adecuadas (IDE + programador Flash). Por ejemplo: Arduino Uno se programa con Arduino IDE y se compila para la arquitectura ATMEL AVR y el código se descarga con UART. Este tipo de sistemas son sistemas de compilación cruzada. La mayoría de los IDE se eligen del mismo fabricante, a saber, Code Composer Studio, Energyly de Texas Instruments; Keil de ARM, diseñador y creador de PSoC de Cypress., Etc. También tiene herramientas de desarrollo de Lauterbach y IAR Embedded Workbench.

Si es con la presencia de un sistema operativo como Raspbian en Raspberry Pi, debe actualizar el almacenamiento no volátil (en este caso, la tarjeta SD) con el sistema operativo. Y luego puede programar el sistema en el lenguaje de programación deseado. Por ejemplo: la mayoría de los teléfonos Android siguen este tipo de estrategia. El archivo de imagen de Android se busca desde la tarjeta SD para actualizar la memoria interna con el último sistema operativo (supongo que es un procedimiento similar para la actualización de OTA). También puede usar otras bibliotecas como Opencv, fastcv, v4l2, alsa, pilas de protocolos de comunicación, bibliotecas gráficas, QT / GTK + para aplicaciones GUI, openwrt, grub, u-boot. También puede construir su propio Linux para sus necesidades usando bitbake, yocto, openembedded., Etc. Algunos de ellos también usan núcleos BSD debido a la seguridad que proporciona sobre Linux.

En el caso de RTOS, el procedimiento es un poco diferente de los dos métodos anteriores. Cada RTOS puede tener un procedimiento diferente. En el caso de Keil RTX RTOS, uno tiene que incluir los archivos de encabezado de esa arquitectura de procesador de destino, usar las llamadas de función necesarias para la aplicación, luego todo el conjunto de archivos se compila y se descarga al sistema de destino. He visto un procedimiento similar para FreeRTOS + Eclipse IDE, VxWorks + Windriver workbench. Cada uno de los RTOS tiene diferentes llamadas al sistema. QNX era fácil de usar debido a los hilos POSIX que se encuentran comúnmente en los sistemas Linux.

También se siguen los estándares de codificación AUTOSAR y MISRA C.

Y llegando a la segunda parte, lo mencionaste como VLSI. VLSI tiene una amplia jerarquía. Tiene varias categorías como diseño digital, diseño analógico, diseño de señal mixta, diseño RF, diseño RTL, verificación OVM / UVM.

Que yo sepa, los diseñadores de VLSI usan lenguajes HDL como VHDL, Verilog y SystemC.

Para la verificación SoC / IP, SystemVerilog y C / C ++ se usan comúnmente.

También se utilizan secuencias de comandos TCL, Perl y Python.

Vivado, Xilinx ISE son las herramientas más utilizadas para programar FPGA.

También se utilizan herramientas EDA de Cadence, Synopsys y Mentor Graphics.

La industria de semiconductores ha visto un muy buen desarrollo en los últimos años. Se han producido muchas mejoras en las arquitecturas informáticas.

Hay arquitecturas heterogéneas como las que se ven en la placa Zed / Zynq que es una arquitectura APSoC (All SoPromable SoC: ARM9 Dual core + FPGA) de Xilinx. PSoC5 viene con ARM Cortex M3 con bloques analógicos y digitales programables.

Los DSP han sido tradicionalmente un procesador separado. Con las instrucciones ARM Cortex M4 + FPU + DSP, ahora todo es nuevo.

Las GPU se programan con OpenGL, CUDA, OpenCL, Vulkan, DirectX. Elegir entre estos es una discusión separada.

Qualcomm proporciona SDK para programar su SoC con características como Adreno GPU, Spectra ISP, Hexagon DSP., Etc.

La elección de una arquitectura está abierta ahora. X86, AMD64, ARM, MIPS, SHARC, núcleo patentado de señal mixta de TI utilizado en MSP., Etc.

Primero seleccione el sistema integrado o VLSI para comenzar. Ambos son mundos diferentes y requieren un pensamiento diferente. El sistema integrado está en el nivel de la aplicación. VLSI es básicamente para realizar en el nivel de semiconductores.

Sistema integrado, hoy en día tiene muchas opciones para obtener placas de evaluación y su conjunto de herramientas. Ejemplos … Raspberry PI, Arduino, Beagle, etc. Comience a desarrollar protocolos de interfaz simples con E / S físicas.

Para VLSI, comience a aprender Verilog o VHDL … intente desarrollar realizaciones de varias lógicas utilizando un modelo estructural preferiblemente que algo de comportamiento para comprender mejor el nivel del dispositivo.

Así que seleccione en consecuencia …

No tengo idea sobre VLSI, pero para incrustar primero aprendes lenguaje C y luego, una vez que eres perfecto en C, obtienes algunas ideas sobre el microcontrolador y aprendes C. E intenta crear algunos proyectos en los que aprenderás cómo interactuar con diferentes dispositivos con microcontrolador, después de eso, puede optar por el controlador ARM, que hoy en día es ampliamente utilizado en las industrias. De la misma manera puedes aprender frambuesa pi también.

Espero eso ayude…..