¿Qué habilidades buscaría una empresa de EDA al contratar candidatos para sus puestos de ingeniero de I + D?

Consulte Elección de un programa de posgrado en Diseño VLSI y áreas relacionadas: Cosas a considerar por Pasquale Ferrara en Ingeniería Eléctrica + Ciencias de la Computación (EECS). En esta publicación, he dado una respuesta detallada a esta pregunta.

El conjunto exacto de habilidades que necesita está relacionado con el equipo de producto con el que estaría entrevistando. Por ejemplo, las habilidades para un puesto de ingeniero de software con un equipo de producto para síntesis lógica y verificación de equivalencia son similares. Por otro lado, sería muy diferente para puestos con equipos de productos para simulación de circuitos y diseño físico.

Algunas habilidades esperadas / deseadas establecidas para EDA:

  1. Diseño VLSI y / o diseño AMS / RF IC (consulte los conjuntos de habilidades antes mencionados para el diseño VLSI y el diseño AMS / RF IC)
    1. Fuertes habilidades de desarrollo de software C ++, no solo en la programación C ++ sino también en las siguientes habilidades; tenga en cuenta que algunas empresas o equipos de desarrollo de EDA pueden requerir habilidades de programación en Java o C #
    2. Gestión de configuración o control de revisión
    3. Construir automatización
    4. Pruebas de software, incluidas pruebas de regresión automatizadas.
    5. Modelado del sistema (con UML, un modelo de cálculo o un modelo matemático)
    6. Refactorización
    7. Depuración, incluida la depuración de memoria
    8. Gestión de memoria dinámica, en ausencia de recolección de basura automatizada
    9. Aislamiento de fallas y diseño tolerante a fallas de arquitectura de software y algoritmos
    10. Diseño arquitectónico de software (diseño jerárquico y modular)
    11. Diseño y análisis de algoritmos (incluida la complejidad computacional y la complejidad del circuito con aplicaciones a circuitos lógicos)
    12. Generación automática de documentos (a través de generadores de documentación para C ++, SystemC, Verilog / VHDL, MATLAB y Perl / Tcl / Python)
    13. Experiencia trabajando con sistemas operativos tipo UNIX, como GNU / Linux y Oracle Solaris (anteriormente Sun Solaris o Open Solaris)
    14. Conocimiento del proceso de desarrollo de software o ciclo de vida de desarrollo de software (SDLC)
    15. Metodologías de desarrollo de software (especialmente metodologías ágiles y otras metodologías de desarrollo iterativas e incrementales)
    16. Patrones de diseño para arquitectura de software, y quizás diseño arquitectónico VLSI
    17. Programación paralela, incluida la programación concurrente.
    1. Desarrollo de solucionadores y / o implementación de métodos numéricos y algoritmos de gráficos.
    2. Solucionadores SAT y SMT: procedimientos de decisión o razonamiento automatizado
      1. Damas modelo
      2. Métodos formales, incluido el conocimiento de la especificación de propiedad y las lógicas temporales (como CTL y LTL)
    3. Algoritmos de gráficos
    4. Programación de restricciones
    5. Modelo de reducción de pedidos
    6. Solucionadores de EDO
    7. Solucionadores de PDE
    8. Solucionadores de ecuaciones integrales
      1. Temas especiales, como los siguientes:
      2. Dominio de tiempo de diferencia finita (FDTD)
      3. Métodos de volumen finito
      4. Métodos de elementos finitos (FEM)
      5. Método del elemento límite (BEM)
      6. Métodos multigrid (MG)
    1. Experiencia en el desarrollo de herramientas EDA:
      1. Herramientas de nivel de sistema electrónico (ESL):
      2. Síntesis de alto nivel
      3. Comprobación de equivalencia de ESL a RTL
      4. Particionamiento de hardware / software
      5. Emulación acelerada por hardware
      1. Herramientas frontales
      2. Síntesis lógica (o más bien, síntesis RTL)
      3. Análisis de tiempo estático
      4. Análisis estadístico de tiempo estático
      5. Comprobación de modelo
      6. Comprobación de equivalencia
      7. Optimización de energía
      8. Simulación lógica y simulación RTL
      9. Simulación de fallas
      10. Generación automática de patrones de prueba
      11. Herramientas EDA relevantes para Diseño para Testability (DFT) y Self-test incorporado (BIST)
      12. Compiladores de memoria
      1. Herramientas de back-end (diseño físico y verificación física) + Diseño para Manufacturabilidad + Tecnología CAD (TCAD):
      2. Síntesis física: tamaño de la puerta, asignación de voltaje umbral, tamaño del cable e inserción del buffer
      3. Análisis de diafonía
      4. Análisis de integridad de señal
      5. Análisis de ruido
      6. Análisis térmico
      7. Plano de planta
      8. Particionamiento (nivel lógico)
      9. Colocación: colocación global y detallada
      10. Enrutamiento, incluido el enrutamiento global y detallado, y el enrutamiento FPGA
      11. Síntesis de la red de reloj
      12. Potencia y enrutamiento a tierra
      13. Compactación de diseño
      14. Extracción de diseño
      15. Extracción parasitaria
      16. Modelado de interconexión
      17. Verificación de reglas de diseño (DRC)
      18. Verificación de diseño versus esquema (LVS)
      19. Verificación de reglas eléctricas (ERC)
      20. Verificación de antena (para efecto de antena)
      21. Litografía computacional y sus herramientas de firma.
      22. Corrección óptica de proximidad (OPC)
      23. Tecnologías de mejora de resolución (RET)
      24. Preparación de datos de máscara (MDP)
    2. Simulación de circuito
  2. Conocimiento de los estándares de la industria (p. Ej., HDL, HVL, STIL y lenguajes y formatos de archivos de datos para compartir información entre herramientas EDA y los fabricantes de semiconductores) y herramientas / bibliotecas para manipular archivos para formatos comunes en EDA (p. Ej., OpenAccess de Si2)
  3. Desarrollo de GUI. Esta es una prioridad baja, ya que desea desarrollar el back-end de las herramientas EDA (por ejemplo, algoritmos para verificación de equivalencia o enrutamiento), en lugar del front-end de las herramientas EDA (es decir, GUI)

Por un amplio margen, concéntrese en C ++. Los scripts de shell, Perl y Make también son comunes. Para los editores, emacs y vim son los más comunes. TCL aparece en algunos lugares. Flex / Bison para el análisis. Purificar para fugas de memoria. Oracle Grid Engine y LSF para trabajos por lotes.

Sin embargo, los entrevistadores tienden a buscar habilidades de resolución de problemas por encima de todo. Se espera una competencia mínima con C ++. Más allá de eso, como siempre, depende de con quién más compites. La experiencia previa de EDA es una gran ventaja.

Lo mantendré breve.

C ++
C
herramientas de depuración (por ejemplo, gdb)
Verilog (Básico)
Conceptos de STA
conceptos básicos de electrónica digital (chanclas y puertas)
perl (lo básico solo creo. Depende de un equipo a otro y de un perfil a otro)
comandos de Linux (grep, etc.)
Conceptos básicos de especias

Lo que mencioné anteriormente, lo uso a diario.

EDA tiene muchas áreas y cada área puede tener diferentes requisitos. En términos de habilidades de software: C / C ++ es imprescindible junto con un buen conocimiento de algoritmos y estructuras de datos. El conocimiento de los lenguajes de secuencias de comandos (perl / tcl, etc.) no es imprescindible para los puestos de I + D, pero su conocimiento lo ayudaría a convertirse en un buen I + D. Del mismo modo, gdb / grep / make, etc. son herramientas que lo convertirían en un mejor ingeniero de I + D, pero es poco probable que lo entrevisten por esas habilidades. La mayoría de ellos se pueden recoger con bastante rapidez.

Las necesidades de conocimiento del dominio dependerán del producto. Por ejemplo, si está trabajando en una herramienta STA, el conocimiento del solucionador SAT no es un requisito, pero debe conocer los conceptos de STA.

C para programación de bajo nivel e incrustada, y C ++ para algoritmos y aplicaciones.