Сгенерируйте компонент 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, сопровождается битами данных, и заканчивается 'битом четности', и 'стоп-бит '.Transmission одного байта является показом в следующей фигуре:

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

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

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

Настройте файлы в качестве примера

Чтобы настроить файлы проекта в качестве примера, введите следующий код в подсказке команды MATLAB.

mkdir('svdpi_FIFO_Interface');
cd('svdpi_FIFO_Interface');
copyfile(fullfile(matlabroot,'toolbox','hdlverifier','hdlverifier_examples','svdpi_FIFO_Interface','*'),pwd);

Эти команды создают временную папку и копируют необходимые файлы в эту директорию.

Шаг 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.