exponenta event banner

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

В этом примере показан полный рабочий процесс создания компонента SystemVerilog DPI для интерфейса буфера FIFO, предназначенного для интеграции с приемником UART. Интерфейс записывается в MATLAB и экспортируется в имитатор HDL. Также предоставляются файлы SystemVerilog для приемника UART и его испытательного стенда.

В демонстрационных целях в этом примере используется Modelsim 10.3c в 64-разрядной Windows 7. Однако эта же процедура может быть легко воспроизведена для других систем и тренажеров.

Требования и предпосылки

Продукты, необходимые для этого примера:

  • Кодер MATLAB ®

  • Симуляторы: Mentor Graphics ® ModelSim ®/QuestaSim ® или Cadence ® Incisive

  • Один из поддерживаемых компиляторов C: Microsoft ® Visual C++ или GNU GCC

Фон

Универсальный асинхронный приемник и передатчик (UART) - это схема, которая посылает и принимает данные по последовательной линии. UART обычно используются в стандарте RS-232 и содержат приемник и передатчик. Однако в этом примере используется только приемник.

Последовательная передача начинается с «начального бита», который равен 0, за которым следуют биты данных, и заканчивается «битом четности» и «стоп-битом». Передача одного байта показана на следующем рисунке:

Передача является асинхронной, что означает отсутствие тактовой информации, поэтому приемник и передатчик должны согласовать, какая скорость передачи, стоп-биты и бит четности используются. В этом примере один байт будет передан со скоростью передачи в бодах 19 200, 1 стоповым битом и без битов четности.

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

Следующая схема иллюстрирует конструкцию приемника UART.

Шаг 1: Проектирование MATLAB

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

  1. Проектирование: FIFO_Buffer

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

Шаг 2. Убедитесь, что тестовые инструменты MATLAB соответствуют требованиям.

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

FIFO_Buffer_tb

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

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

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

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

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

dpigen -testbench FIFO_Buffer_tb FIFO_Buffer -args {0,int8(0),0}

На рисунке ниже показаны соответствующие файлы для этого примера.

После того, как DPIGEN создаст компонент DPI и его тестовую среду, можно запустить тестовую среду SystemVerilog, выполнив следующие действия:

  • Запустите ModelSim/QuestaSim в режиме графического интерфейса пользователя.

  • Измените текущий каталог на «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

Формируются следующие формы волн:

В тестовом инструменте 6 ASCII букв ('MATLAB') передаются через последовательный сигнал 'rx' и записываются в буфер FIFO. После завершения передачи 6-й буквы подается сигнал «rd» для получения букв («MATLAB») обратно в «r _ data».

Ссылки

Pong P. Chu (2008), FPGA Prototyping by Verilog Examples. Hoboken, New
Jersey: John Wiley & Sons, Inc.