Передача чисел с плавающей запятой через порт TLM из SystemVerilog в SystemC - PullRequest
0 голосов
/ 08 октября 2018

Я реализовал специальный фильтр в 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 ++?

1 Ответ

0 голосов
/ 08 октября 2018

packed союзы и структуры могут содержать только packed членов.Итак, в вашем случае, real и byte unsigned array[8] распакованы.Потенциально вы можете использовать unpacked объединения для этого, но не каждый поставщик реализует их.

Более того, размер байта 'real' не определен в стандарте, поэтому ваш союз, скорее всего, не будет работатьвсе.Тем не менее, система verilog предоставляет набор функций для преобразования реальных в переменные определенного размера.В вашем случае $realtobits, который возвращает 64 бита, вероятно, будет работать.

Итак, я предлагаю вам просто передать действительное значение после преобразования в биты:

bit[63:0] realBits = $realtobits(value);
...