représentation nombre négatif en simulation lors différence

Electronique numérique / Circuits logiques programmables EPLD, CPLD, FPGA d'Altera ou de Xilinx VHDL, Verilog ou SystemC

Modérateur : Modérateur

debutant_vhdl

représentation nombre négatif en simulation lors différence

Message par debutant_vhdl »

salut ,
mon problème est que je veux faire une simple différence entre deux entiers
et lors de la simulation je trouves pas mon résultat (s'il s'agit d'un résultat négatif ) le moins en simulation :
par exemple si je fais 3 - 4 = -1
en simulation je touves comme résultat 1 et non pas -1 comment représenté le moins .
------------------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity difference is
Port ( clk : in STD_LOGIC;
Y_act : in STD_LOGIC_VECTOR (7 downto 0);
Y_suiv : in STD_LOGIC_VECTOR (7 downto 0);
Y_eps : out STD_LOGIC_VECTOR (7 downto 0));
end difference;

architecture arch_difference of difference is
signal opn,res:STD_LOGIC_VECTOR (7 downto 0);
begin
process(clk)
begin
-- Calcul des Y epsilons
if Y_suiv < Y_act then --- si on va avoir un résultat négatif on va utiliser le complément a 2
opn <= (not Y_act) + 1;--- complément à 1et ajout de 1
res <= Y_suiv + opn;
Y_eps <= not(res - 1);
else
Y_eps <= Y_suiv - Y_act;
end if;
end process;
end arch_difference;
---------------------------------------------------------------------------------------------
et merci bien

Avatar de l’utilisateur
marsu
INSATIABLE
INSATIABLE
Messages : 155
Inscription : 13 juin 2005 10:08
Localisation : Paris
Contact :

Message par marsu »

Au lieu de

Code : Tout sélectionner

use IEEE.STD_LOGIC_UNSIGNED.ALL; 
utilise plutot

Code : Tout sélectionner

use IEEE.STD_LOGIC_SIGNED.ALL; 
UNSIGNED ne permet pas d'utiliser le bit de poids fort en bit de signe.
SIGNED le permet, mais réduit donc l'amplitude positive par deux... (0 à 255 donnera -128 à +127)
Logique...

Répondre