¿Cuáles son algunas diferencias y similitudes entre el diseño de software y el diseño de circuitos integrados?

Similitudes:
1) Construir automatización. Necesita esto para administrar diferentes versiones de sus diseños de IC y compilaciones de software. Git, Mercurial, Subversion y CVS pueden usarse para esto. Son gratis.

2) Prueba de automatización. Las pruebas de regresión automatizadas para software y la verificación de regresión automatizada para circuitos integrados ayudan a asegurar que las últimas adiciones / modificaciones al diseño no causen fallas en los módulos / subcircuitos implementados previamente. También existen depuradores automáticos para software y circuitos integrados digitales.

3) Sistema o diseño de alto nivel. UML se puede usar para ambos. Puede utilizar modelos de computación para circuitos integrados de diseño o software en el nivel de abstracción del sistema o para diseño arquitectónico (arquitectura digital VLSI, arquitectura de sistema RF y arquitectura de software). Los lenguajes de diseño a nivel de sistema (como SystemC y SystemC-AMS) se pueden usar para especificar software y / o circuitos integrados a nivel de sistema, y ​​para facilitar la exploración espacial de diseño. Existen herramientas para la refactorización de software y la refactorización digital VLSI.

4) Métodos formales y verificación. Del mismo modo que puede usar el diseño por contrato o la programación por contrato para el desarrollo de software, puede usar aserciones para especificar los requisitos para el IC. También existen métodos formales y técnicas de verificación para circuitos analógicos y de señal mixta. No están muy bien desarrollados, pero existen.

5) Control de procesos. Las técnicas y metodologías basadas en Six Sigma y el diseño para experimentos se pueden utilizar para mejorar el proceso.

6) Desarrollo iterativo e incremental (IDD). Muchos proyectos de software utilizan procesos de desarrollo de software que admiten IDD, ya que los requisitos del proyecto de software pueden cambiar rápidamente sobre el costo del proyecto. Dado que el diseño de IC se está volviendo más similar al software, vea el punto mencionado anteriormente en SystemC y SystemC-AMS, desea repetir el ciclo de diseño varias veces hasta que cumpla con sus objetivos y restricciones de diseño (pase la prueba beta para el software o llegue al cierre de diseño para ICs) )

7) Aislamiento de fallas y diseño tolerante a fallas. Los mismos conceptos se utilizan para el diseño de software y el diseño de circuitos integrados.

8) El diseño arquitectónico (diseño jerárquico y modular) para el software y los circuitos integrados (especialmente los sistemas VLSI) son iguales o similares

9) Diseño y análisis de algoritmos (incluida la complejidad computacional y la complejidad del circuito con aplicaciones a circuitos lógicos). La implementación VLSI de algoritmos de clasificación, visión por computadora y procesamiento de video / imagen / señal requiere el diseño de algoritmos en TLM (modelo de nivel de transacción) y RTL (nivel de transferencia de registro). La complejidad del circuito de los sistemas digitales VLSI debe reducirse.

10) Generación automática de documentos (a través de generadores de documentación para C ++, SystemC, Verilog / VHDL, MATLAB y Perl / Tcl / Python)

Diferencias
1) Prueba. La forma en que prueba el software y los CI son diferentes. Puede probar el software en una computadora, pero necesita un costoso equipo de prueba automatizado para circuitos integrados.

2) Verificación. La verificación de IC implica simulación y verificación formal, mientras que la verificación de software generalmente solo se refiere a la verificación formal de software (algunas personas pueden incluir la creación de perfiles de software y el análisis de temporización de software, como en el análisis WCET).

3) La implementación del software implica la programación en un único nivel de abstracción … O bien un conjunto de lenguajes de alto nivel, como C ++ y Python, o lenguaje ensamblador. Compila / ensambla eso para producir un binario de trabajo (archivo ejecutable) … Puede mezclar lenguajes / paradigmas de programación, pero generalmente no desea moverse entre niveles de abstracción (desde un lenguaje de modelado como UML a código de alto nivel y luego al código de ensamblaje y finalmente al código binario / máquina).

El diseño de IC implica trabajar en diferentes niveles de abstracción. Para circuitos analógicos y señales mixtas, debe implementar el diseño arquitectónico con circuitos de nivel de transistor, antes de poder pasar al diseño físico (producir el diseño). Posteriormente, debe producir las máscaras para el diseño para que el diseño pueda fabricarse.

Para el diseño de circuitos integrados digitales, debe implementar los circuitos en el nivel de comportamiento, seguido del nivel lógico. Posteriormente, debe implementar el circuito en el nivel físico (es decir, el diseño) y luego producir las máscaras.

Por lo tanto, el diseño de IC es mucho más complicado en términos de la cantidad de pasos necesarios que el desarrollo de software.

4) Los circuitos integrados digitales (y los circuitos de señales analógicas y mixtas) son sistemas reactivos. El software no necesita ser reactivo. Por lo tanto, los modelos de computación utilizados en sus respectivos procesos de diseño no necesitan ser los mismos.

Todo lo que Yuqing Yang ha dicho es cierto, pero hay dos diferencias cruciales más.

1 Debido a que hacer un chip es tan escandalosamente costoso ($ 5 mínimo para máscara, cinta adhesiva, lotes de ingeniería, etc.), debe estar realmente, realmente , REALMENTE seguro de que el diseño es correcto. ¡’Lanzar temprano, lanzar a menudo’ no es una metodología viable para el diseño de chips! Si bien el control de calidad y la prueba del software son importantes, es insignificante en comparación con los recursos y el énfasis en la simulación, la verificación del diseño y la cobertura de la prueba aplicada a un chip, simplemente porque no puede emitir un parche.

2 Estás haciendo una cosa física, que tendrá un costo. En el software normal, si el código es de 1 millón de líneas o de 2 millones de líneas, no afectará el costo tan directamente como en un chip, donde cada línea significa más transistores y más dados y más costos. También le preocupa la prueba física, hacer DFM (diseño para fabricación) y DFT (diseño para prueba) son críticos.

Pero en un sentido muy definido, el diseño de chips y el diseño sw se ven iguales: personas que miran las pantallas con líneas de texto sangradas.

En términos generales, hay 2 campos principales de diseño asic: diseño asic analógico / RF y diseño ic digital.
Creo que su pregunta es sobre el diseño digital ic, porque el diseño analógico / rf tiene poco que ver con el diseño de software.
Cuando se trata de diseño ic digital, quizás algo con lo que tengas idea es que el trabajo se realiza mediante la codificación en lenguaje de descripción de hardware (HDL).
La codificación en HDL es diferente con la codificación en lenguaje de software como C o Java. La diferencia radica en que
1. las declaraciones en HDL pueden ejecutarse simultáneamente, mientras que las declaraciones en C se ejecutan secuencialmente.
2. Debe garantizar que su codificación sea sintetizable. La síntesis es el proceso para traducir HDL a un circuito real compuesto por celdas estándar como las compuertas AND.
3. Los criterios para evaluar sus códigos son diferentes de los utilizados en proyectos de software. El número de líneas no se usa. La potencia, el costo de área y la velocidad de su ic se utilizan para evaluar su trabajo. Ser claro y fácil de leer y modificar también es muy importante.