2014-10-28 12 views
7

Wygląda na to, że jest sporo dyskusji o tym, jak kodować maszyny skończonego stanu (FSM) w VHDL. Ludzie mówią o 1-procesowych, 2-procesowych lub 3-procesowych maszynach FSM, jakby wszyscy wiedzieli dokładnie, co to znaczy i co robi każdy proces. Jednak nie byłem w stanie znaleźć dokładnej definicji, a przykłady, które istnieją, wydają się sprzeczne.Co oznacza 1-, 2- lub 3-procesowa średnia dla FSM w VHDL?

To jest obiektywne pytanie: Jaka jest różnica pod względem kodu dla każdego stylu FSM (1-procesowy, 2-procesowy, 3-procesowy)? Rozumiem, że istnieje element osobistych preferencji, ale z pewnością możliwe jest obiektywne udzielenie odpowiedzi na pytanie i wykazanie zalet każdego podejścia.

Dzięki,

+2

XST PDF z Xilinx pokazuje przykłady 1,2 i 3 procesowych FSM (dziwnie wystarczy tylko jeden z dwóch wariantów 2 procesu). Jest to po części kwestia Mealy-Moore'a i w dużej mierze osobiste preferencje lub uczenie się na pamięć. Ci, którzy mają analityczne skłonności, mogą zwrócić uwagę na implikacje elementów obecnych na listach wrażliwości. – user1155120

+0

@DavidKoontz Jaki byłby drugi wariant 2-procesowego FSM? Jeden proces dla rejestru państwowego i inny proces dla wszystkiego innego? – rick

+0

XST pdf to miłe odniesienie, dziękuję. @DavidKoontz –

Odpowiedz

1

staram się odpowiedzieć również jeśli jest to trudne, ponieważ każdy kod osoba jak on lubi i w zależności od stanu, w którym sprzęt ma pracować (częstotliwość, ścieżki zewnętrzne, ...).

w maszynie państwowej masz jakieś elementy:

  • wejść
  • wyjść
  • obecny stan
  • następny stan

Następny stan zależy od aktualnego stanu i dane wejściowe. Aby nie mieć pętli kombinacyjnych, należy pobrać następny stan w momencie wystąpienia sygnału zegarowego, aby stał się on stanem bieżącym. Potrzebujesz więc procesu VHDL, aby utworzyć flip-flop dla stanu. W tym procesie można umieścić całą logikę potrzebną do obliczenia następnego stanu. Jeśli twoje wyniki zależą tylko od stanu, nie potrzebujesz innych procesów.

Nie lubię stosować tego samego procesu logicznego, gdy logika nie jest bardzo łatwa (lubię, ale nie jest to obowiązkowe!), Więc zwykle dzielę FSM na dwa procesy: pierwszy bardzo łatwy Przetwórz próbkę następnego stanu, aby mieć bieżący, i jeden proces kombinacyjny, w którym obliczę wszystkie wyjścia i następny stan jako funkcję wejść i bieżącego stanu.

W tych samych przypadkach należy próbkować wyjść: na przykład, gdy dla problemu częstotliwości należy oddzielić ścieżki wewnętrzne od zewnętrznych lub gdy wyjścia mają duże obciążenie. W takim przypadku możesz dodać wszystkie niezbędne flip-flopy w pierwszym procesie, w którym próbujesz następnego stanu lub utworzysz jeden lub więcej dedykowanych procesów.

Ale możesz mieć także wiele wariantów jako liczbę procesów: Pracowałem w kodzie, gdzie każdy sygnał jest obliczany w dedykowanym procesie, więc wynikowa maszyna stanowa miała proces 20/30.