Управление двумя разными элементами последовательности в одном интерфейсе

Скажем, у меня есть только один интерфейс и несколько определений элементов последовательности:

class link_pkt extends uvm_sequence_item;
class phy_pkt  extends uvm_sequence_item;

Во время теста эти элементы могут динамически передаваться через этот интерфейс.

Как правильно реализовать драйвер / секвенсор? Достаточно ли одного драйвера? или нужно больше одного драйвера?

Похоже, что из-за множества определений элементов последовательности мне понадобится более одного драйвера и секвенсора. Но это нехорошо, так как я не могу контролировать передачу.

Аналогичный случай здесь, что немного статично - мы не можем переключать драйвер на лету. Что мне нужно, так это то, что я могу динамически управлять этими разными элементами последовательности в одном тесте / последовательности.


person AldoT    schedule 10.02.2015    source источник
comment
Вы должны дать нам немного больше информации. Как оба этих типа элементов могут быть переданы по одному и тому же интерфейсу? Это какой-то последовательный интерфейс, где все биты упаковываются в поток и отправляются?   -  person Tudor Timi    schedule 10.02.2015
comment
Да, интерфейс - это своего рода последовательный интерфейс. Эти два элемента обрабатываются по разному протоколу, преобразуются в биты потока и отправляются.   -  person AldoT    schedule 10.02.2015
comment
Если быть точным, с точки зрения протокола, link_pkt выше уровня, чем phys_pkt. Его можно разбить на несколько phys_pkt. Мне нужно иметь возможность гибко отправлять оба элемента.   -  person AldoT    schedule 10.02.2015


Ответы (1)


Здесь вы хотите посмотреть на уровни протокола. Вам необходимо иметь секвенсор для каждого протокола, отправляющего элементы вниз на каждый нижний уровень. Внизу у вас будет драйвер, который фактически управляет сигналами DUT.

Каждому секвенсору необходимо запустить последовательность преобразования, которая преобразует элементы более высокого уровня в свои собственные элементы:

+-----------+
| link SEQR |   <---- can start items here
+-----------+
      |
      |    link 2 phys
      v
+-----------+
| phys SEQR |   <---- can also start items here
+-----------+
      |
      |
      v
+-----------+
| phys DRV  |
+-----------+

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

Вот несколько ссылок, по которым вы можете узнать больше о том, как реализовать наслоение:

http://verificationhorizons.verificationacademy.com/volume-7_issue-3/articles/stream/layering-in-uvm_vh-v7-i3.pdf.

http://www.doulos.com/knowhow/sysverilog/uvm/easier_uvm_guidelines/layering/

У меня уже был разговор по теме здесь.

person Tudor Timi    schedule 10.02.2015