Problemas al usar el módulo VHDL en verilog

0

Tengo errores de síntesis al usar un módulo VHDL en Verilog. El siguiente mensaje de error dice que el tipo de entrada rd_ptr en el módulo VHDL no coincide con la variable rd_ptr_integer en el código de registro de verificación. El compilador también da este error para la variable de salida pckt_size. Por favor, ayúdame en esto.

La entidad del módulo vhdl es esta

   entity packet_size is
    generic(
      fifo_MaxDepth:integer range 0 to 256:=16
      );
   port(
    fifo_tlast:in std_logic_vector(fifo_MaxDepth -1 downto 0);
    depth:in std_logic_vector(fifo_MaxDepth -1 downto 0);
    rd_ptr:in integer range 0 to fifo_MaxDepth - 1;
    pckt_size:out integer 
    );
     end packet_size;

La parte de mi código de verilog que es la fuente del error es esta

 reg [WIDTH-1:0] queue [MAX_DEPTH - 1 : 0];
 reg [MAX_DEPTH_BITS - 1 : 0] rd_ptr;
 reg [MAX_DEPTH_BITS - 1 : 0] wr_ptr;
 reg [MAX_DEPTH_BITS : 0] depth;
 wire [MAX_DEPTH : 0]fifo_tlast_packet;
 wire [MAX_DEPTH_BITS - 1 : 0] rd_ptr_temp;
 integer packet_size_out;
 integer rd_ptr_integer;
 assign num_of_packets=depth;
 assign rd_ptr_temp=rd_ptr;
   // Sample the data
   //initialising the fifo_tlast_packet array for the packet_size module
   genvar    i;
   for (i=0;i<MAX_DEPTH;i=i+1) begin
    assign fifo_tlast_packet[i]=queue[i][0];
    end;
    //converting array to integer
    always @(rd_ptr_temp)
     begin
      rd_ptr_integer=rd_ptr_temp;
      end
      //adding the packet_size module for measuring the packet size of the first fifo data
    packet_size
     #(.fifo_MaxDepth(MAX_DEPTH) )
       packet1(
        .fifo_tlast(fifo_tlast_packet),
        .depth(depth),
        .rd_ptr(rd_ptr_integer),
        .pckt_size(packet_size_out)
        );

Los errores que se muestran en la síntesis de ISE están aquí

  ERROR:HDLCompiler:440 - "K:/final project/codes/v3/small_fifo_v3.v" Line 69: Formal port rd_ptr of type integer does not match with actual type integer
  ERROR:HDLCompiler:440 - "K:/final project/codes/v3/small_fifo_v3.v" Line 70: Formal port pckt_size of type integer does not match with actual type integer
  ERROR:HDLCompiler:1654 - "K:/final project/codes/v3/small_fifo_v3.v" Line 64: Instantiating <packet1> from unknown module <packet_size>
    
pregunta user2988239

1 respuesta

0

Si integer no coincide con integer , esto parece un problema de herramienta con ISE en lugar de un problema con su diseño.

Primero eliminaría esto último al verificarlo en la simulación: ISIM (con algunas restricciones) o Modelsim deberían manejar diseños mixtos.

Una vez confirmado el diseño, necesita una solución para el problema de las herramientas.

Si cambia el FPGA elegido a algo como Spartan-3, el ISE adopta por defecto un analizador VHDL más antiguo que maneja mejor algunas construcciones VHDL, con una opción "avanzada" para usar el nuevo analizador en su lugar. Pruebe ambos ... Por supuesto, si necesita un FPGA más nuevo, esto no solucionará su problema, pero puede apuntar más cerca del problema ... vea más abajo.

Alternativamente, Xilinx ahora ofrece un tercer analizador VHDL en forma de Vivado, tal vez esto resuelva el problema.

(Si el problema reside realmente en el lado de Verilog, me temo que no puedo ayudar, si fuera mi trabajo, reescribiría ese pequeño módulo de Verilog en VHDL y terminaría con él).

Si nada de lo anterior ayuda, entonces tendrás que ir contra mi consejo habitual y en realidad use std_logic_vector para el puerto, y cualquiera que sea el equivalente de Verilog, y las conversiones de tipo apropiadas a / desde el número entero a través de (firmado o sin signo) en cualquier lado.

    
respondido por el Brian Drummond

Lea otras preguntas en las etiquetas