¿Cómo asignar valor a un puerto bidireccional en verilog?

6

Estoy tratando de usar un puerto bidireccional en Verilog para poder enviar datos de recepción a través de él. Mi problema es que cuando intento asignar un valor al puerto dentro de una tarea, pero sigo recibiendo un error.

¿Cuál es la forma correcta de asignar un valor a este tipo de variables?

Mi código es el siguiente:

    module test(value,var);

    inout value;
    output var;
    reg var,value;

    task sendValue;
      begin
        var = 1;
        value = 1;
      end
    endtask

   endmodule

y el error que estoy recibiendo es: ** Error: C: / [...]: (vlog-2110) Referencia ilegal a un "valor" neto.

Gracias.

    
pregunta HzJavier

2 respuestas

8

Si debe usar cualquier puerto como inout, aquí hay algunas cosas que debe recordar:

  1. No se puede leer y escribir en el puerto de entrada simultáneamente, por lo tanto, se mantiene alto para leer.
  2. el puerto de entrada puede NUNCA de tipo reg.
  3. Debe haber una condición en la cual se debe escribir. (Los datos en mem deben escribirse cuando Write = 1 y deben poder leer cuando Write = 0).

Por ejemplo, Escribiré tu código de la siguiente manera.

module test (value, var);
  inout value;
  output reg var;

  assign value = (condition) ? <some value / expression> : 'bz;

  always @(<event>)
    var = value;

endmodule

BTW Cuando var es de tipo cable, puedes leerlo de la siguiente manera:

assign var = (different condition than writing) ? value : [something else];

Por lo tanto, como puede ver, no hay ninguna restricción sobre cómo leerlo, pero el puerto de entrada DEBE debe escribirse como se muestra arriba.

Espero que te lo explique.

    
respondido por el wisemonkey
0

Comprueba si la biblioteca que estás usando incluye algún controlador de tres estados: son los que siempre he usado en esta situación.

Si se ve obligado a intentar diseñar su propio controlador de tres estados, recuerde que su salida debe ser Z siempre que debe permitir una entrada en su lugar.

    
respondido por el user6030

Lea otras preguntas en las etiquetas