Я реализовал специальный фильтр в C / C ++, «инкапсулированный» в SystemC-модуль.Я хочу использовать этот фильтр в моей реальной среде проверки (VE), которая основана на SystemVerilog.Для передачи данных из фильтра и в него я хочу реализовать TLM-соединение.Для TLM существует нечто, называемое «общая полезная нагрузка», в основном определяющее, что может быть передано через TLM, который является байтовым массивом.
Из-за этого мне нужно преобразовать выборки данных в VE изтип данных, действительный для байтового массива.Я попытался создать союзный тип, чтобы я мог сохранить действительное значение и прочитать байтовый массив.
typedef union packed {
real value;
byte unsigned array[8];
} real_u;
Однако я получаю следующее сообщение об ошибке.
real value;
|
ncvlog: *E,SVBPSE (Initiator.sv,7|11): The data type of a packed struct/union member must be a SystemVerilog integral type.
byte unsigned array[8];
|
ncvlog: *E,SVBPSE (Initiator.sv,8|20): The data type of a packed struct/union member must be a SystemVerilog integral type.
Как я могу решить эту проблему?Существуют ли другие удобные способы преобразования чисел с плавающей запятой в байтовые массивы в SV / C ++?