Analizuję kod verilog i znalazłem coś podobnego
wire z = |a & b;
podczas symulacji kod zachowuje się tak samo
wire z = a & b;
więc zastanawiałem się, jakie jest znaczenie |
symbolu (fajki)? Czy ma to wpływ na symulację / syntezę?
Jest to nieco mądry operator redukcji . |a & b
oznacza, że zastosujesz logiczne OR do wszystkich bitów a
(tworząc pojedynczy bit), a następnie wykonasz logiczne AND tego bitu i b
. |a
nie ma wpływu, gdy a
jest pojedynczym bitem.
Niemniej jednak dość często obserwuje się bitową redukcję wartości pojedynczych bitów. Jednym typowym przypadkiem jest automatycznie generowany kod, w którym faktyczna szerokość a
może zależeć od konfiguracji. Inną możliwością jest to, że jest to starszy kod, w którym a
kiedyś było kilka bitów. Gdy a
stał się wartością jednobitową, linia ta była technicznie poprawna, więc pozostawiono niepotrzebnego operatora redukcji.