В System Verilog, как определить, существует ли элемент класса? - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть система с конфигурационным файлом, который читается в тестовой среде.Файл конфигурации создается другой группой, и теперь у него есть значения конфигурации, которые больше не используются, но которые они не хотят удалять.В тестовом стенде я прочитал в файле конфигурации и применил значения в нем к члену класса с множественными вложениями, который представляет карту регистров устройства.

До этого момента у меня было большое, нопростая инструкция case, которая проанализировала ключ конфигурации, а затем просто применила соответствующее значение к полю регистра, которое было связано с ключом конфигурации.Например,

while(!$feof(cfg_file)) begin
  cfg_r        = $fgets(cfg_line, cfg_file);
  cfg_r        = $sscanf(cfg_line,"%s = %s", cfg_name_str, cfg_value_str);

  case (cfg_name_str)

    "gpe" : begin
       ewd_regs.op.gpe.coef = cfg_field_value;
    end

    // Other configuration keywords and a default:

  endcase
end 

В этом примере ключевое слово и поле регистра оба являются "gpe", но для некоторых полей ключевое слово файла конфигурации и поле регистра отличаются.

Теперьс беспорядком в файле конфигурации у меня есть некоторые ключевые слова, которые перечислены в файле конфигурации и которые соответствуют одному из случаев, но которые больше не определяются отдельным кодом, который определяет и строит карту регистров / полей.Итак, в приведенном выше примере ewd_regs.op существует, а ewd_regs.op.gpe - нет.

Итак, мой вопрос: как я могу проверить, существует ли ewd_regs.op.gpe перед выполнением назначения?Если он не существует, я хочу записать условие и продолжить анализ файла конфигурации.

1 Ответ

0 голосов
/ 28 ноября 2018

В языке SystemVerilog нет способа найти идентификатор с помощью строки, чтобы увидеть, существует ли он, а затем использовать эту строку для доступа к нему.

Если это модель регистра UVM, они реализовали связанную строку для поиска дескриптора класса, который можно использовать вместо имен прямых дескрипторов.

В противном случае вы можете захотеть создать скрипт, который читает файл конфигурации и генерирует эту часть вашего файла testbench.

...