picker/include/parser/uvm.hpp

68 lines
2.7 KiB
C++

#pragma once
#include "picker.hpp"
#include <vector>
#include <string>
namespace picker { namespace parser {
// Template variable keys for JSON data
namespace TemplateVars {
constexpr const char* PACKAGE_NAME = "package_name";
constexpr const char* CLASS_NAME = "class_name";
constexpr const char* TRANS_CLASS_NAME = "trans_class_name";
constexpr const char* MODULE_NAME = "module_name";
constexpr const char* DATE_NOW = "date_now";
constexpr const char* VERSION = "version";
constexpr const char* FILEPATH = "filepath";
constexpr const char* VARIABLES = "variables";
constexpr const char* TRANSACTIONS = "transactions";
constexpr const char* BYTE_STREAM_COUNT = "byte_stream_count";
constexpr const char* TRANSACTION_COUNT = "transaction_count";
constexpr const char* USE_TYPE = "use_type";
constexpr const char* GENERATE_DUT = "generate_dut";
constexpr const char* RTL_FILE_PATH = "rtl_file_path";
constexpr const char* FROM_RTL = "from_rtl";
}
// Convert bit count to byte count
inline int bits_to_bytes(int bits) {
return (bits + 7) / 8;
}
// Parse a single SV transaction class.
uvm_transaction_define parse_sv(const std::string& filepath, const std::string& macro_path);
// Parse one or more SV transaction classes using the current pack inputs.
void parse_sv_transactions(const pack_opts& opts, std::vector<uvm_transaction_define>& transactions);
// RTL to UVM Transaction conversion
uvm_transaction_define parse_rtl_file(
const std::string& rtl_file_path,
std::string& module_name,
const std::string& target_module_name = "");
uvm_transaction_define sv_module_to_uvm_transaction(const sv_module_define &module);
uvm_parameter sv_signal_to_uvm_parameter(const sv_signal_define &signal);
std::vector<uvm_parameter> sv_signals_to_uvm_parameters(const std::vector<sv_signal_define> &signals);
// Template Data Preparation
void enrich_field_metadata(inja::json& field, int& byte_offset);
std::pair<inja::json, int> transaction_to_json(
const uvm_transaction_define& trans,
const std::string& trans_filename,
bool is_multi_transaction);
inja::json prepare_uvm_package_data(
const std::vector<uvm_transaction_define>& transactions,
const std::vector<std::string>& filenames,
const std::string& package_name,
bool generate_dut,
const std::string& rtl_file_path = "");
// Unified entry point for UVM package data preparation
inja::json parse_and_prepare_package(const pack_opts& opts);
}; } // namespace picker::parser