Asignación de puertos de un multiplexor de n bits

1

Tengo UN multiplexor n-to-1 y estoy tratando de asignar sus n puertos de entrada desde otro componente que tiene n puertos de salida. ¿Cómo puedo hacer esto?

A continuación se muestra mi código y los errores. He omitido el otro componente para evitar confusiones.

Errores:

  1. Identificador desconocido "i".
  2. Los "mux_in" formales asociados individualmente deben identificarse con un nombre estático localmente.
  3. Real (nombre indexado) para "mux_in" formal no es un nombre de señal estática.

Código:

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;

package data_array is
CONSTANT Block_Size      : integer := 64; 
CONSTANT Entry_length  : integer := 32;  
type signal_array is array(Block_Size downto 0) of std_logic_vector (Entry_length-1 downto 0);
end package data_array;


library ieee;
use ieee.std_logic_1164.all;

library work;
USE work.data_array.all; --including the package

entity A is

generic (
  Block_Size    : integer := 64; 
  Entry_length  : integer := 32   
  );


  port(
    sel:            in integer;
    new_entry:      in std_logic_vector(Entry_length-1 downto 0); 
    clk:            in std_logic;          
    reset:          in std_logic;          
    done:           out std_logic;                             --indicates completion of shifting
    last_entry:     out std_logic_vector(Entry_length-1 downto 0)
   );

end A;



architecture Synchronous of A is


    Component Multiplexer 

      generic (
        Block_Size    : integer := 64; 
        Entry_length  : integer := 32   
        );

      port(
        sel:        in integer;
        mux_in:     in signal_array;
        Mux_out:    out std_logic_vector(Entry_length-1 downto 0)
         );

    end component;

  --Intermediate signals

   signal interconnect : signal_array;
   signal temp_entry : std_logic_vector(Entry_length-1 downto 0);

  begin 

  temp_entry <= new_entry;

      --Instantiating the mux     
           mux: Multiplexer
                generic map(
                  Block_Size     => Block_Size,
                  Entry_length => Entry_length 
                  )

                port map(
                  sel        => sel,
                  mux_in(i)  => interconnect(i),
                  Mux_out    => temp_entry 
                   );

 end Synchronous;
    
pregunta Orange

1 respuesta

2

El primer error

  

Identificador desconocido "i".

da una muy buena pista en cuanto al problema. i no está definido.

No es necesario "indexar" la matriz, que es lo que supongo que estás intentando hacer, ya que ambos tipos son iguales:

mux_in:     in signal_array;
...
signal interconnect : signal_array;

Todo lo que necesitas hacer es esto:

mux_in  => interconnect,

Y eso trataría con el # 1, por lo que puedo ver. No sé si # 2 y # 3 son problemas adicionales, a veces varios errores son causados por un problema.

Si esto aún no soluciona los problemas # 2 y # 3, publique el resto del código (el mux y el paquete), y volveré a crear el problema de mi lado y buscaré un poco más:)

    
respondido por el stanri

Lea otras preguntas en las etiquetas