Remove emulator_generate and merge into emulator_tick
This commit is contained in:
@@ -5,30 +5,39 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
extern "C" void emulator_init_rs(int num_lanes);
|
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,
|
extern "C" void emulator_tick_rs(uint8_t *vec_a_ready, uint8_t *vec_a_valid,
|
||||||
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,
|
|
||||||
long long *vec_a_data,
|
|
||||||
uint8_t *vec_d_ready, uint8_t inflight,
|
|
||||||
uint8_t *finished);
|
|
||||||
|
|
||||||
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,
|
|
||||||
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,
|
|
||||||
long long *vec_a_address,
|
long long *vec_a_address,
|
||||||
uint8_t *vec_a_is_store, int *vec_a_size,
|
uint8_t *vec_a_is_store, int *vec_a_size,
|
||||||
long long *vec_a_data, uint8_t *vec_d_ready,
|
long long *vec_a_data, uint8_t *vec_d_ready,
|
||||||
uint8_t inflight, uint8_t *finished) {
|
uint8_t *vec_d_valid, uint8_t *vec_d_is_store,
|
||||||
emulator_generate_rs(vec_a_ready, vec_a_valid, vec_a_address, vec_a_is_store,
|
int *vec_d_size, long long *vec_d_data,
|
||||||
vec_a_size, vec_a_data, vec_d_ready, inflight, finished);
|
uint8_t inflight, uint8_t *finished);
|
||||||
|
// 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,
|
||||||
|
// long long *vec_a_data,
|
||||||
|
// uint8_t *vec_d_ready, uint8_t inflight,
|
||||||
|
// uint8_t *finished);
|
||||||
|
|
||||||
|
extern "C" void emulator_init(int num_lanes) { emulator_init_rs(num_lanes); }
|
||||||
|
|
||||||
|
extern "C" void emulator_tick(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, long long *vec_a_data,
|
||||||
|
uint8_t *vec_d_ready, uint8_t *vec_d_valid,
|
||||||
|
uint8_t *vec_d_is_store, int *vec_d_size,
|
||||||
|
long long *vec_d_data, uint8_t inflight,
|
||||||
|
uint8_t *finished) {
|
||||||
|
emulator_tick_rs(vec_a_ready, vec_a_valid, vec_a_address, vec_a_is_store,
|
||||||
|
vec_a_size, vec_a_data, vec_d_ready, vec_d_valid,
|
||||||
|
vec_d_is_store, vec_d_size, vec_d_data, inflight, finished);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// extern "C" void emulator_generate(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,
|
||||||
|
// long long *vec_a_data, uint8_t *vec_d_ready,
|
||||||
|
// uint8_t inflight, uint8_t *finished) {
|
||||||
|
// emulator_generate_rs(vec_a_ready, vec_a_valid, vec_a_address, vec_a_is_store,
|
||||||
|
// vec_a_size, vec_a_data, vec_d_ready, inflight, finished);
|
||||||
|
// }
|
||||||
|
|||||||
@@ -9,15 +9,6 @@ import "DPI-C" function void emulator_init(
|
|||||||
// (2) C function declaration
|
// (2) C function declaration
|
||||||
// (3) DPI function calls inside initial/always blocks
|
// (3) DPI function calls inside initial/always blocks
|
||||||
import "DPI-C" function void emulator_tick
|
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 longint vec_d_data[`MAX_NUM_LANES]
|
|
||||||
);
|
|
||||||
|
|
||||||
import "DPI-C" function void emulator_generate
|
|
||||||
(
|
(
|
||||||
input bit vec_a_ready[`MAX_NUM_LANES],
|
input bit vec_a_ready[`MAX_NUM_LANES],
|
||||||
output bit vec_a_valid[`MAX_NUM_LANES],
|
output bit vec_a_valid[`MAX_NUM_LANES],
|
||||||
@@ -25,7 +16,12 @@ import "DPI-C" function void emulator_generate
|
|||||||
output bit vec_a_is_store[`MAX_NUM_LANES],
|
output bit vec_a_is_store[`MAX_NUM_LANES],
|
||||||
output int vec_a_size[`MAX_NUM_LANES],
|
output int vec_a_size[`MAX_NUM_LANES],
|
||||||
output longint vec_a_data[`MAX_NUM_LANES],
|
output longint vec_a_data[`MAX_NUM_LANES],
|
||||||
|
|
||||||
output bit vec_d_ready[`MAX_NUM_LANES],
|
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 longint vec_d_data[`MAX_NUM_LANES],
|
||||||
|
|
||||||
input bit inflight,
|
input bit inflight,
|
||||||
output bit finished
|
output bit finished
|
||||||
@@ -95,6 +91,8 @@ module SimEmulator #(parameter NUM_LANES = 4) (
|
|||||||
emulator_init(NUM_LANES);
|
emulator_init(NUM_LANES);
|
||||||
end
|
end
|
||||||
|
|
||||||
|
// negedge might make it easier to view waveform since DPI changes are
|
||||||
|
// instant and make it look like they happen before the clockedge
|
||||||
always @(posedge clock) begin
|
always @(posedge clock) begin
|
||||||
if (reset) begin
|
if (reset) begin
|
||||||
for (integer tid = 0; tid < NUM_LANES; tid = tid + 1) begin
|
for (integer tid = 0; tid < NUM_LANES; tid = tid + 1) begin
|
||||||
@@ -107,14 +105,19 @@ module SimEmulator #(parameter NUM_LANES = 4) (
|
|||||||
end
|
end
|
||||||
__in_finished = 1'b0;
|
__in_finished = 1'b0;
|
||||||
end else begin
|
end else begin
|
||||||
emulator_generate(
|
emulator_tick(
|
||||||
__out_a_ready,
|
__out_a_ready,
|
||||||
__in_a_valid,
|
__in_a_valid,
|
||||||
__in_a_address,
|
__in_a_address,
|
||||||
__in_a_is_store,
|
__in_a_is_store,
|
||||||
__in_a_size,
|
__in_a_size,
|
||||||
__in_a_data,
|
__in_a_data,
|
||||||
|
|
||||||
__in_d_ready,
|
__in_d_ready,
|
||||||
|
__out_d_valid,
|
||||||
|
__out_d_is_store,
|
||||||
|
__out_d_size,
|
||||||
|
__out_d_data,
|
||||||
|
|
||||||
__out_inflight,
|
__out_inflight,
|
||||||
__in_finished
|
__in_finished
|
||||||
@@ -125,19 +128,4 @@ module SimEmulator #(parameter NUM_LANES = 4) (
|
|||||||
// end
|
// end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
// negedge is important here; the DPI logic is essentially functioning as
|
|
||||||
// a combinational logic, so we want to reflect the signal change from DPI
|
|
||||||
// at the *current* cycle, not the next.
|
|
||||||
always @(negedge clock) begin
|
|
||||||
if (!reset) begin
|
|
||||||
emulator_tick(
|
|
||||||
__in_d_ready,
|
|
||||||
__out_d_valid,
|
|
||||||
__out_d_is_store,
|
|
||||||
__out_d_size,
|
|
||||||
__out_d_data
|
|
||||||
);
|
|
||||||
end
|
|
||||||
end
|
|
||||||
endmodule
|
endmodule
|
||||||
|
|||||||
Reference in New Issue
Block a user