verilog schnippsel

OP #2531944
Lesenswert?
• ▲
▼
Hallo,

kann jmd was mit dem Code anfangen?
1
wire     [3:0]    rx_data;
2

3
assign tx_enable = (
4
  ((mode == `ETH_SEND) | (mode == `ETH_PAUSE)) & 
5
  ((state != `ETH_CLK_DLY) & (state != `ETH_IDLE)));
6

7
assign buffer_next = {  
8
  buffer[19:16],
9
  buffer[31:28],
10
  buffer[11:8],
11
  buffer[23:20],
12
  buffer[3:0],
13
  buffer[15:12],
14
  (mode != `ETH_PAUSE) ? rx_data : 4'h0,
15
  buffer[7:4] };

Was macht assign buffer_next?
Wofür steht rx_data : 4'h0?
#2532679
Lesenswert?
• ▲
▼
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren