Napisałem kawałek kodu do obliczania C=|A-B|, gdzie A,B,C to 11 bitowe liczby bez znaku. Liczy dobrze, ale przy symulacji behawioralnej wynik pojawia się na opadającym zboczu zegara.Za cholerę nie wiem dlaczego?! Poniżej kod:
library IEEE; use IEEE.STD_LOGIC_1164.ALL;
library UNISIM; use UNISIM.VComponents.all;
entity amod is
Port ( A : in STD_LOGIC_VECTOR (10 downto 0); B : in STD_LOGIC_VECTOR (10 downto 0); CLK : in STD_LOGIC; C : out STD_LOGIC_VECTOR (10 downto 0)); end amod;
architecture Behavioral of amod is signal Cs:std_logic_vector(11 downto 0); begin
process(CLK,A,B) begin if CLK'event and CLK='1' then Cs<=std_logic_vector(to_unsigned(abs(to_integer(signed('0'&A))-to_integer(signed('0'&B))),12)); end if; C<=Cs(10 downto 0); end process;
end Behavioral;