Czy instrukcja q < = q; niezbędny?
Nie, nie jest, aw przypadku ASIC może faktycznie zwiększyć powierzchnię i zużycie energii. Nie jestem pewien, jak radzą sobie z tym nowoczesne układy FPGA. Podczas syntezy narzędzie zobaczy tę instrukcję i wymaga, aby q było aktualizowane na każdym dodatnim zboczu zegara. Bez tej ostatniej klauzuli else narzędzie może zaktualizować tylko q
, gdy tylko zostaną spełnione określone warunki.
W ASIC oznacza to, że narzędzie do syntezy może wstawić bramkę zegarową (o ile ma taką bibliotekę) zamiast mux. W przypadku pojedynczego DFF może to być faktycznie gorsze, ponieważ bramka zegarowa zwykle jest znacznie większa niż mux, ale jeśli q
ma 32 bity, to oszczędności mogą być bardzo znaczące. Nowoczesne narzędzia mogą automatycznie wykryć, czy liczba DFF używających udostępnionego zezwolenia spełnia określony próg, a następnie odpowiednio wybrać bramkę zegarową lub mux.
W tym przypadku narzędzie potrzebuje 3 muxes Dodatkowo, polecane trasy
always @(posedge CLK or negedge RESET)
if(~RESET)
COUNT <= 0;
else if(INC)
COUNT <= COUNT + 1;
else
COUNT <= COUNT;
Tutaj narzędzie wykorzystuje pojedynczą bramę zegara dla wszystkich DFFs
always @(posedge CLK or negedge RESET)
if(~RESET)
COUNT <= 0;
else if(INC)
COUNT <= COUNT + 1;
Images from here
Być może trzeba ustawić wyjścia w ramach _wszystkich okoliczności? – paxdiablo