Cambiar la salida según el estado en VHDL

0

Mi salida tiene que ser alta si mi estado es F o H, he escrito esto:

z <= '1' WHEN y = (F OR H) ELSE '0' ;

Pero esto no funciona. También he intentado escribirlo como:

IF y = F THEN
    z <= '1' ;
ELSIF y = H THEN
    z <= '1' ;
ELSE
    z <= '0';
END IF ;

Pero ahora obtén el Error 10500 en Quartus 2, ¿qué hay de malo en mi sintaxis o hay una mejor manera de escribirlo?

    
pregunta Dean

2 respuestas

3

Mi mejor conjetura dada tan poca información, como lo que "no funciona" significa ...

F y H son de algún tipo que no tienen operadores booleanos definidos en él; por lo tanto, (F or H) no tiene sentido.

Ahora ... Y = F es una expresión booleana, así que es Y = H para que puedas decir

z <= '1' WHEN (y = F) OR (y = H) ELSE '0' ;

y (suponiendo que esto está fuera de un proceso) podría hacer lo que usted espera (suponiendo que Y, F, H sean del mismo tipo o compatibles)

El segundo formulario también funcionará, pero solo como parte de un proceso ...

    
respondido por el Brian Drummond
3

El primero debe escribirse de esta manera:

z <= '1' WHEN (y = F) OR (y = H) ELSE '0';

El segundo debe estar dentro de un proceso:

PROCESS (y) BEGIN
  IF y = F THEN
    z <= '1';
  ELSIF y = H THEN
    z <= '1';
  ELSE
    z <= '0';
  END IF;
END PROCESS;
    
respondido por el Dave Tweed

Lea otras preguntas en las etiquetas