Conectando n bus de bits de un componente a otro

2

Creo que no me expliqué correctamente. Déjame que te cuente con más detalle.

Tengo 64 bloques: A, B, C, D ..... Cada uno de estos bloques es un registro de desplazamiento paralelo en paralelo de n bits. La tarea de estos bloques es cambiar su contenido de A a B, de B a C, de C a D ... etc.

Tengo problemas para enviar el tipo de datos std_logic_vector de un bloque al otro.

Mi código se da a continuación. He puesto comentarios en las líneas que tienen el error.

library ieee;
use ieee.std_logic_1164.all;

entity Shift is

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


port(
  new_entry:      in std_logic_vector(Entry_length-1 downto 0);         
  clk:            in std_logic;          
  reset:          in std_logic;          
  done:           out std_logic                             
 );

end Shift;

architecture Synchronous of Shift is
component ShiftReg
      generic (
           Entry_length  : integer := 32   
          );

      port(
          clk:            in std_logic; 
          reset:          in std_logic; 
          enable:         in std_logic;                                   
          data_in:        in std_logic_vector(Entry_length-1 downto 0);   
          data_out:       out std_logic_vector(Entry_length-1 downto 0)   
          );

end component;  

signal data_Shift_i : std_logic_vector(Entry_length-1 downto 0);
signal enable : std_logic; 

begin  
  Reg_i: for i in 0 to Block_Size-1 generate 
            i_Reg: ShiftReg
            generic map ( Entry_length => Entry_length
                ) 
            port map (  
                clk              => clk,
                reset            => reset,
                enable           => enable,
                data_in          => data_Shift_i(i-1),  -- error: cannot put (i-1)
                data_out         => data_Shift_i(i)     --error: cannot put (i)
              );
  end generate Reg_i;

end synchronous;
    
pregunta Orange

3 respuestas

2

Puede colocar los componentes A y B en un nuevo componente (por ejemplo, AB) y crear una instancia de ese nuevo componente n veces con un generador.

gen: for i in 1 to 64 generate

   i_ab: entity work.ab
      port map(
          ....
          ); 

end generate gen;
    
respondido por el vermaete
1

Hay un problema con el enlace de sus puertos a la señal. Los puertos son de 32 bits de ancho. Su señal en el nivel superior que se está conectando, por ejemplo. A con B también es de 32 bits, ¡pero estás usando solo un bit para la conexión!

Me gustaría crear un nuevo tipo:

type t_interconnect is array (0 to Block_Size) of std_logic_vector(Entry_length-1 downto 0); -- the new type
signal interconnect of t_interconnect; -- the signal of the new type to be used 

Puede asignar la entrada del módulo superior al primer índice de 'interconexión'. Y además, conecte 'data_in' y 'data_out' como en el ejemplo. El último índice de la matriz es la salida del último módulo de la cadena y debe asignarse a la salida del nivel superior.

    
respondido por el vermaete
0

data_Shift_i tiene solo 32 bits de ancho. Su bucle for va de 0 a 63, por lo que está intentando acceder a bits de data_Shift_i que no existen. Sin embargo, creo que es solo el primero de tus problemas.

    
respondido por el Joe Hass

Lea otras preguntas en las etiquetas