FlyingDutch Napisano Styczeń 13, 2018 Udostępnij Napisano Styczeń 13, 2018 Cześć, czy mógłby ktoś wyjaśnić mi różnice pomiędzy wire i reg użytych do opisów portów I/O w modułach Verilog. Czytałem o tym temacie już trochę, ale nadal wiele kwestii jest dla mnie niejasnych. Pozdrawiam Cytuj Link do komentarza Share on other sites More sharing options...
JTyburski Styczeń 13, 2018 Udostępnij Styczeń 13, 2018 Najprościej - "wire" to kabel, a "reg" to po prostu "rejestr" - innymi słowy pierwsze jest przeznaczone do niepamięciowego przekazywania czy też przechowywania w sobie wartości sygnałów (można to potraktować jako ścieżki łączące poszczególne bramki czy w ogólności elementy cyfrowe), drugie natomiast "przechowuje" niczym pamięć wartości sygnałów (można to z kolei potraktować jako swoisty rejestr z przerzutników D, które będą miały na wyjściu dane wartości dopóki nie przyjdzie zbocze zegara i tego stanu nie zmieni). Tym samym pierwszy nadaje się tylko do opisu logiki kombinacyjnej, a drugi do sekwencyjnej (choć też i do kombinacyjnej, jako że w przeróżnych opisach "reg" jest sprowadzany do "wire" i w efekcie po prostu jest zachowanie jak właśnie dla "wire"). Stąd też utarł się w Verilogu schemat taki, że: "wire" do logiki kombinacyjnej, "reg" zarówno do logiki kombinacyjnej jak i sekwencyjnej. I tak też to rozumuj (w praktyce tak właśnie się to przydaje). Ale to w ogólności oczywiście jest. W przypadku portów I/O to chodzi o takie swoiste podejście co przyjęli w tym języku - mianowicie: 1. Na wejściach danego modułu (takiego najgłówniejszego tak jak w VHDL-u) wartości nie są pamiętane (tak jak w praktyce - dane napięcie dostarczasz, a nie jeszcze zmuszasz, aby było pamiętane przez układ na wejściu) - a skoro tak to wejściach są wyłącznie "wire" 2. Na wyjściach tego samego modułu wartości mogą, ale nie muszą być pamiętane (bo na takim wyjściu może być jakaś bramka, ale też może być właśnie rejestr) - stąd na wyjściach może być albo "wire", albo "reg" 3. Oczywiście ten sam moduł może składać się wewnątrz z wielu podmodułów naraz - ale też może zawierać obok tego funkcjonalność opisaną kodem (to tak jak w VHDL-u, że piszesz kod realizujący daną funkcjonalność, ale też przy tym wstawiasz komponenty, które są opisane innymi plikami i też realizują jakąś tam swoją funkcjonalność - i tak samo tu) - tylko jest tutaj zagwozdka taka, że w Verilogu są bloki kodów (tj. "always" i "initial" czy też w ogolności bloki "begin - end" - i każdy z bloków może sobą prezentować albo logikę sekwnecyjną albo kombinacyjną po prostu (może być i mieszana, ale liczy się to co jest na wyjściu) - i aby zachować kompatybilność jeśli chodzi o obydwie rzeczy, to przyjęte jest, że podmoduł może pamiętać wartość na wejściu (bo dany blok może np: być właśnie rejestrem, a nie koniecznie jakimś kombinacyjnym opisem), ale zarazem na wyjściu może być tylko "wire" tj. podmoduł nie pamięta co ma na wyjściu (a to po to, aby z kolei dopasować się do kombinacyjnego opisu w danym innym bloku tego samego modułu, bo z kolei on nie musi być wyłącznie sekwencyjny). Poza tym też chodzi o uproszczenie opisu (w ogólności podmoduł to jakiś komponent nie - np: bramka - a skoro tka to najłatwiej po prostu przyjąć, że robimy jak w życiu, czyli łączymy dany podmoduł z innym dosłownie kablem - a skoro tak to przyjmujemy "wire" i już - w końcu nie łączymy ich koniecznie "rejestrem", a tym samym "reg" odpada - i tyle 🙂 ) [ Dodano: 13-01-2018, 13:03 ] Tu przy okazji wyjaśnienie tego wszystkiego (a właściwie podsumowanie tego co powiedziałem):, ale z poziomu już samego języka: https://inst.eecs.berkeley.edu/~cs150/Documents/Nets.pdf [ Dodano: 13-01-2018, 13:32 ] I jeszcze jedna sprawa - Verilog bardziej zmusza do dosłownego, sprzętowego myślenia na poziomie bramek i rejestrów i prozucenia całkowicie programistycznego myślenia ala język C czy Java - serio - takie doświadczenia i praktyka! 😃 1 Cytuj Link do komentarza Share on other sites More sharing options...
FlyingDutch Styczeń 13, 2018 Autor tematu Udostępnij Styczeń 13, 2018 ... [ Dodano: 13-01-2018, 13:32 ] I jeszcze jedna sprawa - Verilog bardziej zmusza do dosłownego, sprzętowego myślenia na poziomie bramek i rejestrów i prozucenia całkowicie programistycznego myślenia ala język C czy Java - serio - takie doświadczenia i praktyka! 😃 Cześć Jakub, dużo mi pomogłeś tym opisem, tak jak mówiłem nie wszystko było dla mnie jasne. To, że Verilog bardziej zmusza do myślenia "sprzętowego" to już zdążyłem zauważyć 😉 Pozdrawiam Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Dołącz do dyskusji, napisz odpowiedź!
Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!