El segmento FSM 4x7 muestra Verilog

Tengo problemas para moverme por Verilog. Estoy tratando de crear un FSM que muestre números en una de las pantallas y en el siguiente estado para mostrar una cadena. Hice que la cadena se mostrara por separado y el número por separado en 2 proyectos, pero recibo errores cuando intento combinarlo. Lo que hice fue configurar un ciclo always@ y colocar allí una bandera en la instrucción if else con dos casos de cambio, pero recibí un error que decía que era preferible deshacerse del ciclo de lógica combinatoria. ¿Hay alguna manera de combinar ambas funcionalidades?

Ok, publicaré un código, pero la imagen principal es que tengo una máquina de estado maestra y luego obtuve otra máquina de estado. Uso la otra máquina de estado como entrada a la pantalla de 7 segmentos para un solo número. Pero en un estado diferente de la máquina de estado maestra, tengo que mostrar un mensaje en las pantallas de 4 7 segmentos. Lo que obtuve ahora es: aquí usé CLK para hacer el mensaje

always@(BIN_IN or CLK) begin
if(FAIL==1) begin
     case(state)
           left:
           begin
               HEX_OUT [6:0] <= F;
               SEG_SELECT_OUT <= 4'b0111;
               state <= midleft;
           end
           midleft:
           begin
               HEX_OUT [6:0] <= A;
               SEG_SELECT_OUT <= 4'b1011;
               state <= midright;
           end
//same for the rest
end
else begin  
case (BIN_IN)
4'h0 : begin
    HEX_OUT [6:0] <= 7'b1000000;
    SEG_SELECT_OUT <= 4'b0111;
end
//same logic for the other cases

Gracias

Está infiriendo lógica combinacional con always@(BIN_IN or CLK), y el comportamiento RTL no coincidirá con las puertas sintetizadas. Como mínimo, debe cambiarlo a always@(posedge CLK)para que sea sincrónico.
Puede cambiar la selección de ánodo a la máxima velocidad del reloj. Hay un Fmax definido por su pantalla -> busque en la hoja de datos. Este diseño no es sincrónico.
@Paebbels, todo el proyecto consta de un módulo superior y 6 submódulos en la parte superior. Entonces todo está anidado y ahora parece complicado. Así que tengo una máquina de estado maestra y una máquina de laberinto. Cuando entro, digamos el estado 3 del maestro, voy a la máquina de laberinto y luego tengo que terminarla y pasar el resultado final al maestro. También tengo que contar 30 segundos en los que tengo que completar el laberinto. Si no puedo, tengo que mostrar un mensaje.
Realmente no sé cómo podría funcionar esto en el módulo de 7 segmentos, ya que en un caso tiene que cambiar los números y en el otro tiene que usar todos los segmentos para mostrar un mensaje.

Respuestas (1)

Creo que entiendo su problema, tuve un problema similar cuando comencé a hacer circuitos en HDL (verilog o VHDL) y procedí de la programación C++, python u otros lenguajes.

Lo que debe comprender es que en verilog, sus variables representan cables (bits) o grupos de cables (vectores) ... por lo que no puede asignar la misma variable como salida de 2 partes de su circuito ... esto sería tan extraño como tener una lampara con 2 enchufes...

Solo "de alguna manera" ponga ambas máquinas en el mismo proceso y funcionará.