joomla 1.6

Последние статьи

Популярные статьи

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 . Они будут опубликованы на сайте с указанием автора.

  • Thursday, 02 June 2011
  • Автор: Ветошкин Алексей
  • Опубликовано в: UVM
  • 5.0/5 rating (1 votes)

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

Написать комментарий

You are commenting as guest.

Cancel Submitting comment...

SystemVerilog.ru

SystemVerilog

↑ Ссылка на наши новости

Последние новости Apple
Apple-портал: новости, обзоры, приложения
Все об iPhone 5 и iPad 3
Топовый софт
Последнии версии признанных во всем мире программ
Softenok.com
Компьютерный портал
Лучшее из мира компьютеров на Super4computeR.com
Super4computeR.com
Лучшее из мира WEB
Лучшее из мира web-дизайна на Super4desigN.com
Super4desigN.com
Аренда коттеджа в Подмосковье
Отличные места для проведения любого мероприятия. Близко к Москве и недорого!
CottageArenda.ru
мини-логотип сайта systemverilog.ru

2010-2011 SystemVerilog.ru, все права защищены. | Обратная связь