eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaFPGA, VHDL detekcja zbocza i problemy › Re: FPGA, VHDL detekcja zbocza i problemy
  • Path: news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
    From: Konop <k...@g...pl>
    Newsgroups: pl.misc.elektronika
    Subject: Re: FPGA, VHDL detekcja zbocza i problemy
    Date: Fri, 22 May 2009 23:10:32 +0200
    Organization: "Portal Gazeta.pl -> http://www.gazeta.pl"
    Lines: 51
    Message-ID: <gv74c9$i79$1@inews.gazeta.pl>
    References: <0...@f...googlegroups.com>
    NNTP-Posting-Host: apc206.internetdsl.tpnet.pl
    Mime-Version: 1.0
    Content-Type: text/plain; charset=ISO-8859-2; format=flowed
    Content-Transfer-Encoding: 8bit
    X-Trace: inews.gazeta.pl 1243026633 18665 83.17.136.206 (22 May 2009 21:10:33 GMT)
    X-Complaints-To: u...@a...pl
    NNTP-Posting-Date: Fri, 22 May 2009 21:10:33 +0000 (UTC)
    X-User: konoppo
    X-Antivirus: avast! (VPS 090522-0, 2009-05-22), Outbound message
    In-Reply-To: <0...@f...googlegroups.com>
    X-Antivirus-Status: Clean
    User-Agent: Thunderbird 2.0.0.21 (Windows/20090302)
    Xref: news-archive.icm.edu.pl pl.misc.elektronika:564185
    [ ukryj nagłówki ]

    > process(CLK,KEY0)
    > begin
    > if KEY0='0' then
    > debug_cnt<=(others=>'0');
    > dior_edge<='0';
    > elsif CLK'event and CLK='1' then
    > if HOST_DIOR_N='1' and dior_edge='0' then
    > debug_cnt<=debug_cnt+1;
    > dior_edge<='1';
    > else
    > dior_edge<='0';
    > end if;
    > end if;
    > end process;

    Ja tu widzę inny (niż widzi Jerry) problem. Nie wiem, czy on powoduje to
    o czym piszesz... teoretycznie może (przepełnienie ;))... Sam napisałeś,
    że sygnał HOST_DIOR_N jest *kilkanaście* *razy* *wolniejszy* od sygnału
    CLK. Rozumiem, że ma po prostu dłuższy okres i stan aktywny HOST_DIOR_N
    trwa ponad 1 cykl zegara CLK, tak?? To teraz przeanalizuj co się będzie
    działo w przypadku, gdy będziesz miał HOST_DIOR_N = 1 przez 10 taktów
    CLK. Kolejne numerki to kolejne zbocza narastające CLK
    1) dior_edge = 0, więc dodajemy 1 i dajemy dior_edge<=1
    2) poniewaz warunek HOST_DIOR_N='1' _and_ dior_edge='0' NIE JEST
    spełniony, "wykonywane" jest dior_edge<=0 !!
    3) identyczny z 1)
    itd: 2=4=6=8=10 i 1=3=5=7=9 :)...

    Efekt - zliczasz 5 impulsów, a chciałeś 1 ;)... wystarczy tego enda
    rozbić na dwa ify i będzie po sprawie ;)...

    if HOST_DIOR_N='1'
    if dior_edge='0' then debug_cnt<=debug_cnt+1;****
    dior_edge<='1';
    else
    dior_edge<='0';
    end if;
    W lini z **** na końcu nie jestem pewny czy nie trzeba dawać end if, nie
    pamiętam po prostu dokładnie składni VHDLa ;)...

    > Moim skromnym zdaniem powinno to zliczać w debug_cnt ilość wystąpień
    > narastających zboczy sygnału HOST_DIOR_N, który jest kilkanaście razy
    > wolniejszy od CLK... I co się okazuje? Zmienna debug_cnt zawiera około
    > połowę mniejszą wartość niż powinna....

    Fakt, że zmienna powinna zawierać zdecydowanie większą wartość niż
    powinna, ale może przepełnienie robi swoje?? ;)... Nie wiem jak
    deklarujesz tę zmienną i ile teoretycznie możesz tam zliczać ;)...

    Pozdrawiam
    Konop

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

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: