-
1. Data: 2015-05-23 10:31:10
Temat: VHDL - checa przy symulacji
Od: s...@g...com
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(sign
ed('0'&A))-to_integer(signed('0'&B))),12));
end if;
C<=Cs(10 downto 0);
end process;
end Behavioral;
-
2. Data: 2015-05-23 14:12:31
Temat: Re: VHDL - checa przy symulacji
Od: Jakub Rakus <s...@o...pl>
On 23.05.2015 10:31, s...@g...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(sign
ed('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
-
3. Data: 2015-05-23 14:28:15
Temat: Re: VHDL - checa przy symulacji
Od: s...@g...com
W dniu sobota, 23 maja 2015 14:12:32 UTC+2 użytkownik Jakub Rakus napisał:
> On 23.05.2015 10:31, s...@g...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(sign
ed('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.
> 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.
> 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.
>
> --
> Pozdrawiam
> Jakub Rakus
-
4. Data: 2015-05-23 15:00:54
Temat: Re: VHDL - checa przy symulacji
Od: MiSter <U...@w...pl>
>
>> 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
-
5. Data: 2015-05-23 16:35:46
Temat: Re: VHDL - checa przy symulacji
Od: Jakub Rakus <s...@o...pl>
On 23.05.2015 15:00, MiSter wrote:
>
> 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