dxp 65 3 марта, 2021 Опубликовано 3 марта, 2021 · Жалоба Можно накостылить параметризацию, например, таким способом: // params.svh //---------------------------------- package params1_pkg; localparam DATA_W = 9; ... endpackage : params1_pkg //---------------------------------- package params2_pkg; localparam DATA_W = 17; ... endpackage : params2_pkg //---------------------------------- // target.svh package slon_pkg; import `PARAMS::*; ... typedef logic [$clog2(DATA_W)-1:0] data_t; endpackage : slon_pkg //---------------------------------- //---------------------------------- // source.sv `define PARAMS params2 `include "params.svh" `include "target.svh" ... //---------------------------------- Вроде должно работать. Не проверял. Все эти финты с препроцессором, в общем, нехорошая вещь, всегда стараюсь избегать. Но в данном случае подстановка простейшая, тут поля для ошибок вроде не просматривается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 3 марта, 2021 Опубликовано 3 марта, 2021 · Жалоба 1 hour ago, dxp said: Можно накостылить параметризацию, например, таким способом: Вроде должно работать. Не проверял. Все эти финты с препроцессором, в общем, нехорошая вещь, всегда стараюсь избегать. Но в данном случае подстановка простейшая, тут поля для ошибок вроде не просматривается. Если это метод рассматривать в контексте основного проекта, то да, а если в контексте IP, для множественного инстанса в другие проекты с произвольными параметрами, не пойдет. Самый простой вариант понять ситуацию: есть сложное IP с конфигурируемым интерфейсом, от параметров которого зависят внутренности IP. Пусть параметр будет один и нужно его 3 значения: 8/24/32. Надо вставить три инстанса с этими параметрами в один проект. Сделать это через глобальное простраство имен, при конфигурации из пакета по моему не возможно. Единственный вариант это собрать 3 black-box инстанса и вставить обертки. Но, даже в этом случае, нужно будет скормить сорцам IP нужный пакет руками, задав макрос. Неудобно, много лишних движений. Подход от @RobFPGA с интерфейсам не везде работает и довольно специфичен. Локальный include с параметрами позволяет задать все параметры/локальные параметры/типы в одном месте и не забыть их упомянуть в каждом файле IP. Минусы есть, если там сложные вычисляемые параметры и таблцы, а они в конкретном модуле не использованы, софт тратит лишнее время на их анализ и рассчет. Но зато использование простое. Инстанс с параметрами: как при обычной иерархической разработке. PS. Еще один минус : неупакованные структурированные типы, в режиме сборки sfcu. Возникает конфликт типов. Но это обходится) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться