exponenta event banner

Условия гонки в тренажерах ЛПВП

Избегание расовых условий

Хорошо известной проблемой в аппаратном моделировании является возможность получения различных результатов на различных пробегах при наличии условий гонки. Поскольку имитатор ЛПВП представляет собой среду выполнения с высокой степенью параллельности, необходимо записать ЛПВП таким образом, чтобы результаты не зависели от порядка выполнения процесса.

Несмотря на то, что существуют известные кодовые идиомы для достижения реалистичного моделирования тестируемой конструкции, необходимо всегда проявлять особую осторожность на тестовом стенде/интерфейсах DUT для применения стимулов и результатов считывания, даже в чистых средах ЛПВП. Для интерфейса HDL/чужого языка, например, в сеансе косимуляции Simulink ® или MATLAB ®, проблема усложняется, если отсутствует общий сигнал синхронизации, например часы, координирующие поток данных.

Потенциальные условия гонки в сеансах Cosimulation Simulink

Все сигналы на интерфейсе блока косимуляции ЛВП в библиотеке Simulink имеют собственную частоту дискретизации, связанную с ними. Эту частоту выборки можно рассматривать как неявный тактовый сигнал, который управляет временем моделирования, в которое может произойти изменение значения. Поскольку этот неявный тактовый сигнал полностью неизвестен механизму ЛПВП (то есть он не является сигналом ЛПВП), моменты времени, в которые входные значения вводятся в ЛПВП или выходные значения дискретизируются из ЛПВП, асинхронны к любым тактовым сигналам, кодированным непосредственно в ЛПВП, даже если они номинально имеют одну и ту же частоту.

Для изменения значений Simulink, запланированного в определенное время моделирования, имитатор HDL не предоставляет никаких гарантий в отношении порядка изменения значений по сравнению с некоторым другим назначением блокирующего сигнала. Таким образом, если значения Simulink приводятся в действие/дискретизируются одновременно с активным фронтом синхронизации в ЛПВП, существует условие гонки.

В тех случаях, когда активный фронт тактовых импульсов HDL и внутренний фронт тактовых импульсов Simulink имеют одинаковую частоту, можно ускорить требуемое распространение данных путем смещения одного из этих фронтов. Так как частоты дискретизации Simulink всегда выравниваются с временем 0, можно выполнить это смещение путем смещения активного фронта синхронизации в ЛПВП от времени 0. При кодировании тактового импульса в HDL используйте оператор задержки («after» или «#») для выполнения этого смещения.

При использовании команды Tcl «force» для описания формы тактового сигнала можно просто поместить первый активный фронт в некоторое ненулевое время. Использование ненулевого значения позволяет использовать частоту выборки Simulink, совпадающую с основной тактовой частотой в HDL. В этом примере показан тактовый сигнал 20 нс (так что частота дискретизации Simulink будет также каждые 20 нс) с активным положительным фронтом, который смещен от времени 0 на 2 нс (пример показан для использования с Insisive ®):

> force top.clk = 1'b0 -after 0 ns 1'b1 -after 2 ns 1'b0
             -after 12 ns -repeat 20 ns

Для блоков косимуляции HDL с панелями часов можно определить тактовый период и активный край на этой панели. Определение формы сигнала помещает неактивный край в момент времени 0, а активный край в момент времени T/2. Это размещение устанавливает максимальное время установки и удержания для часов с 50% рабочим циклом.

Если частота дискретизации Simulink отличается от тактовой частоты HDL, то необходимо синхронизировать сигналы между HDL и Simulink так же, как в случае любой конструкции с несколькими временными областями, даже один в чистом HDL. Например, можно разместить два синхронизирующих триггера на интерфейсе.

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

Потенциальные условия гонки в сеансах косимуляции MATLAB

При использовании -sensitivity, -rising_edge, или -falling_edge параметры планирования для matlabtb или matlabcp для запуска вызовов функции MATLAB распространение значений следует той же семантике, что и чистая конструкция ЛПВП; перед вычислением результатов должны появиться триггеры. У вас все еще могут быть условия гонки, но они могут быть проанализированы только в ЛПВП.

Однако при использовании -time параметр планирования для matlabtb или matlabcp, или использовать tnext в рамках самой функции MATLAB управление значениями сигнала или выборка значений сигнала не может быть гарантирована в отношении каких-либо изменений сигнала HDL. Как будто потенциальные условия гонки в этом расписании, основанном на времени, подобны неявным часам, которые неизвестны механизму ЛПВП и не видны, просто глядя на код ЛПВП.

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

Дальнейшее чтение

Хорошо известны и широко задокументированы проблемы взаимодействия конструкций испытательных стендов и иностранных языков, включая условия гонки в среде чистого ЛПВП. Некоторые тексты, в которых описываются эти вопросы, включают:

  • Документация на имитатор ЛПВП каждого поставщика

  • Спецификации стандартов HDL

  • Написание тестов: Функциональная проверка моделей ЛПВП, Janick Bergeron, 2-е издание, © 2003

  • Verilog и SystemVerilog Gotchas, Стюарт Сазерленд и Дон Миллс, © 2007

  • SystemVerilog for Verification: Руководство по изучению языковых особенностей Testbench, Chris Spear, © 2007

  • Принципы проверяемого дизайна RTL, Лайонел Бенинг и Гарри Д. Фостер, © 2001