Guest
Sat May 23, 2015 10:31 am
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;
Jakub Rakus
Guest
Sat May 23, 2015 12:12 pm
On 23.05.2015 10:31, stchebel@gmail.com wrote:
Quote:
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;
Jeśli działanie jest synchronizowane zegarem to po co na liście czułości
procesu dajesz A i B?
Zamiast CLK'event and CLK='1 daj rising_edge(CLK). Gdzieś czytałem, że
wbrew pozorom nie zawsze to zadziała tak samo.
C<=Cs(10 downto 0); wywal poza proces. Albo Cs zrób jako variable
wewnątrz procesu.
--
Pozdrawiam
Jakub Rakus
MiSter
Guest
Sat May 23, 2015 1:00 pm
Quote:
C<=Cs(10 downto 0); wywal poza proces. Albo Cs zrób jako variable
wewnątrz procesu.
Pomogło, ale dalej nie kojarzę dlaczego w oryginalnej wersji takie jaja..
W sprzęcie by zadziałało poprawnie, w symulacji przypisanie następuje w
następnej delcie...
Takie przypisania robi się w procesie współbieżnym, czyli na zewnątrz
lub jako variable jak zasugerował kolega Jakub.
Pozdrawiam
MiSter
Guest
Sat May 23, 2015 2:28 pm
W dniu sobota, 23 maja 2015 14:12:32 UTC+2 użytkownik Jakub Rakus napisał:
Quote:
On 23.05.2015 10:31, stchebel@gmail.com wrote:
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;
Jeśli działanie jest synchronizowane zegarem to po co na liście czułości
procesu dajesz A i B?
Faktycznie masz rację. Zrobiłem to z rozpędu.
Quote:
Zamiast CLK'event and CLK='1 daj rising_edge(CLK). Gdzieś czytałem, że
wbrew pozorom nie zawsze to zadziała tak samo.
Nie pomogło.
Quote:
C<=Cs(10 downto 0); wywal poza proces. Albo Cs zrób jako variable
wewnątrz procesu.
Pomogło, ale dalej nie kojarzę dlaczego w oryginalnej wersji takie jaja..
Quote:
--
Pozdrawiam
Jakub Rakus
Jakub Rakus
Guest
Sat May 23, 2015 2:35 pm
On 23.05.2015 15:00, MiSter wrote:
Quote:
W sprzęcie by zadziałało poprawnie, w symulacji przypisanie następuje w
następnej delcie...
Takie przypisania robi się w procesie współbieżnym, czyli na zewnątrz
lub jako variable jak zasugerował kolega Jakub.
Pozdrawiam
MiSter
I racja, kolega fachowo wytłumaczył z podstawami teoretycznymi, bo ja to
tylko praktyk w tej dziedzinie jestem.
--
Pozdrawiam
Jakub Rakus