el valor variable del tipo de registro no se está actualizando

-1

Declaración del problema

Considere un estacionamiento con una sola puerta de entrada y salida. Se utilizan dos pares de sensores fotográficos (a, b) para controlar la actividad de los automóviles. Cuando un objeto se encuentra entre el transmisor de fotos y el receptor de fotos, la luz se bloquea y la salida correspondiente se afirma en 1. Al monitorear los eventos de dos sensores, podemos determinar si un automóvil está entrando o saliendo o si un peatón está pasando . Por ejemplo, la siguiente secuencia indica que un automóvil ingresa al lote:

  

Inicialmente, ambos sensores están desbloqueados (es decir, las señales a y b son "00").
  El sensor a está bloqueado (es decir, las señales ayb son "10").
  Ambos sensores están bloqueados (es decir, las señales a y b son "1 1").
  El sensor a está desbloqueado (es decir, las señales a y b son "01").
  Ambos sensores se desbloquean (es decir, las señales a y b son "00").

Diseñe un contador de ocupación de estacionamiento de la siguiente manera:

  1. Diseñe un FSM con dos señales de entrada, ayb, y dos señales de salida, enter y exit . Las señales enter y exit afirman un ciclo de reloj cuando un automóvil ingresa y un ciclo de reloj cuando un automóvil sale del lote, respectivamente.
  2. Derive el código HDL para el FSM.

Se utiliza el siguiente código:

'timescale 1ns / 1ps

module assignment1(a,b,clk,reset,en,ex);
input a,b,clk,reset;
output en,ex;
reg en,ex;
reg [1:0] state,next_state;
parameter unBlocked=2'b00,aBlocked=2'b10,bothBlocked=2'b11,bBlocked=2'b01;
// State register block
//if(reset)
//state<=unBlocked;
//else
always@(posedge clk) begin
state<=next_state;
end
//
always @(state or a or b) begin

case (state)

unBlocked:  if((a==1'b1) && (b==1'b0))

begin  next_state=aBlocked; en=0; end

else next_state=unBlocked;

aBlocked:if((a==1'b1) && (b==1'b1))

 begin next_state=bothBlocked; en=0; end

else next_state=unBlocked;

bothBlocked: if((a==1'b0) && (b==1'b1))

begin next_state=bBlocked; en=0; end

else next_state=unBlocked;

bBlocked: if((a==1'b0) && (b==1'b0))

  begin next_state=unBlocked; en=1; end  

  else next_state=unBlocked;

  endcase
  end
endmodule

Estoy tratando de crear una máquina de amarre cuando entra el auto. En la variable next_state solo obtengo 00, es decir, estado no bloqueado ... Es decir, los estados no se actualizan de acuerdo con las entradas. Aquí las entradas son a, b ... el coche ingresa al estacionamiento solo cuando (a, b) toma los valores 00, 10,11,01,00.puedes ayudarme en esto?

    
pregunta bibo

1 respuesta

1

Parece que el reinicio no se está utilizando. Esto significa que su estado no se está inicializando, lo que significa que es un valor 'x' o desconocido al comienzo de la simulación. Esto luego hace que la declaración del caso no coincida con nada y esto no conduce a ninguna respuesta a las entradas.

En general, debe estar atento a los aspectos básicos, como restablecer siempre los registros y también comprobar si hay x en la simulación después de que se libere el reinicio. Le ahorrará un montón de tiempo en el camino

    
respondido por el John McGrath

Lea otras preguntas en las etiquetas