2. Установка библиотеки UVM
1) Скачиваем библиотеку здесь: http://www.accellera.org/activities/vip/. Должен скачаться архив с именем uvm*.tar.gz, где вместо * будет текущая версия библиотеки.
2) Распаковываем архив. Если у вас заведена отдельная папка для используемых библиотек (например, папка libs в рабочей директории), то распаковываем библиотеку туда. На этом установка библиотеки закончена. Никаких дополнительных процедур инсталляции или скриптов не требуется (так написано в REDAME-файле, но, как оказалось, это далеко не значит, что вы теперь можете запустить любой пример из папки examples).
3) Устанавливаем переменную окружения UVM_HOME, которая будет содержать путь к папке src (в этой папке содержатся все необходимые для компиляции заголовочные файлы):
a. Перемещаемся в папку src (cd uvm*\uvm\src).
b. Выполняем команду pwd.
c. Полученный путь прописываем в переменную UVM_HOME.
Переменную UVM_HOME можно задать несколькими способами:
- ModelSim/QueastaSim-скрипт:
set UVM_HOME полный_путь
- VCS-makefile:
UVM_HOME = полный_путь
- Можно сделать эту переменную видимой не только в пределах скрипта, прописав в .bashrc:
export UVM_HOME=полный_путь
илиsetenv UVM_HOME полный_путь
Эту переменную мы будем использовать в скриптах для запуска симуляции.
4) Для того, чтобы сделать библиотеку UVM видимой для вашего SystemVerilog-описания, необходимо включить в топовый модуль строки:
import uvm_pkg::*; `include "uvm_macros.svh"
или строку
`include "uvm.svh"
Эти фалы находятся в директории $UVM_HOME, которую необходимо включить при компиляции (+incdir+$(UVM_HOME)).
Теперь попробуем запустить пример hello_world из папки examples в ModelSim 6.6a, QuestaSim 6.6a, VCS 2010.06 и VCS 2009.06.
Запуск тестового примера в ModelSim и QuestaSim
- Перемещаемся в папку с примером:
$ cd <путь>/uvm*/uvm/examples/hello_world/uvm
- Запускаем скрипт:
ModelSim> do run_questa
Вылетают следующие ошибки:
# Model Technology ModelSim SE vlog 6.6a Compiler 2010.03 Mar 19 2010
# -- Compiling package uvm_pkg
# -- Compiling module hello_world
# -- Importing package uvm_pkg
# ** Error: packet.sv(29): (vlog-2163) Macro `uvm_object_utils_begin is undefined.
# ** Error: packet.sv(29): near "(": syntax error, unexpected '(', expecting "function" or "task"
# ** Error: packet.sv(30): (vlog-2163) Macro `uvm_field_int is undefined.
# ** Error: packet.sv(31): (vlog-2163) Macro `uvm_object_utils_end is undefined.
# ** Error: producer.sv(24): Undefined variable: T.
# ** Error: producer.sv(32): near "protected": syntax error, unexpected "protected"
# ** Error: producer.sv(36): (vlog-2163) Macro `uvm_component_utils_begin is undefined.
# ** Error: producer.sv(37): (vlog-2163) Macro `uvm_field_object is undefined.
# ** Error: producer.sv(38): (vlog-2163) Macro `uvm_field_int is undefined.
# ** Error: producer.sv(39): (vlog-2163) Macro `uvm_field_int is undefined.
# ** Error: producer.sv(40): (vlog-2163) Macro `uvm_component_utils_end is undefined.
# ** Error: producer.sv(46): (vlog-2163) Macro `uvm_info is undefined.
# ** Error: producer.sv(46): near "(": syntax error, unexpected '('
# ** Error: producer.sv(52): near "(": syntax error, unexpected '(', expecting "IDENTIFIER" or "TYPE_IDENTIFIER"
# ** Error: producer.sv(53): near "(": syntax error, unexpected '(', expecting "IDENTIFIER" or "TYPE_IDENTIFIER"
# ** Error: producer.sv(55): near "(": syntax error, unexpected '(', expecting "IDENTIFIER" or "TYPE_IDENTIFIER"
# ** Error: producer.sv(58): near ".": syntax error, unexpected '.', expecting "IDENTIFIER" or "TYPE_IDENTIFIER" or '#' or '('
# ** Error: producer.sv(62): (vlog-2163) Macro `uvm_info is undefined.
# ** Error: producer.sv(67): near "(": syntax error, unexpected '(', expecting "IDENTIFIER" or "TYPE_IDENTIFIER"
# ** Error: producer.sv(73): (vlog-2163) Macro `uvm_info is undefined.
# ** Error: consumer.sv(24): near "#": syntax error, unexpected '#', expecting ')' or ','
# ** Error: consumer.sv(25): 'out' already declared in this scope (packet).
# ** Error: consumer.sv(27): Multiple constructors declared for class packet - only one allowed.
# ** Error: consumer.sv(27): 'name' already declared in this scope (new).
# ** Error: consumer.sv(27): Verilog Compiler exiting
# ** Error: C:/modeltech_6.6a/win32/vlog failed.
# Error in macro ./run_questa line 2
# C:/modeltech_6.6a/win32/vlog failed.
# while executing
# "vlog -f compile_questa_sv.f"
Ошибки о том, что не определены макросы, возникли сразу в нескольких файлах – можно предположить, что где-то что-то неправильно подключилось.
Открываем топовый модуль hello_world.sv:
module hello_world;
import uvm_pkg::*;
`include "packet.sv"
`include "producer.sv"
`include "consumer.sv"
`include "top.sv"
. . .
endmodule
Видимо README-файл и этот пример писали разные люди, т.к. библиотека здесь подключена неправильно. Добавляем строку:
`include "uvm_macros.svh"
и пример становится рабочим.
Запуск тестового примера в VCS
- Находясь в папке с примером, выполняем в командной строке:
$ vcs -f compile_vcs.f
Как и было обещано, в VCS 2010.06 никаких проблем не возникло. Даже не нужно было добавлять строку `include "uvm_macros.svh", которая требовалась для ModelSim. А вот в версии VCS 2009.06, которая ниже рекомендуемой, оказалось не все так гладко. При первом запуске вылетела ошибка:
Error-[UC] Unexpected character The character '`' is illegal in the context. "$UVM_HOME/uvm/src/base/uvm_version.svh", 28 (expanding macro) Source info: parameter string uvm_revision = `UVM_VERSION_STRING;
Определим эту строковую константу, добавив в uvm_version.svh соответствующий define:
`ifndef UVM_VERSION_SVH `define UVM_VERSION_SVH `define UVM_VERSION_STRING "1.0" parameter string uvm_mgc_copyright = "(C) 2007-2010 Mentor Graphics Corporation"; parameter string uvm_cdn_copyright = "(C) 2007-2010 Cadence Design Systems, Inc."; parameter string uvm_snps_copyright = "(C) 2010 Synopsys, Inc."; parameter string uvm_revision = `UVM_VERSION_STRING; function string uvm_revision_string(); return uvm_revision; endfunction `endif // UVM_VERSION_SVH
Еще раз компилируем пример и получаем следующую ошибку:
Error-[STASKEC_USF] Undefined system function ../../../src/base/uvm_queue.svh, 196 System function call '$sformatf' is not defined. Please correct and recompile.
Видимо системная функция $sformatf появилась в IEEE 1800 SystemVerilog, который не поддерживается в VCS 2009.06, но у этой функции нашелся аналог - $psprintf. Заменяем все системные функции $sformatf на $psprintf во всех файлах библиотеки и тестового примера. Теперь можно работать.
Примечание
Результаты запуска на других симуляторах (и других версиях VCS и ModelSim) присылайте на This e-mail address is being protected from spambots. You need JavaScript enabled to view it . Они будут опубликованы на сайте с указанием автора.

Комментарии (0)