Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Документация на System Verilog
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Языки проектирования на ПЛИС (FPGA)
Страницы: 1, 2, 3, 4, 5, 6
des00
2 CaPpuCcino


взято http://www.ovmworld.org/forums/showthread.php?t=85

вот маленький учебник

http://www.doulos.com/knowhow/sysverilog/ovm/
CaPpuCcino
спасиб, Денис! первую видел, вторую ещё нет - будем почитать smile.gif
CaPpuCcino
приятный тюториал по SystemVerilog http://www.electrosofts.com/systemverilog/index.html
makc
Оффтопик был выделен в отдельную тему http://electronix.ru/forum/index.php?showtopic=46081
Убедительная просьба, будьте внимательнее при создании новых тем/сообщений.
Escorial
Цитата(makc @ Apr 7 2008, 18:14) *
Оффтопик был выделен в отдельную тему http://electronix.ru/forum/index.php?showtopic=46081
Убедительная просьба, будьте внимательнее при создании новых тем/сообщений.

Динамическая реконфигурация тестового окружения может быть использована для случайного формирования тестового окружения. Например у коммутатора к каждому порту может быть прицеплен endpoint или другой коммутатор. У USB-хост контроллера вообще может быть очень разнообразная обвязка - 8 уровней на которых могут быть как хабы так и функции до 255 устройств в общей сложности. Перебрать все варианты вручную через `ifdef `endif - врагу не пожелаешь.
des00
Добрый день господа!!!

Наконец то докурил до конца доку по VMM, последние главы SYSTEM-LEVEL VERIFICATION и PROCESSOR INTEGRATION VERIFICATION вводят в основы технологии XVС (EXTENSIBLE VERIFICATION COMPONENTS).

И если с софтовой частью все более, менее понятно, то раздел HARDWARE-ASSISTED VERIFICATION ставит
в тупик. А именно как модель для моделирования переноситься в железо?

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

Разбирался ли ли кто нибудь с технологиями XVC ? Если да то не могли бы прояснить технологию предлагаемую авторами данной методики от синопсиса ?

Спасибо.
yes
доки от CADENCE

особо интересны, имхо, sysverilog.pdf и abv*

интересно мнение знающих, про эти доки

http://electronix.ru/forum/index.php?showtopic=50571
des00
в продолжение темы про OVM


http://www.mentor.com/products/fv/questa_e...ation_tech_news

Цитата
Debug - common debug environment with advanced visibility for SystemVerilog classes, dynamic objects, and built-in OVM support.


таки дождались встроенной поддержки.

ждем 6.4 квесту
Vadim
Цитата(des00 @ Jul 31 2008, 05:37) *
ждем 6.4 квесту

Я извиняюсь, а чего ждать-то? В известном месте лежит.
CaPpuCcino
Цитата(Vadim @ Jul 31 2008, 23:19) *
Я извиняюсь, а чего ждать-то? В известном месте лежит.

да и как-то к документации по SystemVerilog-у слабо относится
des00
2 Vadim

нда, старею. надо было сначала известное место проверить %)

Цитата(CaPpuCcino @ Jul 31 2008, 14:45) *
да и как-то к документации по SystemVerilog-у слабо относится


Ну если подходить с такой точки зрения, то разговорам о VMM/OVM/AVM не место в этой теме, больше о подходах к верификации на SV здесь писать не буду %)

Хотел подвести черту к недавнему диалогу о выборе между OVM/AVM, как и планировалось менторовцы переходят на OVM, оставляя для AVM только саппорт.
CaPpuCcino
Цитата(des00 @ Aug 1 2008, 06:42) *
Ну если подходить с такой точки зрения, то разговорам о VMM/OVM/AVM не место в этой теме

по-моему слишком ёмкая тема. лучше выносить в отдельный топик, иначе структурированность потеряем - получится "все-обо-всём"
Intekus
Момент синтаксиса: поддерживает ли SV вложенные (через import) пакеты? По БНФ-синтаксису, вроде не обязан (однажды так обжёгся на вложенных generate) - но это было бы так удобно... Пример:
Код
package pak1;
typedef bit[3:0]        nible;
endpackage : pak1
//##############################
package pak2;
import  pak1::*;
endpackage : pak2
//##############################
module m0;
import  pak1::*;
nible           q;
endmodule
//##############################
module m1;
import  pak2::*;
nible           q;
endmodule
//##############################
module m2;
import  pak2::nible;
nible           q;
endmodule

m0 и m2 (!) компилируются, а m1 - нет; используется Quartus 7.2.
CaPpuCcino
по OVM появился тьюториал:
http://www.doulos.com/knowhow/sysverilog/ovm/
CaPpuCcino
очень недурственный учебный ресурс (тьюториалы) по SystemVerilog - http://testbench.in/
помимо прочего рассматриваются такие вопросы как:
классы СВ, рандомизация в СВ, утверждения (SVA), DPI, управление с помощью событий (events)
приводятся примеры верификации проекта как на чистом SV, так и построенных по методологии VMM, AVM
CaPpuCcino
у Doulos появилась в открытом доступе очень недурственная бумажка на тему процесса перехода от TLM модели к RTL (рекоммендую любителям пректирования больших систем по принципу "сверху-вниз"):
Seamless Refinement from Transaction Level to RTL Using SystemVerilog Interfaces (http://www.doulos.com/knowhow/sysverilog/ тамнайдёте)
CaPpuCcino
обнаружил интерсную бумажку по интеграции SystemVerilog и SystemC через DPI (интересно что в списке публикаций она на сайте Сузерленда не числится, хотя на сервере лежит)
http://www.sutherland-hdl.com/papers/2004-...ith_SystemC.pdf
CaPpuCcino
господа, может ли функция SV возвращать непакованный массив не через список параметров а через собственное имя? например:
Код
function type_x some_function_name [unpacked_dimension_number] (input type_y input_variable);
...
endfunction
...
a=some_function_name(.input_variable(x));

я так понимаю только через определение нового непакованного типа
Код
typedef type_x unpaced_vector_type_t [unpacked_dimension_number];
function unpaced_vector_type_t  some_function_name  (input type_y input_variable);
...
endfunction

или я чего-то не доглядел в нынешнем стандарте?
спс
des00
Цитата(CaPpuCcino @ Nov 17 2008, 15:56) *
или я чего-то не доглядел в нынешнем стандарте?


ИМХО вы поняли все правильно, только через введение нового типа %)
Iptash
Цитата(CaPpuCcino @ Oct 22 2008, 18:12) *
очень недурственный учебный ресурс (тьюториалы) по SystemVerilog - http://testbench.in/
помимо прочего рассматриваются такие вопросы как:
классы СВ, рандомизация в СВ, утверждения (SVA), DPI, управление с помощью событий (events)
приводятся примеры верификации проекта как на чистом SV, так и построенных по методологии VMM, AVM


Я тут слепил PDFник с этой ссылки, пока tutor потом остальные слеплю, выложу. Так наверное
лучше будет.
dxp
Цитата(Iptash @ Nov 27 2008, 13:01) *
Я тут слепил PDFник с этой ссылки, пока tutor потом остальные слеплю, выложу. Так наверное
лучше будет.

Достойное дело. Только вот отступы (indent'ы) в коде не присутствуют, что весьма снижает читабельность примеров.
Iptash
Вот еще слепил, более наглядный тутор, только в плане корректности не проверял, да и концовка
я у них что-то не понял. Гипперссылки отсутствуют.
Iptash
Подскажите пожалуйста где можно скачать IEEE 1800-2007.
cms
Не находил ли кто стандарт IEEE-P1800-2008 - говорят в начале 2008 объединили предыдущий 1800-2005 и верилоговский 1364 в один документ. Любопытно было бы его почитать.

Digitally yours,
cms

Цитата(Iptash @ Nov 30 2008, 14:47) *
Подскажите пожалуйста где можно скачать IEEE 1800-2007.



Digitally yours,
cms
CaPpuCcino
Цитата(cms @ Nov 30 2008, 17:27) *
говорят в начале 2008 объединили предыдущий 1800-2005 и верилоговский 1364 в один документ.

новости по стандарту обсуждаются здесь: http://electronix.ru/forum/index.php?showtopic=49689
2008 ещё не опубликован, скорее всего только весной след. года
CaPpuCcino
Цитата(Iptash @ Nov 30 2008, 15:47) *
Подскажите пожалуйста где можно скачать IEEE 1800-2007.

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

Итак господа что по вашему должно быть выведено в консоль в данном коде

Код
module tb #(type T = logic [0:0]);

  T pipa;


  initial begin : main
    $display("size high ", $high(T));
    $display("size high ", $high(pipa));

    $display("size low ", $low(T));
    $display("size low ", $low(pipa));

    $display("size type ", $size(T));
    $display("size var  ", $size(pipa));

    $display("len type", $bits(T));
    $display("len var ", $bits(pipa));

    for (int i = 0; i < $size(T); i++) begin
      $display("hello %0d", i);
    end
    $stop;
  end

endmodule


Занятные результаты получаются у меня в квесте 6.4а

Цитата
# size high x
# size high x
# size low x
# size low x
# size type x
# size var x
# len type 1
# len var 1


А у вас ?
CaPpuCcino
Цитата(des00 @ Dec 10 2008, 10:40) *
столкнулся с занятной баго фичей.
Занятные результаты получаются у меня в квесте 6.4а

bb-offtopic.gif
ЗЫ: это баг квесты, а не нюанс СВ
ЗЗЫ: в службу поддержки написал. ЗЗЗЫ: при этом баг проявляется только при передачи типа через список параметров модуля, если напрямую объявить пипу как logic[0:0], то всё ок
CaPpuCcino
Цитата(des00 @ Dec 10 2008, 10:40) *
Занятные результаты получаются у меня в квесте 6.4а

ок, Ментор ошибку признал. Временное решение проблемы в использовании ключа -vopt.
ЗЫ:желательно проблемы ментора обсуждать в разделе по средствам разработки, чтоб не мешать приятное с полезным wink.gif .
cms
Должна ли в SV работать такая конструкция:


module a;

parameter param_a = 128;

endmodule


module b;

parameter param_b = a.param_a;

initial $display("param_a = %d", a.param_a);

endmodule

Т.е. можно ли использовать при определении параметра в модуле параметр из другого модуля и как?

Удивительно, но VCS параметр из внешнего модуля видит по иерархическому (?) пути без инстанса, $display его отображает правильно.
Правда при назначении параметра VCS уже сообщает что a.param_a неконстантное выражение и не компилит его.

QuestaSim сразу говорит что не находит в иерархии.
CaPpuCcino
Цитата(cms @ Dec 19 2008, 20:54) *
Должна ли в SV работать такая конструкция

тут на мой взгляд не всё так однозначно. то, что написано, синтаксически правильно (НО). т.е. во втором модуле параметр через иерархическую ссылку должен быть виден (здесь в СВ аналогия с пакетом, да и вообще с любым пространством имён). другое дело как компилятор относится к этому пространству: включает ли он его при компиляции как подиерархию $root или как совершенно отдельное пространство имён (в случае с пакетом здесь было бы всё точно - пакет компилировался бы в единую подиерархию "рут")... и тут всплывает то самое "НО": какое практическое значение имеют 2 модумя никак не связанные в проекте (да и вообще никак синтаксически не связанные)? какой смысл им делить единое пространство имён?
cms
Цитата(CaPpuCcino @ Dec 20 2008, 04:36) *
какое практическое значение имеют 2 модумя никак не связанные в проекте (да и вообще никак синтаксически не связанные)? какой смысл им делить единое пространство имён?


Модули связанные: инстанциированные параллельно в топе или вложены друг в друга. Например модуль b инстанциирует а в зависимости от значения param_a.

P.S. Synopsys ответил, что эта фича еще не заимплеменчена, и что они отправили мой вопрос VCS R&D рассмотреть на предмет включения её в будущих релизах.
CaPpuCcino
Цитата(cms @ Dec 20 2008, 22:26) *
Например модуль b инстанциирует а в зависимости от значения param_a.

но это не соответствует тому, что вы написали (?). здесь же нет условного инстанцирования - если б был, компилёр должен видеть соседнее(связанное) пространство имён! ЗЫ: а если, как вы говорите, они инстанциированы в топе параллельно, то связи между ними я не вижу. там есть условный генерэйт?
cms
Цитата
но это не соответствует тому, что вы написали (?). здесь же нет условного инстанцирования - если б был, компилёр должен видеть соседнее(связанное) пространство имён! ЗЫ: а если, как вы говорите, они инстанциированы в топе параллельно, то связи между ними я не вижу. там есть условный генерэйт?


Вот как раз иерархия интсансов в данном случае значения не имеет. Рассматриваем compilation unit Согласно п.19.3 IEEE 1800-2005(E)

tools shall provide use models that allow both of the following cases:
a) All files on a given compilation command line make a single compilation unit (in which case the
declarations within those files are accessible anywhere else within the constructs defined within
those files).
cool.gif Each file is a separate compilation unit (in which case the declarations in each compilation-unit
scope are accessible only within its corresponding file).

Т.е. если два модуля описаны в одном файле, то они находятся в одном пространстве имен $unit, независимо как они с друг другом соотносятся или инстанциируются где бы то ни было. Или вообще не инстанциируются.

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

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

logic [$clog2(1024)-1:0] a;
yes
выложил доки из синопсиского VCS (vmm+fssertions)
/upload/DOCs/SystemVerilog/synopsys/

вроде бы не встречал такого на сайте

в SOLD-е много еще всего, примеры, туториалы, всякие методологии типа RVM, OVA и т.д.
если нет линукса или лень распаковывать весь солд, могу дозалить
SM
А VCS-то хоть "берет" эти мудрые конструкции, от которых плохеет ментору?
yes
Цитата(SM @ Jan 14 2009, 00:08) *
А VCS-то хоть "берет" эти мудрые конструкции, от которых плохеет ментору?


то о чем мы говорим (2008.9 mx) берет (но ментор их тоже берет), но VCS не глючит
ну и работает на порядки быстрее (позже попытаюсь пустить нетлист с SDF, и померить с каденсом, ментор то на этом вообще сосет)

но у VCS-а есть проблемы с начальной инициализацией и параметрами (это я изложу отдельным топиком)
то есть полного счастья нет sad.gif

зато гораздо внятней становится структура сборки (всякий маразм типа mfcu, sfcu отсутствует) и судя по всему все книжки по SV, написаны на основе VCS-а
ну и доки и примеров полно
ну и VMM там есть (вроде как прямее OVM, хотя я не копенгаген, чтоб их сравнивать)
des00
Цитата(des00 @ Nov 27 2007, 21:32) *
Получить книгу с автографом Яника не получилось. Вот ответ :


таки яник и сотоварищи признали что не правы, правда косвенно.

http://synopsysoc.org/insideprotocolverification/?p=40

Цитата
SystemVerilog introduces a new wrinkle. In SystemVerilog there is the additional requirement that functions not consume time. Tasks can, functions can’t. So VCS, for example, now produces a warning when a function implementation includes a task call


вот что интересно, открытый VMM может и не подняться на других симуляторах
Кнкн
SystemVerilog Assertions

Author(s): Srikanth Vijayaraghavan
Publisher: Springer
Date : 2005
Pages : 334
Format : PDF

/upload/DOCs/SystemVerilog
CaPpuCcino
Цитата(des00 @ Dec 10 2008, 09:40) *
столкнулся с занятной баго фичей.
Код
module tb #(type T = logic [0:0]);

  T pipa;


  initial begin : main
    $display("size high ", $high(T));
    $display("size high ", $high(pipa));
...

пришло от ментора письмо. говорят, что фича исправлена в 6.5. поверил наслово.
iosifk
Нашел вот это:
http://www.pdf-search-engine.com/system-verilog-rtl-pdf.html
Сейчас буду рыться...
grigorik
Ищу книгу
Verilog and SystemVerilog Gotchas:101 Common Coding Error and How to Avoid Them
by Stuart Sutherland and Don Mills
Пожалуйста, Не могли бы вы помочь?
CaPpuCcino
не подскажет ли уважаемая публика, можно ли паковать интерфейсы в пакеты
спб
yes
Цитата(CaPpuCcino @ Mar 23 2009, 18:15) *
не подскажет ли уважаемая публика, можно ли паковать интерфейсы в пакеты
спб


если я правильно понял вопрос -

нельзя - вроде бы где-то явно написано
так ткнулся в стандарт

Types, variables, tasks, functions, sequences, and properties may be
declared within a package. Such declarations may be referenced within modules, macromodules, interfaces,

то есть то что инстанциируется в хиерархию в пакадж нельзя
CaPpuCcino
Цитата(yes @ Mar 26 2009, 21:41) *
то есть то что инстанциируется в хиерархию в пакадж нельзя

спб! тоже где-то в стандарте видел фразочку, типа, всё что может быть с hierarchical reference в пакет нельзя - но немного смутил доступ к полям классов, структур, объединений.
CaPpuCcino
уважаемые, стоит такая задача:
есть массив интерфейсов типа if_t из n элементов -
if_t if_array[n]();
есть набор интерфейсов в количестве n того же типа никак не объединённых -
if_t if_a();
if_t if_b();
...
if_t if_n();
необходимо однозначно связать весь набор из разрозненных интерфейсов с каждым интерфейсом массива.
кто и как изящно решал эту задачу, поделитесь мудростью. я думаю, что нужно смотреть в сторону собственной функции интерфейса типа
interface if_t();
...
function automatic if_t if_assign(if_t interface_bind);
endinterface
но есть сомнения что это реализуемо;
другой вариант - делать модуль-заглушку, но это не изящно.
что посоветуете?

ЗЫ: вообще в последнее время некоторые участники форума стали говорить, что n мало, и лучше k, поэтому если будет k, я не возражаю
warrior-2001
Что значит "связать"? Присвоить элементам одного интерфейса значения другого? Или нужно, чтобы было взаимное переприсваивание?
В первом случае всё просто: на уровне environment-та приассайнить нужный интерфейс из массива к интерфейсу из набора. Остальную часть проекта можно не менять. При желании это же
можно сделать на верхнем уровне-
CODE
function void connect();
...
create_env.assign_vi_int1_env(sw_tb_top.top_int1);
сreate_env.assign_vi_int2_env(sw_tb_top.top_int2);
...
endfunction : connect

Если в каждый момент времени нужно управлять механизмом присваивания, тоесть необходима уметь присваивать как из массива к набору, так и обратно, то изящнее всего было бы воспользоваться
следующим: в нужном блоке кода определить присваивание в `ifndef а, а на верхнем уровне либо определять`define а 16, либо нет. Тем самым будет происходить выбор направления присваивания.

Надеюсь правильно понял вопрос. smile.gif
CaPpuCcino
Цитата(warrior-2001 @ Apr 30 2009, 08:49) *
Что значит "связать"? Присвоить элементам одного интерфейса значения другого? Или нужно, чтобы было взаимное переприсваивание?

извините за нечёткость формулировки. имеется ввиду второй случай, т.е. интерфейс сигнального уровня. во избежании ложной интерпритации опишу проблему подробнее:
на сигнальном уровне интерфейс подразумеваю как набор сигналов, т.е. аналогия структуры, с тем исключением, что в общем случае сигналы в интерфейсе имеют ещё и направление, таким образом оператор присваивания по аналогии со структурами здесь применять невозможно:
typedef struct {bit a;bit b;} struct_t;
struct_t x; struct_t y;
x=y; (эквивалентно x.a=y.a; x.b=y.b;)
таким образом если учесть направление сигналов в интерфейсе, то необходимо писать нечто например такое: x.a=y.a; y.b=x.b; (или наоборот в зависимости от направления сигналов).
таким образом для повторного использования кода необходимо вводить нечто на подобие метода класса, внутри которого происходит присваивание с учётом направления. кто-нибудь эксперементировал с подобным?
вариант с прекомпилятором использовать не хочется, хотчется языковыми средствами.
спб
Armen K
Цитата(dimasen @ Aug 7 2006, 18:13) *
Ищу документацию на System Verilog.
Нашёл всяческие презантации и "перечни" отличий от Verilog'a (назовём ANSI Verilog smile.gif )
А нормальной доки так и не нашёл.


загружать можно от суда:
http://www.systemverilogtestbench.org/books/
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.