Если вы не используете +define+...
в вашей команде компиляции, макрос define
вступают в силу в зависимости от порядка компиляции. Как только он будет скомпилирован, он будет принят любой последующей строкой кодов или файлов до тех пор, пока не будет выполнено соответствующее значение undef
.
Скажите, в вашем случае, порядок компиляции: subsub.v
, sub.v
, top.v
(согласно имени вашего модуля).
Предполагая, что define abc
находится на первой линии sub.v
, этот abc
эффективен в любой последующей строке sub.v
, а также оставшийся файл, который в данном случае является top.v
, но не subsub.v
.
Чтобы ответить на ваш вопрос, любые коды в пределах ifndef abc
в top.v
НЕ будут скомпилированы. С другой стороны, ifndef abc
в subsub.v
будет скомпилирован.
Example here