Экспорт задач в C с использованием DPI - PullRequest
6 голосов
/ 07 апреля 2009

У меня есть тестовый стенд на основе Verilog, подключенный к источнику C с использованием DPI. Теперь с помощью DPI я планирую написать всю мою прошивку. Для этого мне нужно 3 вещи

  • Регистрация Чтение
  • Регистрация Написать
  • Обработчик прерываний Как я понимаю, чтение и запись в регистре - это задачи, которые мне нужно экспортировать из тестового стенда RTL. И обработчик прерываний (я реализовал импорт функции из 'C).

Я проверил большую часть документации по каденции и не нашел полезных подсказок. Я также зарегистрировался в сообществе пользователей cadence, но, похоже, я не могу задать вопрос, пока они не одобрят мою регистрацию.

На всякий случай, если кто-то знает об этом, был бы признателен за помощь.

Ответы [ 2 ]

3 голосов
/ 08 апреля 2009

На самом деле я понял, что-то вроде этого.

//--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.

2 голосов
/ 22 октября 2009

Круто ... Я действительно написал статью на эту тему. ссылка

На самом деле документ экспортирует операции чтения, записи и прочее по всему DPI, а затем добавляет к ним интерпретатор TCL, чтобы вы могли использовать TCL для управления симом. Это было то, что любили парни из лаборатории, так как все их инструменты уже в Tcl.

Вы можете просто следовать инструкциям, чтобы интегрировать вызовы функций из C в SV через DPI, а затем остановиться, когда в игру вступит TCL.

...