Dieses Konstrukt
assign buffer_next = {
buffer[19:16],
buffer[31:28],
buffer[11:8],
buffer[23:20],
buffer[3:0],
buffer[15:12],
(mode != `ETH_PAUSE) ? rx_data : 4'h0,
buffer[7:4] };
heißt auf Deutsch: Weise dem Vektor buffer_next die Aneinanderhängung
der Werte buffer[19 bis 16], [31 bis 28] ... [7 bis 4] zu. In der Summe
stehen auf der rechten Seite des Gleichheitszeichens 8 mal 4 Bit, also
ist anzunehmen, dass buffer_next ein 32 Bit breiter Vektor ist. Falls
buffer_next noch breiter ist, werden die oberen Stellen mit 0 gefüllt,
falls es schmaler ist, werden die oberen Stellen der rechten Seite
ignoriert.
Deine Frage "Werden alle buffer-Bereiche gleichzeitig mit rx_data
beschrieben?" muss also mit Nein beantwortet werden. Nur die Bits [7:4]
von buffer_next werden mit rd_data beschrieben, und auch das nur dann,
wenn mode != `ETH_PAUSE, ansonsten mit 0.