Ogólna zasada wspomniana we wszystkich książkach, które dotychczas przeczytałem, polega na tym, że musisz używać blokad zawsze w blokach, które są napędzane przez podnoszenie lub opadanie zegara. Wręcz przeciwnie, do opisu logiki kombinatorycznej należy stosować przypisania blokujące. Ta zasada ma dla mnie sens, a autorzy przykładów dokładnie ją stosują.zawsze blok @ * z pojedynczym niepustującym przydziałem - dobry, zły lub nieistotny?
Jednak dostrzeżone następujący fragment Verilogu jednego kodu produkcyjnego:
always @* begin
in_ready <= out_ready || ~out_valid;
end
Należy zauważyć, że nie blokuje zadanie <=
jest używany. Nie sądzę, żeby to miało jakikolwiek wpływ na tę sprawę, ponieważ nie ma wielu przydziałów. Jednak nie mogę znaleźć żadnego wyjaśnienia tego. Pytanie brzmi: czy to robi, czy nie ma znaczenia, zarówno w zakresie danego bloku zawsze i jako część większego projektu?
Dziękuję. Tak, twój przykład kodu pokazuje zdecydowanie nie tylko złą praktykę, ale tak naprawdę nie zadziała tak, jak zamierzano, chyba że naprawdę miał być taki, co nie ma większego sensu. Zastanawiam się, jaka była opinia na ten temat. Właściwie masz rację. Potwierdziłem to samo jako część większego pytania na temat stosu EE (electronics.stackexchange.com/questions/34287/flip-flop-vs-combinatorial-description-what-exactly-is-the-difference/). Dziękuję za pomoc! –
Dziękuję za opinię, otrzymałem 2 komentarze na głos, ale nie ma komentarzy, dlaczego. – Morgan