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:
- Diseñe un FSM con dos señales de entrada, ayb, y dos señales de salida,
enter
yexit
. Las señalesenter
yexit
afirman un ciclo de reloj cuando un automóvil ingresa y un ciclo de reloj cuando un automóvil sale del lote, respectivamente. - 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?