Этот пример показывает полный рабочий процесс того, как сгенерировать компонент DPI SystemVerilog для интерфейса буфера FIFO, предназначенного для интеграции с приемником UART. Интерфейс записывается в MATLAB и экспортируется в Симулятор HDL. Также предоставляются файлы SystemVerilog для приемника UART и его испытательного стенда.
В демонстрационных целях этот пример использует Modelsim 10.3c в 64-разрядной Windows 7. Однако эта же процедура может быть легко реплицирована для других систем и симуляторов.
Продукты, необходимые для этого примера:
MATLAB Coder ®
Симуляторы: Mentor Graphics ® ModelSim ®/QuestaSim ® или Cadence ® Incisive
Один из поддерживаемых компиляторов C: Microsoft ® Visual C++ или GNU GCC
Универсальный асинхронный приемник и передатчик (UART) является схемой, которая отправляет и получает данные через последовательную линию. UART обычно используются со стандартом RS-232 и содержат приемник и передатчик. Однако в этом примере используется только приемник.
Последовательная передача начинается с 'старта-бита', который равен 0, за которым следуют биты данных, и заканчивается 'битами четности' и 'стоп-битом'. Передача одного байта показа на следующем рисунке:
Передача является асинхронной, что означает, что тактовая информация отсутствует, поэтому приемник и передатчик должны договориться о том, какая скорость бодов, стоп-биты и бит четности используются. В этом примере один байт будет передан со скоростью 19 200 бод, 1 стоп-бит и без битов четности.
Схема избыточной дискретизации будет использоваться, чтобы оценить среднюю точку бита данных со скоростью, в 16 раз превышающей скорость бод, как показано на рисунке ниже.
Следующая схема иллюстрирует проект приемника UART.
Первый шаг - написание кода MATLAB, который будет удовлетворять требованиям вашего проекта, следует попытаться захватить требования в testbench. В этом примере наш проект состоит из первого в первом (FIFO) буфера из 8 слов.
Проект: FIFO_Buffer
Испытательный стенд: FIFO_Buffer_tb
Запустите testbench, чтобы убедиться, что нет ошибок во время выполнения, рисунок ниже должен быть нанесен.
FIFO_Buffer_tb
Обратите внимание, что testbench выполняет проект следующим образом:
Тактовые импульсы < 15: Запись 6 байт (сигнал записи включен, сигнал чтения отключен), затем чтение 6 байтов (сигнал чтения включен, сигнал записи отключен).
Тактовые импульсы > 15: Чтение и запись одновременно. (Например: Записанный байт читается в следующем тактовом цикле).
Чтобы сгенерировать компонент, выполните следующую команду:
dpigen -testbench FIFO_Buffer_tb FIFO_Buffer -args {0,int8(0),0}
На рисунке ниже показаны соответствующие файлы для этого примера.
Как только DPIGEN генерирует компонент DPI и его тестовый набор, можно запустить тестовый набор SystemVerilog, выполнив следующие шаги:
Запустите ModelSim/QuestaSim в режиме GUI.
Измените текущую директорию на «dpi_tb» в директории генерации кода в симуляторе HDL.
Введите следующую команду, чтобы начать симуляцию
do run_tb_mq.do
Будут сгенерированы следующие формы волн:
Обратите внимание, что это соответствует нашему тестбенчу MATLAB, где мы записываем 6 байт и затем читаем их с последующей одновременной записью и чтением 8 байтов.
Когда симуляция завершится, вы увидите следующий текст, напечатанный на консоли:
**************TEST COMPLETED (PASSED)**************
После проверки поведения компонента DPI пришло время интегрировать его в приемник UART. На следующем рисунке показаны файлы, необходимые для различных компонентов.
Для выполнения UART-приемника с интегрированным компонентом DPI был предоставлен тестовый набор с именем 'uart _ rx _ FIFO _ tb.sv'. Чтобы интегрировать компонент все, что необходимо, это создать экземпляр компонента в панели испытаний, как показано ниже:
// Instantiate DUT generated using MATLAB Based SystemVerilog DPI FIFO_Buffer_dpi u_FIFO_Buffer_dpi( .clk(clk), .clk_enable(clk_enable), .reset(reset), .wr(rx_done_tick), .w_data(dout), .rd(rd), .Empty(Empty), .r_data(r_data), .Full(Full) );
Чтобы успешно симулировать проект, убедитесь, что следующие файлы находятся в одной папке:
Как и на шаге 3, откройте Modelsim и запустите файл .do используя:
do run_tb.do
Генерируются следующие формы волны:
В testbench 6 ASCII буквы ('MATLAB') передаются через последовательный сигнал 'rx' и записываются в буфер FIFO. После завершения передачи 6-й буквы утверждается сигнал 'rd', чтобы получить буквы ('MATLAB') обратно в 'r _ данные'.
Pong P. Chu (2008), FPGA Prototyping by Verilog Examples. Hoboken, New Jersey: John Wiley & Sons, Inc.