[ma forme d'onde] [1] Le shifter est un composant qui est capable de mettre en œuvre des opérations de décalage arithmétique et logique. Pour cette implémentation, vous n'êtes pas autorisé à utiliser l'opérateur de décalage. L'entrée AL détermine si vous avez une opération de décalage arithmétique ou logique. dir a également décidé de la direction de votre quart de travail. Le décalage de la valeur d'entrée détermine également le nombre de changements que vous attendez. Vous pouvez supposer que chaque décalage de bit prend 10 ns dans la composante de décalage. Par exemple, si vous avez choisi shift = 5 quel que soit le sens ou le type de décalage (arithmétique ou logique), le retard de ce composant est de 50 ns.Calculer le décalage VHDL de décalage de 32 bits
Comment trouver le retard? chaque bit a 10 ns de retard, que dois-je faire pour un décalage de 10 *?
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use ieee.std_logic_unsigned.all;
ENTITY shifter IS
GENERIC (BW : INTEGER :=32);
PORT (i : IN STD_LOGIC_VECTOR (BW -1 DOWNTO 0);
dir : IN BIT; -- dir ='0' means shift right and dir ='1' means shift left
AL: IN BIT ; -- Arithmetic or logical shift asume AL='1' means arithmetic an AL ='0' means logical
shifting : IN INTEGER range 0 to BW -1;
o: OUT STD_LOGIC_VECTOR (BW -1 DOWNTO 0));
END ;
ARCHITECTURE shifter_arch OF shifter IS
BEGIN
process(dir,i,AL,shifting)
variable temp: std_logic_vector(31 downto 0);
begin
if dir='0' then
if AL='0' then
temp:= i(BW-(1+shifting) downto 0)&(BW-1 downto BW-(1+shifting)=> '0');
else
temp:= i(BW-(1+shifting) downto 0)&(BW-1 downto BW-(1+shifting)=> i(BW-1));
end if;
elsif dir ='1' then
if AL='0' then
temp:= i(BW-1 downto shifting)&((shifting-1) downto 0=> '0');
else
temp:= i(BW-1 downto shifting)&((shifting-1) downto 0=> i(0));
end if;
end if;
o <= temp ;
end process;
END shifter_arch ;
Votre shifter n'est pas analysé avec succès. L'extérieur de la boucle de génération dépend du 'déplacement 'comme la limite droite et le décalage est un port d'entrée (non statique). IEEE Std 1076-2008 11.8 Générer des instructions "La plage discrète dans la spécification de paramètre de génération d'une instruction for generate doit être une plage discrète statique, de même que chaque condition dans une instruction if generate doit être une expression statique." * Doit * (* doit * -1993) a un poids obligatoire, et devrait avoir produit une erreur au lieu de ne pas élaborer. Voulez-vous utiliser des instructions de boucle séquentielles (à l'intérieur d'un processus)? – user1155120
que devrais-je obtenir le décalage n bits sans générer? –
Une boucle for dans un processus? – user1155120