W jaki sposób zmienna VHDL jest syntetyzowana przez narzędzia do syntezy

9

Znam dwa sposoby syntezy zmiennej VHDL przez narzędzie do syntezy:

  • Zmienna zsyntetyzowana jako logika kombinacyjna
  • Zmienna zsyntetyzowana w sposób niezamierzony jako Latch (gdy niezainicjowana zmienna jest przypisana do sygnału lub innej zmiennej)

Jakie są inne sposoby syntezy zmiennej VHDL? (Przykład: czy można to interpretować jako FF?)

nurabha
źródło

Odpowiedzi:

8

Wyróżniłbym trzy możliwości:

  1. Zmienna VHDL w ogóle nie ma reprezentacji sprzętowej. Załóżmy następujący przykład

    signal a,b,c : integer;  
    ...  
    process ( clk ) is  
    variable var : integer := 0;  
    begin  
    if ( rising_edge(clk) ) then  
    var := a + b;  
    c <= var;  
    end if;  
    end process;

    Zmienna varwcale nie jest tak naprawdę syntetyzowana jako logika kombinatoryczna (zakładając, że o to chodziło w pytaniu). Jest to raczej prawa strona zadania a + bzsyntetyzowanego na sprzęt. Ściśle mówiąc, zmienna nigdy nie jest syntetyzowana w logice kombinatorycznej.

  2. Zmienna zawiera jedynie wynik pośredni, który jest albo oceniany w tym samym cyklu zegarowym -> ponownie nie jest syntezowany sprzętowo (to jest 1)), albo jest analizowany w następnym cyklu zegarowym -> syntezowany jest flipflop.

  3. Jeden z tych przerażających zatrzasków wywnioskowano w takich przypadkach, w których istnieją gałęzie warunkowe, w których zmiennej nie jest przypisywana ani nowa wartość (w zależności od niektórych sygnałów), ani wartość domyślna. Zwykle ten przypadek zdarza się niezamierzony :-)

andrsmllr
źródło
„Straszna zatrzask” może się zdarzyć tylko poza taktowanym procesem, a większość ludzi (z mojego doświadczenia) obecnie nie korzysta z nie taktowanych procesów. Tak zatrzask strach nie jest już problemem (IMHO) - wynika z dawnych dni, kiedy mieli napisać logiki kombinatorycznej w odrębnym procesie na swojej Japonki
Martin Thompson
4

Jeśli użyjesz wartości w zmiennej przed jej zapisaniem, otrzymasz wartość, która była zapisana podczas ostatniego przechowywania procesu (w taktowanym procesie, wartość z poprzedniego cyklu zegara). To jest syntetyzowane jako rejestr lub FF.

Oczywiście w pierwszym cyklu zegara otrzymujesz śmieci, chyba że zainicjowałeś zmienną w klauzuli resetowania.

Brian Drummond
źródło