exponenta event banner

Сгенерируйте компонент 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.