vecadd bug fixing + ebreak for termination

This commit is contained in:
fares
2019-11-15 14:18:45 -05:00
parent cb30a71deb
commit 19dba43849
13 changed files with 198095 additions and 574679 deletions

View File

@@ -203,7 +203,7 @@ void Warp::step() {
D(3, "Register state:");
for (unsigned i = 0; i < reg[0].size(); ++i) {
D_RAW(" %r" << setfill(' ') << setw(2) << dec << i << ':');
for (unsigned j = 0; j < reg.size(); ++j)
for (unsigned j = 0; j < (this->activeThreads); ++j)
D_RAW(' ' << setfill('0') << setw(8) << hex << reg[j][i] << setfill(' ') << ' ');
D_RAW('(' << shadowReg[i] << ')' << endl);
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -8,7 +8,9 @@ module VX_decode(
// Outputs
VX_frE_to_bckE_req_inter VX_frE_to_bckE_req,
VX_wstall_inter VX_wstall,
VX_join_inter VX_join
VX_join_inter VX_join,
output wire terminate_sim
);
@@ -224,7 +226,7 @@ module VX_decode(
wire ebreak = (curr_opcode == `SYS_INST) && (jal_sys_jal && (|in_valid));
assign VX_frE_to_bckE_req.ebreak = ebreak;
wire out_ebreak = ebreak;
assign terminate_sim = is_e_inst;
// CSR

View File

@@ -31,6 +31,11 @@ wire total_freeze = schedule_delay;
// wire real_fetch_ebreak;
/* verilator lint_on UNUSED */
wire vortex_ebreak;
wire terminate_sim;
assign fetch_ebreak = vortex_ebreak || terminate_sim;
VX_wstall_inter VX_wstall();
VX_join_inter VX_join();
@@ -47,7 +52,7 @@ VX_fetch vx_fetch(
.icache_request (icache_request_fe),
.VX_branch_rsp (VX_branch_rsp),
.out_ebreak (fetch_ebreak), // fetch_ebreak
.out_ebreak (vortex_ebreak), // fetch_ebreak
.fe_inst_meta_fd (fe_inst_meta_fd)
);
@@ -64,7 +69,8 @@ VX_decode vx_decode(
.fd_inst_meta_de (fd_inst_meta_de),
.VX_frE_to_bckE_req(VX_frE_to_bckE_req),
.VX_wstall (VX_wstall),
.VX_join (VX_join)
.VX_join (VX_join),
.terminate_sim (terminate_sim)
);
wire no_br_stall = 0;

View File

@@ -88,6 +88,7 @@ reg out_ebreak;
initial begin
// $fdumpfile("vortex1.vcd");
load_file("../../runtime/mains/simple/vx_simple_main.hex");
// load_file("../../emulator/riscv_tests/rv32ui-p-add.hex");
//load_file("../../kernel/vortex_test.hex");
$dumpvars(0, vortex_tb);
reset = 1;

View File

@@ -14,7 +14,7 @@ VX_IO = ../../io/vx_io.s ../../io/vx_io.c
VX_API = ../../vx_api/vx_api.c
VX_TEST = ../../tests/tests.c
VX_FIO = ../../fileio/fileio.s
LIBS = ./libs/libvecadd.a ./libs/libOpenCL.a ~/dev/riscv-gnu-toolchain/drops/riscv32-unknown-elf/lib/libc.a ~/dev/riscv-gnu-toolchain/drops/riscv32-unknown-elf/lib/libstdc++.a -static-libgcc -lgcc
LIBS = ./libs/libvecadd.a /home/fares/dev/pocl/drops_riscv_rt/lib/static/libOpenCL.a ~/dev/riscv-gnu-toolchain/drops/riscv32-unknown-elf/lib/libc.a ~/dev/riscv-gnu-toolchain/drops/riscv32-unknown-elf/lib/libstdc++.a -static-libgcc -lgcc
VX_MAIN = vx_pocl_main

View File

@@ -55,8 +55,17 @@ static int g_num_kernels = 0;
static kernel_info_t g_kernels [MAX_KERNELS];
int _pocl_register_kernel(const char* name, const void* pfn, uint32_t num_args, uint32_t num_locals, const uint8_t* arg_types, const uint32_t* local_sizes) {
printf("******** _pocl_register_kernel\n");
printf("Name to register: %s\n", name);
printf("PTR of name: %x\n", name);
if (g_num_kernels == MAX_KERNELS)
return -1;
{
printf("ERROR: REACHED MAX KERNELS\n");
return -1;
}
printf("Going to register at index: %d\n", g_num_kernels);
kernel_info_t* kernel = g_kernels + g_num_kernels++;
kernel->name = name;
kernel->pfn = pfn;
@@ -64,14 +73,23 @@ int _pocl_register_kernel(const char* name, const void* pfn, uint32_t num_args,
kernel->num_locals = num_locals;
kernel->arg_types = arg_types;
kernel->local_sizes = local_sizes;
printf("New kernel name: %s\n", kernel->name);
return 0;
}
int _pocl_query_kernel(const char* name, const void** p_pfn, uint32_t* p_num_args, uint32_t* p_num_locals, const uint8_t** p_arg_types, const uint32_t** p_local_sizes) {
printf("********* Inside _pocl_query_kernel\n");
printf("name: %s\n", name);
printf("g_num_kernels: %d\n", g_num_kernels);
for (int i = 0; i < g_num_kernels; ++i) {
printf("Currently quering index %d\n", i);
kernel_info_t* kernel = g_kernels + i;
if (strcmp(kernel->name, name) != 0)
{
printf("STR CMP failed! kernel->name = %s \t name: %s\n", kernel->name, name);
continue;
}
printf("!!!!!!!!!STR CMP PASSED\n");
if (p_pfn) *p_pfn = kernel->pfn;
if (p_num_args) *p_num_args = kernel->num_args;
if (p_num_locals) *p_num_locals = kernel->num_locals;

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff