Skip to content

Commit 053087c

Browse files
committed
fix(cmac-uvm): fix byte ordering
1 parent d8a135e commit 053087c

File tree

2 files changed

+9
-21
lines changed
  • comp/uvm/logic_vector_array_lbus
  • core/comp/eth/network_mod/uvm/tbench/cmac

2 files changed

+9
-21
lines changed

comp/uvm/logic_vector_array_lbus/monitor.sv

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -33,16 +33,9 @@ class monitor_logic_vector_array extends uvm_logic_vector_array::monitor #(8);
3333
ready_deassertion_counter = 0;
3434
endfunction
3535

36-
protected virtual function void save_segment_by_index(uvm_lbus::sequence_item item, int unsigned segment_index, bit full_segment = 0);
37-
logic [128-1 : 0] data = item.data[128*(segment_index+1)-1 -: 128];
38-
logic [4 -1 : 0] mty = (full_segment ? 0 : item.mty[4*(segment_index+1)-1 -: 4]);
39-
save_segment(data, mty);
40-
endfunction
41-
4236
protected virtual function void save_segment(logic [128-1 : 0] data, logic [4-1 : 0] mty = 0);
43-
int unsigned valid_byte_count = (128/8)-mty;
44-
45-
for (int unsigned i = 0; i < valid_byte_count; i++) begin
37+
for (int unsigned i = (128/8); i > mty; ) begin
38+
i--;
4639
bytes.push_back(data[8*(i+1)-1 -: 8]);
4740
end
4841
endfunction
@@ -80,11 +73,11 @@ class monitor_logic_vector_array extends uvm_logic_vector_array::monitor #(8);
8073

8174
if (!inside_frame) begin
8275
if (t.sop[i] === 1'b1 && t.eop[i] === 1'b1) begin
83-
save_segment_by_index(t, i);
76+
save_segment(t.data[128*(i+1)-1 -: 128], t.mty[4*(i+1)-1 -: 4]);
8477
end
8578
else if (t.sop[i] === 1'b1) begin
8679
inside_frame = 1;
87-
save_segment_by_index(t, i, 1);
80+
save_segment(t.data[128*(i+1)-1 -: 128], 0);
8881
end
8982
else begin
9083
assert(t.eop[i] !== 1'b1)
@@ -96,11 +89,11 @@ class monitor_logic_vector_array extends uvm_logic_vector_array::monitor #(8);
9689
else begin
9790
if (t.eop[i] === 1'b1) begin
9891
inside_frame = 0;
99-
save_segment_by_index(t, i);
92+
save_segment(t.data[128*(i+1)-1 -: 128], t.mty[4*(i+1)-1 -: 4]);
10093
send_packet();
10194
end
10295
else begin
103-
save_segment_by_index(t, i, 1);
96+
save_segment(t.data[128*(i+1)-1 -: 128], 0);
10497
end
10598

10699
assert(t.sop[i] !== 1'b1)

core/comp/eth/network_mod/uvm/tbench/cmac/dut.sv

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,6 @@ module DUT #(
128128
localparam int unsigned ETH_PORT_CHAN_LOCAL = ETH_PORT_CHAN[eth_it];
129129
initial assert(ETH_PORT_CHAN_LOCAL == 1);
130130

131-
wire logic [4*128-1 : 0] eth_rx_data;
132131
logic CLK_ETH_GEN = 1'b0;
133132

134133
always #(CLK_ETH_PERIOD[eth_it]/2) CLK_ETH_GEN = ~CLK_ETH_GEN;
@@ -139,7 +138,7 @@ module DUT #(
139138

140139
for (genvar slice = 0; slice < 4; slice++) begin
141140
initial begin
142-
force DUT_BASE_U.VHDL_DUT_U.eth_core_g[eth_it].network_mod_core_i.cmac_rx_lbus_data[slice] = {<<8{eth_tx[eth_it].DATA[128*(slice+1)-1 -: 128]}}; // Byte reordering
141+
force DUT_BASE_U.VHDL_DUT_U.eth_core_g[eth_it].network_mod_core_i.cmac_rx_lbus_data[slice] = eth_tx[eth_it].DATA[128*(slice+1)-1 -: 128]; // Byte reordering
143142
force DUT_BASE_U.VHDL_DUT_U.eth_core_g[eth_it].network_mod_core_i.cmac_rx_lbus_mty [slice] = eth_tx[eth_it].MTY[4*(slice+1)-1 -: 4];
144143
end
145144
end
@@ -157,19 +156,15 @@ module DUT #(
157156
// RX side //
158157
// ------- //
159158

160-
assign eth_rx_data = {>>{DUT_BASE_U.VHDL_DUT_U.eth_core_g[eth_it].network_mod_core_i.cmac_tx_lbus_data}};
161159
for (genvar segment = 0; segment < 4; segment++) begin
162-
wire logic [128-1 : 0] segment_data;
163-
164-
assign segment_data = eth_rx_data[128*(segment+1)-1 -: 128];
165-
assign eth_rx[eth_it].DATA[128*(segment+1)-1 -: 128] = {<<8{segment_data}}; // Byte reordering
160+
assign eth_rx[eth_it].DATA[128*(segment+1)-1 -: 128] = DUT_BASE_U.VHDL_DUT_U.eth_core_g[eth_it].network_mod_core_i.cmac_tx_lbus_data[segment]; // Byte reordering
161+
assign eth_rx[eth_it].MTY[4*(segment+1)-1 -: 4] = DUT_BASE_U.VHDL_DUT_U.eth_core_g[eth_it].network_mod_core_i.cmac_tx_lbus_mty[segment];
166162
end
167163

168164
assign eth_rx[eth_it].ENA = DUT_BASE_U.VHDL_DUT_U.eth_core_g[eth_it].network_mod_core_i.cmac_tx_lbus_ena;
169165
assign eth_rx[eth_it].SOP = DUT_BASE_U.VHDL_DUT_U.eth_core_g[eth_it].network_mod_core_i.cmac_tx_lbus_sop;
170166
assign eth_rx[eth_it].EOP = DUT_BASE_U.VHDL_DUT_U.eth_core_g[eth_it].network_mod_core_i.cmac_tx_lbus_eop;
171167
assign eth_rx[eth_it].ERR = DUT_BASE_U.VHDL_DUT_U.eth_core_g[eth_it].network_mod_core_i.cmac_tx_lbus_err;
172-
assign eth_rx[eth_it].MTY = {>>{DUT_BASE_U.VHDL_DUT_U.eth_core_g[eth_it].network_mod_core_i.cmac_tx_lbus_mty}};
173168

174169
initial force DUT_BASE_U.VHDL_DUT_U.eth_core_g[eth_it].network_mod_core_i.cmac_tx_lbus_rdy = eth_rx[eth_it].RDY;
175170

0 commit comments

Comments
 (0)