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.
- Cómo simplificar un proceso de gestión de cambios complejo y frustrante al entregar software a producción
- ¿Cuál es la diferencia entre Apache v2.0 y la licencia MIT? ¿Cuáles son las principales consecuencias de usar el software Apache sobre MIT?
- Estoy comenzando un podcast con un título tentativo de 'Software and Society'. ¿Cuál es un nombre que suena menos soso?
- ¿Cómo es la transición de Stanford a la ingeniería de software en South Bay?
- ¿Cuál es la mejor herramienta para los requisitos de software basados en persona?
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.