¿Cómo se ejecutan las declaraciones con señales no inicializadas en el primer EVENTO?

0

En el modelado VHDL Dataflow , todas las declaraciones son concurrentes para cada evento.

Por ejemplo, el evento en el que B se activa por primera vez lleva a ejecuciones simultáneas de las declaraciones 1 , 3 y 6 . Pero en la declaración 6 no tenemos valor para ABAR .

Entonces, la ejecución continuará con un valor inicial (predeterminado) de ABAR ( predeterminado para el valor más a la izquierda ('izquierda) de su tipo declarado ), o qué?

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity DECODER2x4 is
port (A, B, ENABLE: in BIT;
     Z: out BIT_VECTOR(0 to 3));
end DECODER2x4; 

architecture dec_dataflgw of DECODER2x4 is
signal ABAR, BBAR: BIT;
begin
Z(3) <= not (A and B and ENABLE); --  statement 1
Z(0) <= not (ABAR and BBAR and ENABLE); --  statement 2
BBAR <= not B; --  statement 3
Z(2) <= not (A and BBAR and ENABLE); --  statement 4
ABAR <= not A; --  statement 5
Z(1 ) <= not (ABAR and B and ENABLE); --  statement 6
end dec_dataflgw; 

editar:
He actualizado el código, lo he comprobado, este funciona.

    
pregunta COMMON MAN

2 respuestas

0
  

Entonces, la ejecución continuará con un valor inicial (predeterminado) de ABAR   (predeterminado al valor más a la izquierda ('izquierda) de su tipo declarado), o qué?

Sí. Durante la elaboración, las señales que no se inicializan de otro modo reciben un valor predeterminado como usted describe. Al comienzo de la simulación, cada una de sus declaraciones concurrentes se ejecutará una vez, en un orden desconocido. El valor que ABAR tiene en cualquier delta en particular dependerá de este orden (puede que no sea not A ). Eventualmente, la red se estabilizará cuando se completen los ciclos delta en el tiempo 0. El mecanismo del ciclo delta le permite ignorar el hecho de que ABAR no se inicializa explícitamente. Tenga en cuenta que esto sucede antes , usted cambia explícitamente cualquier cosa (es decir, set B , o lo que sea).

    
respondido por el EML
0

Lo que tienes es lo mismo que

architecture dec_dataflgw of DECODER2x4 is
begin
   Z(3) <= not (A and B and ENABLE); --  statement 1
   Z(0) <= not (not A and not B and ENABLE); --  statement 2
   Z(2) <= not (A and not B and ENABLE); --  statement 4
   Z(1) <= not (not A and B and ENABLE); --  statement 6
end dec_dataflgw;

de cualquier manera, terminas con:

  

no tenemos valor para ABAR

Tienes un valor para ABAR . Es una señal que representa not A . Y observe que el orden de las líneas en su código no importa, ya que todas son concurrentes. Por lo tanto, not A se puede sustituir dondequiera que use ABAR .

Creo que estás confundiendo tus asignaciones concurrentes con asignaciones sincronizadas sincronizadas. Cuando realiza asignaciones en un borde de reloj, sus valores no se utilizan hasta el siguiente borde de reloj. Aquí no tienes reloj.

  

la ejecución irá con el valor inicial (predeterminado) de ABAR

Las señales sintetizadas pueden no tener valores predeterminados o iniciales. Puede hacer inicializaciones para simulaciones (por ejemplo, signal ABAR : BIT := '0' ), pero la inicialización puede ser ignorada por la herramienta de síntesis, dependiendo de la tecnología. En general, debe verificar su documentación para determinar los valores de inicio y si se admite la inicialización sin reinicios.

    
respondido por el Blair Fonville

Lea otras preguntas en las etiquetas