sdsoc trace

Roy Hsu
體驗人生 touch life~~
4 min readMay 7, 2020
Photo by Julien DI MAJO on Unsplash

_sds/

iprepo: 生成ip的repository

p0: 系統生成

reports: 報告

swstubs: sw codes

vhls: run hls

_sds/p0:

p0/sd_card:

boot.bif 內容:

boot sequence:

_sds/reports:

sds_xxx.jou: sds++ compile 過程:生成arraycopy.o

sds.jou: compile xxx.o , create block diagram, # Rewrite caller functions, # Compile caller rewrite file, # Create accelerator stub functions,

# Compile hardware access API functions
arm-linux-gnueabihf-gcc -I /home/roy/sdsoc/SDx/2019.1/target/aarch32-linux/include -D HLS_NO_XIL_FPO_LIB -I /home/roy/sdsoc/Vivado/2019.1/include -c /home/roy/workspace/array_copy/Debug/_sds/swstubs/portinfo.c
arm-linux-gnueabihf-g++ -I /home/roy/sdsoc/SDx/2019.1/target/aarch32-linux/include -D HLS_NO_XIL_FPO_LIB -I /home/roy/sdsoc/Vivado/2019.1/include -c /home/roy/workspace/array_copy/Debug/_sds/swstubs/cf_stub.c
arm-linux-gnueabihf-ar crs /home/roy/workspace/array_copy/Debug/_sds/swstubs/libxlnk_stub.a /home/roy/workspace/array_copy/Debug/_sds/swstubs/portinfo.o /home/roy/workspace/array_copy/Debug/_sds/swstubs/cf_stub.o
cd /home/roy/workspace/array_copy/Debug
cd /home/roy/workspace/array_copy/Debug/_sds/swstubs

# Compile accelerator stub functions
arm-linux-gnueabihf-g++ -c arraycopy.cpp -I/home/roy/workspace/array_copy/src -I/home/roy/workspace/array_copy/src -Wall -O0 -g -fmessage-length=0 -MMD -MP -D __SDSCC__ -I /home/roy/sdsoc/SDx/2019.1/target/aarch32-linux/include -D HLS_NO_XIL_FPO_LIB -I /home/roy/sdsoc/Vivado/2019.1/include -o arraycopy.o
arm-linux-gnueabihf-g++ -c arraycopy.cpp -I/home/roy/workspace/array_copy/src -I/home/roy/workspace/array_copy/src -Wall -O0 -g -fmessage-length=0 -MMD -MP -D __SDSCC__ -I /home/roy/sdsoc/SDx/2019.1/target/aarch32-linux/include -D HLS_NO_XIL_FPO_LIB -I /home/roy/sdsoc/Vivado/2019.1/include -o arraycopy.o
cd /home/roy/workspace/array_copy/Debug
cd /home/roy/workspace/array_copy/Debug/_sds/swstubs
arm-linux-gnueabihf-ar crs /home/roy/workspace/array_copy/Debug/_sds/swstubs/libarray_copy.a /home/roy/workspace/array_copy/Debug/_sds/swstubs/portinfo.o /home/roy/workspace/array_copy/Debug/_sds/swstubs/cf_stub.o /home/roy/workspace/array_copy/Debug/_sds/swstubs/arraycopy.o
cd /home/roy/workspace/array_copy/Debug

# Preliminary link application ELF
arm-linux-gnueabihf-g++ /home/roy/workspace/array_copy/Debug/_sds/swstubs/arraycopy.o -L/home/roy/workspace/array_copy/Debug/_sds/swstubs -Wl, — start-group -Wl, — end-group -Wl, — start-group -lpthread -L/home/roy/sdsoc/SDx/2019.1/target/aarch32-linux/lib -lsds_lib -lxlnk_stub -Wl, — end-group -o /home/roy/workspace/array_copy/Debug/_sds/swstubs/array_copy.elf
arm-linux-gnueabihf-objcopy -R .xdinfo -R .xddata -R .xdasm -R .xdfcnmap -R .xdhlscore -R .xdif -R .xdparams -R .xdcore -R .xdrepo -R .xdsdata -R .xdpp -R .xdrtlx /home/roy/workspace/array_copy/Debug/_sds/swstubs/array_copy.elf
cd /home/roy/workspace/array_copy/Debug

# Enable generation of hardware programming files
# Enable generation of boot files
# Calling VPL

# Compile hardware access API functions
arm-linux-gnueabihf-gcc -I /home/roy/sdsoc/SDx/2019.1/target/aarch32-linux/include -D HLS_NO_XIL_FPO_LIB -I /home/roy/sdsoc/Vivado/2019.1/include -c /home/roy/workspace/array_copy/Debug/_sds/swstubs/portinfo.c
arm-linux-gnueabihf-g++ -I /home/roy/sdsoc/SDx/2019.1/target/aarch32-linux/include -D HLS_NO_XIL_FPO_LIB -I /home/roy/sdsoc/Vivado/2019.1/include -c /home/roy/workspace/array_copy/Debug/_sds/swstubs/cf_stub.c
arm-linux-gnueabihf-ar crs /home/roy/workspace/array_copy/Debug/_sds/swstubs/libxlnk_stub.a /home/roy/workspace/array_copy/Debug/_sds/swstubs/portinfo.o /home/roy/workspace/array_copy/Debug/_sds/swstubs/cf_stub.o
cd /home/roy/workspace/array_copy/Debug
cd /home/roy/workspace/array_copy/Debug/_sds/swstubs
arm-linux-gnueabihf-ar crs /home/roy/workspace/array_copy/Debug/_sds/swstubs/libarray_copy.a /home/roy/workspace/array_copy/Debug/_sds/swstubs/portinfo.o /home/roy/workspace/array_copy/Debug/_sds/swstubs/cf_stub.o /home/roy/workspace/array_copy/Debug/_sds/swstubs/arraycopy.o
cd /home/roy/workspace/array_copy/Debug
# Link application ELF file
arm-linux-gnueabihf-g++ /home/roy/workspace/array_copy/Debug/_sds/swstubs/arraycopy.o -L/home/roy/workspace/array_copy/Debug/_sds/swstubs -Wl, — start-group -Wl, — end-group -Wl, — start-group -lpthread -L/home/roy/sdsoc/SDx/2019.1/target/aarch32-linux/lib -lsds_lib -lxlnk_stub -Wl, — end-group -o /home/roy/workspace/array_copy/Debug/_sds/swstubs/array_copy.elf
arm-linux-gnueabihf-objcopy -R .xdinfo -R .xddata -R .xdasm -R .xdfcnmap -R .xdhlscore -R .xdif -R .xdparams -R .xdcore -R .xdrepo -R .xdsdata -R .xdpp -R .xdrtlx /home/roy/workspace/array_copy/Debug/_sds/swstubs/array_copy.elf

sds/swstubs: array_copy.elf 組成:

arraycopy.o + libxlnk_stub.a + libsds_lib.so

// libxlnk_stub.a: portinfo.c, cf_stub.c

codes trace:

void p_0_cf_framework_open(void) __attribute__((constructor));// 呼main之前會先執行
void p_0_cf_framework_close(void) __attribute__((destructor));
void p_0_cf_framework_open(void)// portinfo.c
{
if (xlnkOpen()) {
cf_context_init();
xlnkCounterMap(666666687);
pfm_hook_init();
sds_trace_setup(0x0);
}
p_0_init_pl();
}{
sysport_open(&_sds_sysportp_0_ps7_S_AXI_ACP);
fast_dma_open(&p_0_dm_1); //dma struct
fast_dma_open(&p_0_dm_2);
fast_dma_open(&p_0_dm_3);
fast_dma_open(&p_0_dm_4);
axi_lite_open(&p_0_hwinst_arraycopy_1_cmd_arraycopy_info); //axi info
axi_lite_open(&p_0_hwinst_arraycopy_1_ap_return_info);
axi_lite_open(&p_0_hwinst_arraycopy2_1_cmd_arraycopy2_info);
axi_lite_open(&p_0_hwinst_arraycopy2_1_ap_return_info);
_sds_p_0_arraycopy_1.arg_dm_id[0] = p_0_hwinst_arraycopy_1_cmd_arraycopy_info.dm_id;
_sds_p_0_arraycopy_1.arg_dm_id[1] = p_0_dm_2.dm_id;
_sds_p_0_arraycopy_1.arg_dm_id[2] = p_0_dm_4.dm_id;
_sds_p_0_arraycopy_1.arg_dm_id[3] = p_0_hwinst_arraycopy_1_ap_return_info.dm_id;
_sds_p_0_arraycopy_1.arg_dm_id_count = 4;
accel_open(&_sds_p_0_arraycopy_1); //ip info
_sds_p_0_arraycopy2_1.arg_dm_id[0] = p_0_hwinst_arraycopy2_1_cmd_arraycopy2_info.dm_id;
_sds_p_0_arraycopy2_1.arg_dm_id[1] = p_0_dm_1.dm_id;
_sds_p_0_arraycopy2_1.arg_dm_id[2] = p_0_dm_3.dm_id;
_sds_p_0_arraycopy2_1.arg_dm_id[3] = p_0_hwinst_arraycopy2_1_ap_return_info.dm_id;
_sds_p_0_arraycopy2_1.arg_dm_id_count = 4;
accel_open(&_sds_p_0_arraycopy2_1);
}

int main(int argc, char* argv[])
{
data_t Bs[N];
data_t *A = (data_t*)sds_alloc(N * sizeof(data_t));
data_t *B = (data_t*)sds_alloc(N * sizeof(data_t));
data_t *C = (data_t*)sds_alloc(N * sizeof(data_t));
int result;
for (int i = 1; i < 16; i++) {
for (int j = 1; j < N; j++) {
A[j] = i;
B[j] = 0;
C[j] = 0;
Bs[j] = 0;
}
arraycopy_sw(A, Bs);
p_0_arraycopy_1_noasync(A, B);
print_results(A, Bs, B);
result = compare(Bs, B);
p_0_arraycopy2_1_noasync(A, C);
print_results(A, Bs, C);
result = compare(Bs, C);
}

return result;
}

int p_0_arraycopy_1_noasync(data_t * a, data_t b[16])
{
int start_seq[2];
start_seq[0] = 16 * 2;
start_seq[1] = 0;
cf_request_handle_t p_0_hwinst_arraycopy_1_cmd;
cf_send_i(&(p_0_hwinst_arraycopy_1.cmd_arraycopy), start_seq, 2 * sizeof(int), &p_0_hwinst_arraycopy_1_cmd);// set register
cf_wait(p_0_hwinst_arraycopy_1_cmd);

cf_send_i(&(p_0_hwinst_arraycopy_1.a), a, 32, &p_0_request_0);// 啟動send dma

int p_0_arraycopy_1_noasync_v_return;
cf_receive_i(&(p_0_hwinst_arraycopy_1.b_PORTA), b, 32, &p_0_arraycopy_1_noasync_num_b_PORTA, &p_0_request_1);
cf_receive_i(&(p_0_hwinst_arraycopy_1.ap_return), &p_0_arraycopy_1_noasync_v_return, 4, &p_0_arraycopy_1_noasync_num_ap_return, &p_0_request_2);//啟動receive dma

cf_wait(p_0_request_1);
cf_wait(p_0_request_2);
return p_0_arraycopy_1_noasync_v_return;
}

// include path: sdsoc/SDx/2019.1/target/aarch-32-linux/include

nm -C/D libsds_lib.so:

objdump -t libsds_lib.so:

--

--

Roy Hsu
體驗人生 touch life~~

一個為生活在紅塵中打滾 但努力保持著心中那一小塊最初的原始的不變的那個 觀世事變遷 隨緣自在