Red de conocimiento informático - Problemas con los teléfonos móviles - Asignación de bloqueo y asignación sin bloqueo en la Ayuda de Verilog.

Asignación de bloqueo y asignación sin bloqueo en la Ayuda de Verilog.

Diseño verilog avanzado

Hora: martes 6 de mayo de 2014

Principales ganancias:

1. Asignación de bloqueo;

2. Prueba de código;

3. Circuitos lógicos combinacionales y circuitos lógicos secuenciales.

Asignación de bloqueo y asignación sin bloqueo:

1. Asignación de bloqueo "=" (circuito lógico combinacional), asignación sin bloqueo "lt;=" (circuito lógico secuencial);

p>

2. 8 principios de programación del módulo Verilog:

(1) Al modelar circuitos secuenciales, utilice asignación sin bloqueo.

(2) Al modelar el circuito de bloqueo, utilice una asignación sin bloqueo.

(3) Cuando utilice el bloque siempre para construir un modelo lógico combinacional, utilice la asignación de bloqueo.

(4) Al construir circuitos lógicos secuenciales y combinacionales en el mismo bloque siempre, utilice asignación sin bloqueo.

(5) No utilice tanto la asignación sin bloqueo como la asignación con bloqueo en el mismo bloque siempre.

(6) No asignar un valor a la misma variable en más de un bloque siempre.

(7) Utilice la tarea del sistema $strobe para mostrar valores de variables mediante una asignación sin bloqueo.

(8) No utilice el retraso #0 al asignar valores.

Tener en cuenta estos ocho puntos al escribir puede resolver los 90-100 problemas de carrera riesgosos que ocurren en las simulaciones post-síntesis para la gran mayoría de los usuarios de Verilog.

3. El llamado concepto de bloqueo significa que en el mismo bloque siempre, la declaración de asignación posterior comienza conceptualmente la asignación después de que finaliza la declaración de asignación anterior.

4. El proceso de ejecución de una declaración sin bloqueo es: primero calcular los valores de todas las expresiones de la derecha (RHS) dentro del bloque de declaración y luego completar la operación de asignación al registro izquierdo. variable.

5. La diferencia en el código:

comenzar

B=A

C=B 1;

end

El código anterior primero asigna el valor de A a B, y el valor de C es A 1;

begin

Blt;=A ;

Clt;=B 1;

end

El resultado final del código anterior es: A se asigna a B, pero el valor de C es el valor original de B 1. Porque la expresión de la derecha se evalúa primero.

Circuitos lógicos combinacionales y circuitos lógicos secuenciales:

1. Los circuitos digitales se pueden dividir en dos categorías principales según las diferentes características de las funciones lógicas. Una categoría se denomina circuitos lógicos combinacionales (denominados. conocido como circuitos combinacionales), el otro tipo se llama circuito lógico secuencial (circuito secuencial para abreviar).

2. La función lógica característica de los circuitos lógicos combinacionales es que la salida en cualquier momento sólo depende de la entrada en ese momento y no tiene nada que ver con el estado original del circuito.

3. La función lógica característica de los circuitos lógicos secuenciales es que la salida en cualquier momento no sólo depende de la señal de entrada en ese momento, sino que también depende del estado original del circuito, o dicho de otra manera. , también está relacionado con la entrada anterior.

Código Verilog:

bloqueo de módulo(clk, a, b, c

salida [3: 0] b, c

<; p>entrada [3:0] a;

entrada clk;

reg [3:0] b, c

siempre@(posedge clk) comenzar

b = a;

c = b;

$display("Bloqueo: a = d, b= d, c = d.", a, b, c);

end

endmodule

Diagrama esquemático correspondiente:

modulenon_blocking(clk, a, b, c

salida [3: 0] b, c

entrada [3: 0] a

entrada clk; >reg [3:0] b, c;

siempre@(posedge clk) comenzar

b lt; = a

c lt; ;

$display("Sin bloqueo: a =d, b = d, c = d.", a, b, c);

fin

endmodule

Esquema correspondiente:

Código de prueba:

`timescale1ns/1ns

moduleblocking_test;

cable [ 3:0] b1, c1, b2, c2;

reg [3:0] a;

reg clk;

comienzo inicial

clk = 0;

para siempre #50 clk = ~clk;

fin

comienzo inicial

a = 4 ' h3;

$display("_________________________");

#100 a = 4'h7;

$display("_________________________");

p>

#100 a = 4'hf;

$display("_________________________");

#100 a = 4'ha;

$display("_________________________");

#100 a = 4'h2;

$display("_________________________");

# 100$display( "____________________");

$stop;

end

sin_bloqueo u1(clk, a, b2, c2);

bloqueando u2(clk, a, b1, c1);

endmodule