Chcę zrozumieć, w jaki sposób różne konstrukcje w kodzie VHDL są syntetyzowane w RTL.
- Czy ktoś może mi powiedzieć różnicę między konstrukcją If-Else a konstrukcją instrukcji Case procesu w VHDL pod względem sposobu wnioskowania kodu do obwodu RTL przez narzędzie do syntezy?
- Rozważ przypadek wielu zagnieżdżonych instrukcji if-else i mieszania instrukcji case z konstrukcją if-else wewnątrz procesu.
- Również kiedy użyć której konstrukcji?
PS: Widziałem podobne pytanie „Wiele instrukcji w toku w vhdl”, ale to i tak nie odpowiada na moje pytanie.
vhdl
code-design
rtl
nurabha
źródło
źródło
dec
/jz
instrukcje, co jest znacznie wydajniejsze. Być może zastosowano tutaj podobną optymalizację.Odpowiedzi:
if-elsif-else
Konstrukcja wywodzi priorytet routingu sieci:symulacja tego obwodu - Schemat utworzony przy użyciu CircuitLab
To odpowiada
Z
case
drugiej strony konstrukt wnioskuje z dużego olxu:To odpowiada
Oczywiście są to bardzo uproszczone projekty z tylko jednym wyrażeniem wartości, co daje jeden wynik.
Na podstawie powyższego możesz zobaczyć, jak by się zagnieżdżały / miksowały.
Ponieważ ma on
if-else
priorytet, należy go stosować, gdy może wystąpić więcej niż jeden warunek wejściowy. Używaniecase
, z drugiej strony, jest odpowiednie, gdy dane wejściowe wzajemnie się wykluczają.źródło
if-else
konstruktu jest jednak tym, gdzie powstaje ten łańcuch. Pierwszy warunek musi zawieść, aby drugi warunek został przetestowany. Nie jest tak w przypadku, po prostu,case
konstrukcji i dlategoif-else
instrukcja nie mogła zostać zsyntetyzowana jako pojedynczy duży multiplekser.case
instrukcja może również generować logikę sekwencyjną. Znalazłem „Real World VHDL” , serię wykładów z Uniwersytetu w Glasgow, które mogą być dla ciebie pomocne.W tym starym wpisie na blogu autor napisał i zsyntetyzował dwie funkcjonalnie równoważne wersje kodu VHDL. Jeden używa if-else, drugi używa case. Wynik:
I jego wniosek:
Istnieją również dziesiątki postów na ten temat na temat przepełnienia stosu dla każdego możliwego języka. Wniosek jest ogólnie taki sam, że nie ma różnicy pod względem wydajności. Czasami, jeśli istnieje duża liczba przypadków, kompilator może być wystarczająco inteligentny, aby utworzyć tabelę przeglądową, która dałaby nieco lepszą wydajność.
Syntezator VHDL może być w stanie zrobić coś podobnego. Ale nadal potrzebujesz dużej liczby przypadków, w którym to przypadku (gra słów zamierzona) prawdopodobnie i tak chciałbyś użyć instrukcji case, ponieważ zapewnia ona lepszą czytelność tam, gdzie jest wiele opcji.
źródło