deux petites questions de syntaxe
Publié : 03 janv. 2006 1:02
Salut,
Je debut en VHDL et j'ai deux petites questions de syntaxe aux quelles je n'arrive pas a trouver les reponses sur le net.
Je developpe pour un FPGA xilinx, j'utilise donc xilinx ISE pour le developpement et modelsim.
Premiere question:
Je souhaite effectuer une convolution. Je multiplie donc mon buffer d'entree par une constante. Mais je souhaite pouvoir modifier cette constante au fur et a mesure du developpement. Donc pour faire propre je voulais faire un peu comme en C avec les #define. Declare les constante au debut du code
J'ai donc employe la synthaxe suivante en utilisant des generic:
Quand je synthetise avec ISE ca passe sans aucun warning, mais quand je veux simuler, modelsim plante et detecte une faute dans le test bench genere automatiquement par ISE (test bench waveform)
Donc je voulais savoir pourquoi, et si il y a moyen d'utiliser les generics pour declarer se genre de constante.
Et deuxieme question:
J'ai code un simple additionneur 24 bits, et je fait une troncation a la sortie, pour ne recuper que les 8 bits de poids fort.
le code est tres simple
Mais lorsque je synthetise j'ai des warning concernant chaque bit que je n'utilise pas pour la sortie:
=>"WARNING:Xst:1291 - FF/Latch <result_add_0> is unconnected in block <add_conv>."
Comment eviter ca?
Voila
Je vous remercie pour votre aide
Sebastien
Je debut en VHDL et j'ai deux petites questions de syntaxe aux quelles je n'arrive pas a trouver les reponses sur le net.
Je developpe pour un FPGA xilinx, j'utilise donc xilinx ISE pour le developpement et modelsim.
Premiere question:
Je souhaite effectuer une convolution. Je multiplie donc mon buffer d'entree par une constante. Mais je souhaite pouvoir modifier cette constante au fur et a mesure du developpement. Donc pour faire propre je voulais faire un peu comme en C avec les #define. Declare les constante au debut du code
J'ai donc employe la synthaxe suivante en utilisant des generic:
Code : Tout sélectionner
entity conv is
generic(kernel : std_logic_vector(15 downto 0):="0011100011110000");
port ( buffer1 : in std_logic_vector(7 downto 0);
buffer2 : in std_logic_vector(7 downto 0);
buffer3 : in std_logic_vector(7 downto 0);
buffer4 : in std_logic_vector(7 downto 0);
.....................................
CLK : in std_logic;
buffer_out : out std_logic_vector(7 downto 0));
end conv;
architecture Behavioral of conv is
"declaration des composants"
begin
......
mult1 : mult9by16 port map(A=>kernel,B=>result_sum1,CLK=>CLK,AbyB=>result_mult1);
end Behavioral;
Donc je voulais savoir pourquoi, et si il y a moyen d'utiliser les generics pour declarer se genre de constante.
Et deuxieme question:
J'ai code un simple additionneur 24 bits, et je fait une troncation a la sortie, pour ne recuper que les 8 bits de poids fort.
le code est tres simple
Code : Tout sélectionner
entity add_conv is
Port ( A : in std_logic_vector(24 downto 0);
B : in std_logic_vector(24 downto 0);
C : in std_logic_vector(23 downto 0);
CLK : in std_logic;
result : out std_logic_vector(7 downto 0));
end add_conv;
architecture Behavioral of add_conv is
signal C2 : std_logic_vector(24 downto 0);
signal result_add : std_logic_vector(24 downto 0);
begin
process(A,B,C,CLK)
begin
C2(24)<='0';
C2(23 downto 0)<= C(23 downto 0);
if rising_edge(CLK) then
result_add<= A + B + C2;
end if;
end process;
result<=result_add(24 downto 17);
end Behavioral;
=>"WARNING:Xst:1291 - FF/Latch <result_add_0> is unconnected in block <add_conv>."
Comment eviter ca?
Voila
Je vous remercie pour votre aide
Sebastien