Set up simple DPI for trace-driven testing

This commit is contained in:
Hansung Kim
2023-02-24 17:46:40 -08:00
parent 5bf8bb8217
commit 80e4b5c734
3 changed files with 126 additions and 4 deletions

View File

@@ -0,0 +1,22 @@
#include <vpi_user.h>
#include <svdpi.h>
#include <stdio.h>
#include <string.h>
extern "C" void memtrace_init(
const char *filename)
{
printf("memtrace_init: filename=[%s]\n", filename);
}
extern "C" void memtrace_tick(
unsigned char *trace_read_valid,
unsigned char trace_read_ready,
char *trace_read_bits)
{
printf("tick!\n");
*trace_read_valid = 1;
*trace_read_bits = 42;
return;
}

View File

@@ -0,0 +1,58 @@
`define DATA_WIDTH 8
import "DPI-C" function void memtrace_init(
input string filename
);
import "DPI-C" function void memtrace_tick
(
output bit trace_read_valid,
input bit trace_read_ready,
output byte trace_read_bits
);
module SimMemTrace (
input clock,
input reset,
output trace_read_valid,
input trace_read_ready,
output [`DATA_WIDTH-1:0] trace_read_bits
);
bit __in_valid;
byte __in_bits;
string __uartlog;
int __uartno;
initial begin
$value$plusargs("uartlog=%s", __uartlog);
memtrace_init(__uartlog);
end
reg __in_valid_reg;
reg [`DATA_WIDTH-1:0] __in_bits_reg;
assign trace_read_valid = __in_valid_reg;
assign trace_read_bits = __in_bits_reg;
// Evaluate the signals on the positive edge
always @(posedge clock) begin
if (reset) begin
__in_valid = 0;
__in_valid_reg <= 0;
__in_bits_reg <= 0;
end else begin
memtrace_tick(
__in_valid,
trace_read_ready,
__in_bits
);
__in_valid_reg <= __in_valid;
__in_bits_reg <= __in_bits;
end
end
endmodule