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, сопровождается битами данных, и заканчивается 'битом четности', и 'стоп-бит '.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.