Сгенерируйте компонент DPI интерфейса FIFO для приемника UART

Этот пример показывает полный рабочий процесс того, как сгенерировать компонент 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.

Шаг 1: MATLAB Design

Первый шаг - написание кода MATLAB, который будет удовлетворять требованиям вашего проекта, следует попытаться захватить требования в testbench. В этом примере наш проект состоит из первого в первом (FIFO) буфера из 8 слов.

  1. Проект: FIFO_Buffer

  2. Испытательный стенд: FIFO_Buffer_tb

Шаг 2: Убедитесь, что MATLAB testbench захватывает требования

Запустите testbench, чтобы убедиться, что нет ошибок во время выполнения, рисунок ниже должен быть нанесен.

FIFO_Buffer_tb

Обратите внимание, что testbench выполняет проект следующим образом:

  • Тактовые импульсы < 15: Запись 6 байт (сигнал записи включен, сигнал чтения отключен), затем чтение 6 байтов (сигнал чтения включен, сигнал записи отключен).

  • Тактовые импульсы > 15: Чтение и запись одновременно. (Например: Записанный байт читается в следующем тактовом цикле).

Шаг 3: Сгенерируйте компонент DPI и проверьте поведение в Симулятор HDL

Чтобы сгенерировать компонент, выполните следующую команду:

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)**************

Шаг 4: Интеграция сгенерированного компонента DPI с проектом приемника UART

После проверки поведения компонента 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)
);

Шаг 5: Моделируйте Приемник UART

Чтобы успешно симулировать проект, убедитесь, что следующие файлы находятся в одной папке:

Как и на шаге 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.