Attribution des ports d’un multiplexeur à n bits

Orange

Attribution des ports d’un multiplexeur à n bits


J’ai UN multiplexeur n-à-1 et j’essaie d’assigner ses n ports d’entrée à partir d’un autre composant qui a n ports de sortie. Comment puis-je faire ceci?

Mon code est donné ci-dessous, et les erreurs. J’ai omis l’autre composant pour éviter toute confusion.

Les erreurs:

  1. Identifiant « i » inconnu.
  2. Le « mux_in » formel associé individuellement doit être identifié par un nom localement statique.
  3. Réel (nom indexé) pour le « mux_in » formel n’est pas un nom de signal statique.

Code:

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;

Réponses


 Stanri

La première erreur

Identifiant « i » inconnu.

donne un très bon indice sur la question. i n’est pas défini.

Il n’est pas nécessaire «d’indexer» le tableau, ce que je suppose que vous essayez de faire, car les deux types sont les mêmes:

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

Tout ce que vous devez faire est le suivant:

mux_in  => interconnect,

Et cela porterait sur # 1, pour autant que je puisse voir. Je ne sais pas si # 2 et # 3 sont des problèmes supplémentaires, parfois plusieurs erreurs sont causées par un seul problème.

Si cela ne résout toujours pas les problèmes # 2 et # 3, postez le reste du code (le multiplexeur et le package), et je recréerai le problème de mon côté et fouillerai un peu plus loin 🙂

Brian Drummond

+1. Il devrait résoudre (2) et (3) car « interconnexion » est un nom localement statique (ce qui signifie, statique: sa signification peut être déterminée avant l’exécution, contrairement à l’interconnexion (i), et localement: vous n’avez pas besoin d’élaborer le reste de la conception pour le trouver)

Orange

oui en supprimant le i travaillé. Merci! en fait, plus tôt mon interconnexion et mux_in avaient été déclarés différemment. l’interconnexion était (0 à la taille du bloc) et mux_in était (la taille du bloc à 0). Je suppose qu’en raison de cette erreur, cela ne m’a pas permis d’attribuer mux_in <= interconnect. Par conséquent, j’essayais mux_in (i) <= interconnect (i). En publiant ici, j’ai changé les deux pour le même type, mais j’ai oublié de supprimer le i et de recompiler!

 

#à, Attribution, bits, d’un, des, multiplexeur, n, ports

 

wiki France

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *