Вопрос

У меня есть тестовый стенд на основе 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top