File size: 3,156 Bytes
134b4c4 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | /**************************************************************************************************
*
* Copyright (c) 2019-2024 Axera Semiconductor Co., Ltd. All Rights Reserved.
*
* This source file is the property of Axera Semiconductor Co., Ltd. and
* may not be copied or distributed in any isomorphic form without the prior
* written consent of Axera Semiconductor Co., Ltd.
*
**************************************************************************************************/
#include "middleware/runner.hpp"
#include "utilities/file.hpp"
#include "utilities/log.hpp"
#include <chrono>
#include <thread>
void middleware::runner::sleep_for(const uint32_t sleep_duration) const {
std::this_thread::sleep_for(std::chrono::milliseconds(sleep_duration));
}
std::vector<std::string> middleware::runner::read(const std::string& list_file) {
if (!utilities::exists(list_file) || !utilities::is_regular_file(list_file)) {
utilities::glog.print(utilities::log::type::error,
"Stimulus list file{%s} is not exist.\n", list_file.c_str());
return {};
}
std::vector<std::string> list;
std::ifstream list_stream;
list_stream.open(list_file, std::ios::in);
if (!list_stream.is_open()) {
utilities::glog.print(utilities::log::type::error,
"Read stimulus list file{%s} failed.\n", list_file.c_str());
return {};
}
std::string file_path;
while (std::getline(list_stream, file_path)) {
list.push_back(file_path);
}
list_stream.close();
return list;
}
bool middleware::runner::read(const std::string& binary_file, void* address, const uintmax_t& size) {
if (!utilities::exists(binary_file) || !utilities::is_regular_file(binary_file)) {
utilities::glog.print(utilities::log::type::error,
"Stimulus file{%s} is not exist.\n", binary_file.c_str());
return false;
}
const auto file_size = utilities::file_size(binary_file);
if (utilities::error_size == file_size) {
utilities::glog.print(utilities::log::type::error, "Get stimulus file size failed.\n");
return false;
}
if (file_size != size) {
utilities::glog.print(utilities::log::type::error,
"Size of stimulus file{%s} is not equal the specified{file: %d vs tensor: %d}.\n", binary_file.c_str(), file_size, size);
return false;
}
return utilities::read(binary_file, address, size);
}
bool middleware::runner::write(const std::string& binary_file, const void* address, const uintmax_t& size) {
return utilities::write(binary_file, address, size);
}
bool middleware::runner::verify(const void* dst, const void* src, const uintmax_t& size) {
const auto* src_ptr = static_cast<const uint8_t*>(src);
const auto* dst_ptr = static_cast<const uint8_t*>(dst);
for (uintmax_t i = 0; i < size; i++) {
if (src_ptr[i] != dst_ptr[i]) {
utilities::glog.print(utilities::log::type::error,
"Verify stimulus failed{offset: 0x%x; 0x%02X vs. 0x%02X}.\n", i, src_ptr[i], dst_ptr[i]);
return false;
}
}
return true;
}
|