diff --git a/sim/fabric_emu/fabric_emu.sv b/sim/fabric_emu/fabric_emu.sv index 1bab66101efefa6fb56e4ec5b9395134a9c04f5c..67aead08392231baaa4d9bed393b477aa097893c 100644 --- a/sim/fabric_emu/fabric_emu.sv +++ b/sim/fabric_emu/fabric_emu.sv @@ -417,6 +417,27 @@ module fabric_emu tx_queue.push(frame); endtask // send + task automatic send_raw(byte raw_data[]); + reg [`c_wrsw_ctrl_size - 1 : 0] ctrl_vec[0:2000]; + reg [15:0] data_vec[0:2000]; + int error, i; + + + for(i=0; i<(raw_data.size()+1) / 2; i++) + begin + ctrl_vec[i] = `c_wrsw_ctrl_payload; + data_vec[i][15:8] = raw_data[2*i]; + data_vec[i][7:0] = raw_data[2*i+1]; + + end + + + send_fabric(data_vec, ctrl_vec, ( raw_data.size() % 2) ? 1 : 0, i, i-1, error); + + endtask // send_raw + + + // Handles WRF packet sink input task automatic rx_process(); diff --git a/sim/fabric_emu/fabric_emu_defs.sv b/sim/fabric_emu/fabric_emu_defs.sv index b298f62d49798f0e1508911da87b5f7995a349b2..1acd0e5343121ba152304d12f873083c215b0b1d 100644 --- a/sim/fabric_emu/fabric_emu_defs.sv +++ b/sim/fabric_emu/fabric_emu_defs.sv @@ -26,7 +26,7 @@ typedef struct { bit[31:0] fcs; bit error; bit has_payload; - + bit has_raw; byte raw_data[]; } ether_frame_t;