Add D data to DPI interface
This commit is contained in:
@@ -6,7 +6,8 @@
|
||||
|
||||
extern "C" void emulator_init_rs(int num_lanes);
|
||||
extern "C" void emulator_tick_rs(uint8_t *vec_d_ready, uint8_t *vec_d_valid,
|
||||
uint8_t *vec_d_is_store, int *vec_d_size);
|
||||
uint8_t *vec_d_is_store, int *vec_d_size,
|
||||
long long *vec_d_data);
|
||||
extern "C" void emulator_generate_rs(uint8_t *vec_a_ready, uint8_t *vec_a_valid,
|
||||
long long *vec_a_address,
|
||||
uint8_t *vec_a_is_store, int *vec_a_size,
|
||||
@@ -17,8 +18,10 @@ extern "C" void emulator_generate_rs(uint8_t *vec_a_ready, uint8_t *vec_a_valid,
|
||||
extern "C" void emulator_init(int num_lanes) { emulator_init_rs(num_lanes); }
|
||||
|
||||
extern "C" void emulator_tick(uint8_t *vec_d_ready, uint8_t *vec_d_valid,
|
||||
uint8_t *vec_d_is_store, int *vec_d_size) {
|
||||
emulator_tick_rs(vec_d_ready, vec_d_valid, vec_d_is_store, vec_d_size);
|
||||
uint8_t *vec_d_is_store, int *vec_d_size,
|
||||
long long *vec_d_data) {
|
||||
emulator_tick_rs(vec_d_ready, vec_d_valid, vec_d_is_store, vec_d_size,
|
||||
vec_d_data);
|
||||
}
|
||||
|
||||
extern "C" void emulator_generate(uint8_t *vec_a_ready, uint8_t *vec_a_valid,
|
||||
|
||||
@@ -13,7 +13,8 @@ import "DPI-C" function void emulator_tick
|
||||
output bit vec_d_ready[`MAX_NUM_LANES],
|
||||
input bit vec_d_valid[`MAX_NUM_LANES],
|
||||
input bit vec_d_is_store[`MAX_NUM_LANES],
|
||||
input int vec_d_size[`MAX_NUM_LANES]
|
||||
input int vec_d_size[`MAX_NUM_LANES],
|
||||
input longint vec_d_data[`MAX_NUM_LANES]
|
||||
);
|
||||
|
||||
import "DPI-C" function void emulator_generate
|
||||
@@ -45,8 +46,8 @@ module SimEmulator #(parameter NUM_LANES = 4) (
|
||||
input [NUM_LANES-1:0] d_valid,
|
||||
input [NUM_LANES-1:0] d_is_store,
|
||||
input [`SIMMEM_LOGSIZE_WIDTH*NUM_LANES-1:0] d_size,
|
||||
input [`SIMMEM_DATA_WIDTH*NUM_LANES-1:0] d_data,
|
||||
// TODO: d_mask
|
||||
// TODO: d_data
|
||||
|
||||
input inflight,
|
||||
output finished
|
||||
@@ -64,6 +65,7 @@ module SimEmulator #(parameter NUM_LANES = 4) (
|
||||
bit __out_d_valid [0:`MAX_NUM_LANES-1];
|
||||
bit __out_d_is_store [0:`MAX_NUM_LANES-1];
|
||||
int __out_d_size [0:`MAX_NUM_LANES-1];
|
||||
longint __out_d_data [0:`MAX_NUM_LANES-1];
|
||||
bit __out_inflight;
|
||||
bit __in_finished;
|
||||
|
||||
@@ -83,6 +85,7 @@ module SimEmulator #(parameter NUM_LANES = 4) (
|
||||
assign __out_d_valid[g] = d_valid[g];
|
||||
assign __out_d_is_store[g] = d_is_store[g];
|
||||
assign __out_d_size[g] = d_size[`SIMMEM_LOGSIZE_WIDTH*g +: `SIMMEM_LOGSIZE_WIDTH];
|
||||
assign __out_d_data[g] = d_data[`SIMMEM_DATA_WIDTH*g +: `SIMMEM_DATA_WIDTH];
|
||||
end
|
||||
assign __out_inflight = inflight;
|
||||
endgenerate
|
||||
@@ -132,7 +135,8 @@ module SimEmulator #(parameter NUM_LANES = 4) (
|
||||
__in_d_ready,
|
||||
__out_d_valid,
|
||||
__out_d_is_store,
|
||||
__out_d_size
|
||||
__out_d_size,
|
||||
__out_d_data
|
||||
);
|
||||
end
|
||||
end
|
||||
|
||||
@@ -99,6 +99,7 @@ class EmulatorImp(
|
||||
sim.io.d.valid := VecInit(laneResps.map(_.valid)).asUInt
|
||||
sim.io.d.is_store := VecInit(laneResps.map(_.bits.is_store)).asUInt
|
||||
sim.io.d.size := VecInit(laneResps.map(_.bits.size)).asUInt
|
||||
sim.io.d.data := VecInit(laneResps.map(_.bits.data)).asUInt
|
||||
|
||||
val sourceGens = Seq.fill(numLanes)(
|
||||
Module(
|
||||
@@ -234,6 +235,7 @@ class SimEmulator(numLanes: Int)
|
||||
val valid = Input(UInt(numLanes.W))
|
||||
val is_store = Input(UInt(numLanes.W))
|
||||
val size = Input(UInt((sizeW * numLanes).W))
|
||||
val data = Input(UInt((dataW * numLanes).W))
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user