Экспорт задач в 'C с использованием DPI
-
05-09-2019 - |
Вопрос
У меня есть тестовый стенд на основе verilog, подключенный к источнику 'C с использованием DPI.Теперь, используя DPI, я планирую написать всю свою прошивку целиком.Чтобы сделать это, мне нужно 3 вещи
- Чтение регистра
- Регистрация Записи
- Обработчик прерываний Насколько я понимаю, операции чтения и записи регистров - это задачи, которые мне нужно экспортировать из тестового стенда RTL.И обработчик прерываний (я реализовал, импортировав функцию из 'C).
Я проверил большую часть документации cadence и не нашел никаких полезных подсказок.Я также зарегистрировался в сообществе пользователей cadence, но, похоже, я не могу задать вопрос, пока они не одобрят мою регистрацию.
На всякий случай, если кто-то знает об этом, был бы признателен за их помощь.
Решение
На самом деле я понял это примерно так.
//--From RTL ---
export "DPI" task reg_read;
task reg_read;
input int nAddr;
output int nVal;
// -- read implementation --
endtask
// -- From C code
extern void reg_read (int nAddr, int *pVal);
void test_read (void)
{
int nRegVal;
// Dummy checking !!
reg_read (0x100, &nRegVal);
}
// -- Again in RTL --
import "DPI" context task test_read ();
Это работает для меня, используя ncverilog.
Другие советы
Прохладный...Я действительно написал статью на эту тему. Ссылка
Документ фактически экспортирует операции чтения и записи регистров и прочее через DPI, а затем добавляет к нему интерпретатор TCL, чтобы вы могли использовать TCL для управления вашей sim-картой.Это было то, что понравилось ребятам из лаборатории, поскольку все их инструменты уже есть в Tcl.
Вы можете просто следовать инструкциям, чтобы интегрировать вызовы ваших функций из C в SV через DPI, а затем остановиться, когда в игру вступят элементы TCL.