Rozważ wyrażenie takie jak:
assign x = func(A) ^ func(B);
gdzie wyjście func ma szerokość 32 bitów, a x jest drutem o długości 16 bitów. Chcę przypisać tylko najniższe 16 bitów wynikowego xor.
Wiem, że powyższy kod już to robi, ale generuje również ostrzeżenie. „Oczywiste” podejście nie działa:
assign x = (func(A) ^ func(B))[15:0]; // error: '[' is unexpected
W twoim przykładzie domyślnie obcinasz bity.
Wyraźne obcięcie może często usunąć ostrzeżenia w symulacji / kłaczkach / syntezie.
Jednym ze sposobów na zrobienie tego w linii jest użycie operatora rzutowania, np .:
To podejście może mieć sens, jeśli z kontekstu wynika, że wszystkie upuszczane bity to 0.
Jeśli niektóre bity mogą być niezerowe, sugerowałbym używanie sieci pośredniej, takiej jak @dwikle sugerowanej w poprzedniej odpowiedzi , ponieważ to wyjaśnia, że faktycznie wyrzucasz bity. Tutaj jest ponownie w celach informacyjnych.
źródło
Myślę, że może to pomóc w odliczaniu linii.
Nie jestem jednak pewien, czy dotyczy to przypisań.
źródło