Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Verilog

Dominar sentencias de bloque en Verilog: Ejecución secuencial y paralela

Hay formas de agrupar sentencias que son sintácticamente equivalentes a una sola sentencia, llamadas sentencias de bloque. Dos tipos: secuencial y paralelo.

Secuencial

Sentencias envueltas con begin y end se ejecutan secuencialmente en orden dado, una tras otra. Valores de delay se tratan relativos al tiempo de ejecución de la sentencia anterior. Tras ejecutar todas, el control pasa elsewhere.

Dominar sentencias de bloque en Verilog: Ejecución secuencial y paralela

module design0;
bit [31:0] data;
initial begin
    // Tras 10 unidades, data = 0xfe
    #10 data = 8'hfe;
    $display ("[Time=%0t] data=0x%0h", $time, data);
    // Tras 20 unidades más, data = 0x11
    #20 data = 8'h11;
    $display ("[Time=%0t] data=0x%0h", $time, data);
end
endmodule

Primera sentencia en begin-end ejecuta en 10 unidades, segunda en 30 (20 tras anterior).

Salida:

ncsim> run
[Time=10] data=0xfe
[Time=30] data=0x11
ncsim: *W,RNQUIE: Simulation is complete.

Paralelo

Un bloque paralelo ejecuta sentencias concurrentemente y control de delay ordena asignaciones en tiempo. Sentencias se lanzan en paralelo envolviéndolas en fork y join.

initial begin
    #10 data = 8'hfe;
    fork
        #20 data = 8'h11;
        #10 data = 8'h00;
    join
end

Dominar sentencias de bloque en Verilog: Ejecución secuencial y paralela

El fork-join se lanza tras ejecutar sentencia en 10 unidades. Sentencias dentro ejecutan en paralelo y la primera en lanzarse será la de delay 10 (data=8'h00). Tras 10 más, la primera se lanza (data=8'h11).

initial begin
    #10 data = 8'hfe;
    fork
        #10 data = 8'h11;
        begin
            #20 data = 8'h00;
            #30 data = 8'haa;
        end
    join
end

Dominar sentencias de bloque en Verilog: Ejecución secuencial y paralela

Hay un begin-end dentro; sus sentencias ejecutan secuencialmente, pero el bloque entero se lanza en paralelo con las otras. Así: data=8'h11 en 20, 8'h00 en 30, 8'haa en 60.

Nombrado de bloques

Bloques secuenciales y paralelos pueden nombrarse añadiendo : nombre_bloque tras begin y fork. Así pueden referenciarse en sentencia disable.

begin : nombre_secuencial
[sentencias]
end

fork : nombre_paralelo
[sentencias]
join

Verilog

  1. Maximice la eficiencia de su flota: Estrategias expertas para usar datos de telemática
  2. Eleve su S&OP, datos y sistemas de planificación para el éxito futuro
  3. Acelerando la generación de insights mediante preparación automatizada de datos
  4. Dominar Verilog: Tutorial completo para diseño de circuitos digitales
  5. Dominar la concatenación en Verilog: Guía práctica
  6. Verilog Esencial: Resumen conciso
  7. Comprender las asignaciones en Verilog: tipos, sintaxis y mejores prácticas
  8. Bloqueante vs. No bloqueante en Verilog: Diferencias clave explicadas
  9. Dominar el flujo de control en Verilog: IF-ELSE, Case y más
  10. Dominar las funciones en Verilog para diseño RTL eficiente
  11. Comprender la semántica de programación en Verilog: Temporización, eventos y orden de ejecución