Есть ли способ изменить заголовочный файл на лету?
Заголовочный файл содержит много констант, которые можно использовать для модулей. В моем приложении, однако, некоторые из констант должны часто изменяться вручную. Есть ли способ изменить значения автоматически?
Я попробовал следующие подходы.
1. Используйте C ++, чтобы определить константы и записать их в заголовочный файл.
2. Используйте модуль SV для обновления файла заголовка.
Все эти методы требуют дополнительных шагов перед запуском верхнего модуля.
Есть ли способ обновить заголовочный файл во время выполнения симулятора?
В следующем header.v содержится NUM, который используется в модуле main.
NUM часто меняется.
Эта проблема также распространяется на другие языки, такие как C ++ или Java.
header.v:
`define NUM 256 //256 must be changed often
module top ();
initial ...
//instantiation
main MAIN();
endmodule
//this module contains NUM
module main ();
byte[0:`NUM - 1];
endmodule
Если он отличается для каждого модуля в той же симуляции, то вы должны использовать parameter
вместо `define
,
main #(parameter NUM) (/*portlist*/);
// ...
byte array [0:`NUM - 1]; // FYI 'byte' is a SystemVerilog keyword
// ...
endmodule
Большинство симуляций поддерживают передачу определения из командной строки, которое может работать, если значение в симуляции одинаковое, но разное для каждой симуляции.
+define+NUM=256
-define NUM=256
-D NUM=256
Чтобы уменьшить переопределение предупреждений, оберните `ifndef
к определению в header.v
:
`ifndef NUM
`define NUM 256 //256 must be changed often
`endif
C ++ является скомпилированный язык, где константы, такие как вещи, переводятся на машинный язык во время компиляции (я знаю его очень грубое описание, для более детального понимания вы можете обратиться к адресному пространству процесса и где в нем находятся константы). http://www.geeksforgeeks.org/memory-layout-of-c-program/).
Если вы хотите изменить эти константы (или подобные вещи), код должен быть перекомпилирован. Существуют методы, с помощью которых вы можете сгенерировать индивидуальный код из входных текстовых файлов, используя некоторые инструменты Но это не применимо в вашем сценарии.
Я полагаю, что файл конфигурации является лучшим в вашем случае, когда вы можете определить параметры в соответствии с настройкой.