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

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

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

Требования и необходимые условия

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

  • MATLAB Coder®

  • Средства моделирования: Наставник 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 получает требования

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

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 в режиме 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

Следующие формы волны сгенерированы:

В испытательном стенде 6 букв ASCII ('MATLAB') переданы через последовательный сигнал 'rx' и записаны в буфер FIFO. После того, как 6-я передача буквы завершена, сигнал 'ул.', как утверждается, получает буквы ('MATLAB') назад в 'r_data'.

Ссылки

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