«Работать добросовестно — значит: работать, повышая свою квалификацию, проявляя инициативу в совершенствовании продукции, технологий, организации работ, оказывая не предусмотренную должностными инструкциями помощь другим сотрудникам (включая и руководителей) в общей им всем работе.

Спец курс (Верификация цифровых схем)/Практические задания (Лекция 4)

Материал из Wiki

Перейти к: навигация, поиск

Написание UVM окружения

  1. Разработать драйвер, позволяющую выполнять базовые операции на заданном интерфейсе (spi/csr/apb/т.д.).
  2. Разработать монитор, позволяющий собрать базовые операции на заданном интерфейсе в транзакцию и отправлять ее в uvm_analyze_port порт
  3. Собрать агент из готовых компонентов (driver, monitor, sequencer, coverage_collector), реализовать фазы создания и подключения в зависимости от параметров объекта конфигурации.
  4. Создать SV пакеты.
    • Реализовать SV пакет агента (название пакета XXX_agent_pkg, XXX - название интерфейса который соответствует вашему варианту : spi/csr/apb/т.д. )
  5. Разработать блок (uvm_component) сравнения пары транзакций (tr_comparator).
    • Блок должен иметь два входных порта expected и actual типа uvm_analyze_*.
    • В порт expected приходят транзакции которые мы отправили.
    • В порт actual приходят транзакции которые мы получили.
    • После получения пары транзакций блок должен сравнивать их и выводит содержимое транзакций в лог и сообщение PASS / FAIL (в случае если транзакции совпали/не совпали)
  6. Разработать блок (uvm_component) сравнения произвольной последовательности данных (data_comparator).
    • Блок должен иметь два входных порта expected и actual типа uvm_analyze_*.
    • В порт expected приходят транзакции которые мы отправили.
    • В порт actual приходят транзакции которые мы получили.
    • В блок приходят транзакции с произвольным адресом и данными.
    • Блок аккумулирует заданное число данных(адрес игнорируется) в очередь и после заполнения очереди сравнивает последовательность данных (блок должен быть параметризован значением, которое определяет размер очереди)
  7. Реализовать окружение (uvm_env), в котором будет два агента (spi/csr/apb/т.д.), отличающихся шириной шины адреса и данных (адрес/данные 11/32 , 20/64).
  8. Реализовать окружение (uvm_env), в котором будет два агента (spi/csr/apb/т.д.), один в режиме мастер, другой в режиме ведомый.
    • Интерфейс агента мастера должен быть подключен к интерфейсу агента ведомого.
  9. Реализовать SV пакет окружения.
  10. Создать базовый тест.
    • В базовом тесте подключить пакет окружения и создать объект окружения.
  11. Создать тест (master_to_slave_test) наследуемый от базового
  12. Создать сиквенс, которая генерирует 100 случайных транзакций.
  13. Запустить сиквенс master_to_slave_test тесте на сиквенсере из мастер агента.
    • В результате должна пройти передача 100 транзакций из мастера в ведомый и должны выводиться сообщения о сранвении транзакций и данных