¿Por qué se desarrolló Verilog? ¿Puede C / C ++ hacer lo que hace Verilog?

C / C ++ o, para el caso, los lenguajes de programación de software no tienen noción del tiempo.

Verilog o cualquier lenguaje de diseño / descripción de hardware (HDL) tendrá una noción del tiempo. Cualquier HDL que se utilice para describir un circuito digital utilizando bloques digitales principales (como flip flops, registros de desplazamiento, memoria, multiplexores, sumador / sustractor / multiplicador digital, etc.) tendrá una noción de tiempo. Cuando digo hora, quiero decir que puede modelar un diseño que utiliza un reloj (sistemas síncronos). Por supuesto, dichos lenguajes también pueden describir sistemas asincrónicos.

Cualquier HDL como Verilog describe un hardware que implementa un algoritmo con mucho más detalle. Puede ver el control y el flujo de datos.

Los lenguajes de software como C / C ++, por otro lado, son lenguajes de nivel superior. Su función principal es describir un algoritmo y no su implementación en hardware usando bloques digitales. Dicho esto, permítanme agregar también que C / C ++ y otros lenguajes se están utilizando en la síntesis de alto nivel (HLS) (síntesis de alto nivel – Wikipedia), que es una metodología de diseño que toma la descripción de un algoritmo como entrada y luego intenta escupir un diseño de hardware que haría el mismo trabajo.

El lenguaje C fue introducido por primera vez en 1978 por Brian Kernighan y Dennis Ritchie, mientras que Verilog se introdujo por primera vez en 1984 para modelar sistemas digitales. Ambos lenguajes han seguido sus propios caminos de desarrollo que surgen de las necesidades de facilidad de programar microprocesadores / microcontroladores (desde el ensamblaje en adelante) y diseñar sistemas digitales (diseño manual y diseño basado en esquemas en adelante) respectivamente. Aunque la idea de diseñar hardware usando C / C ++ también se originó como “síntesis de comportamiento (igual que HLS)” a principios de la década de 1990 (Synopsys introdujo Behavioral Compiler en 1994), es solo en los últimos 10 años que esta idea ha ganado Más tracción. La razón es que la complejidad del diseño de hardware digital está aumentando, mientras que la productividad del diseñador no aumenta tan rápido. HLS se está impulsando como una metodología que puede ayudar en la realización rápida de partes de un diseño.

Espero que esto te de alguna perspectiva.

Para modelar la lógica secuencial en términos de eventos de reloj (como en si a significa b, verdadero si a & b ocurren en el mismo ciclo de reloj) y, por lo tanto, la evaluación puede ser continua o basada en la lista de sensibilidad [1] y el bloqueo de procedimiento siempre se activa en cada borde del reloj o de acuerdo con la lista de sensibilidad [2] (estos son los términos en los que escribe instrucciones de nivel superior y, por lo tanto), una secuencia de pasos (instrucciones) que se ejecutarán uno después (como en otros idiomas) puede no funcionar mejor en todos casos .

Por lo tanto, uno está mejor cuando:

El retraso del ciclo N es solo ## n

La lógica síncrona se puede modelar, solo con bloques siempre.

uno tiene implicación con 1 ciclo de retraso (| =>) en lugar de if las declaraciones condicionales.

De nada ! ~ Verilog.

[1] Una señal declarada como cable se evalúa continuamente. Una señal declarada como un registro se evalúa en función de la lista de sensibilidad.

Respuesta del usuario de Quora a En circuitos combinados verilog, a veces la salida es reg en lugar de cable. ¿Infiere esto un registro en el nivel esquemático?

[2] La respuesta de Manjunath Kudari a ¿Podemos usar bucles en circuitos secuenciales en verilog?

Consulte también la respuesta de Greg London a ¿Por qué no se asigna un valor de entrada a un registro que funciona en un bloque de procedimiento en Verilog?

Verilog es un HDL (lenguaje descriptivo de hardware). C es básicamente un lenguaje de software de computadora.

Las HDL son específicamente para ingenieros que desarrollan diseño (analógico / digital) en plataformas VLSI como ASIC / FPGA. Tienen tipos de datos llamados reg, buffer, puertas lógicas y muchas construcciones que C / C ++ no tienen. Y sí, las declaraciones C / C ++ se ejecutan secuencialmente, mientras que en HDL necesitamos modelar declaraciones secuenciales y concurrentes.

En estos días, utilizamos lenguajes como System Verilog (utilizado tanto para diseño como para verificación) , System C que explota la propiedad orientada a objetos de C ++ y al mismo tiempo hace lo que pueden hacer HDL como Verilog.

Entonces, simplemente C / C ++ no puede hacer lo que hace Verilog.

Por la misma razón por la cual se desarrolla cualquier lenguaje de programación. Las necesidades y requisitos de cada problema (dominio) son diferentes. No existe un lenguaje universal como tal, aunque todos están completos.

Es más fácil escribir diseños en verilog que en C. También es más fácil razonar sobre la lógica (flujo de señal, fuente de alimentación) en verilog.

Hasta donde sé, no puede usar C para desarrollar el diseño de hardware, porque usar C no puede simular la ejecución paralela de diferentes señales o cables.
Como C es un código de procedimiento.

Este ejemplo puede no ser cierto

pero imagina seguir el código verilog a escrito en c
// bloque1
Alwyas @ (posedge clk) comienza

q <= d;
fin
// bloque2
siempre @ (posedge clk) comienza
q1 <= q;
fin

Ahora en verilog, tanto block1 como block2 se ejecutan simultáneamente. Creo que esto no se puede hacer en C