eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronika › VHDL - checa przy symulacji
Ilość wypowiedzi w tym wątku: 5

  • 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

strony : [ 1 ]


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: