Jump to content
    

Миграция кода SystemVerilog из Questasim в Xcelium

Здравствуйте, коллеги

Возникла проблема при миграции с QuestaSim в Xcelium

Есть следующий код:

T      temp_numb;
//...
// Convert to actual number
if     (type(temp_numb) == type(int))          temp_numb = temp_numb_str.atoi();
else if(type(temp_numb) == type(int unsigned)) temp_numb = T'(temp_numb_str.atoi());
else if(type(temp_numb) == type(byte))         temp_numb = byte'(temp_numb_str.atoi());
else if(type(temp_numb) == type(real))         temp_numb = temp_numb_str.atoreal();
else if(type(temp_numb) == type(shortreal))    temp_numb = shortreal'(temp_numb_str.atoreal());
else `uvm_fatal("FILE READ", "Unsupported type of parameter")

Здесь происходит парсинг входной строки в один из встроенных SV типов.

Соль в том, что подобное сравнение типов спокойно компилируется в Questasim, а вот Xcelium при компиляции выдаёт ошибку.

Пока пришлось закомментить данный блок и оставить конвертацию в один тип, но это костыль, а костыли - зло.

Есть ли сравнение типов в Xcelium?

Edited by kirill70674

Share this post


Link to post
Share on other sites

1 минуту назад, one_eight_seven сказал:

Если есть UVM, то пользуйтесь type_name, примитивно, понятно, работет.

Можно подробнее?

Share this post


Link to post
Share on other sites

Конечно можно.
UVM - библиотека для верификации на SystemVerilog. Стандарт в верификации. https://www.accellera.org/downloads/standards/uvm

В
их классах реализован метод type_name() - возвращает имя типа в виде строки. Кстати, это open source - если не хотите тащить всю библиотеку (а лучше -тащить, это всё-таки стандарт), то можете посмотреть как сделано.

Edited by one_eight_seven

Share this post


Link to post
Share on other sites

15 минут назад, one_eight_seven сказал:

Конечно можно.
UVM - библиотека для верификации на SystemVerilog. Стандарт в верификации. https://www.accellera.org/downloads/standards/uvm

В
их классах реализован метод type_name() - возвращает имя типа в виде строки. Кстати, это open source - если не хотите тащить всю библиотеку (а лучше -тащить, это всё-таки стандарт), то можете посмотреть как сделано.

 

Но работает ли данный метод со встроенными типами? Насколько я вижу, этот метод только для объектов, наследованных от uvm_object.

Edited by kirill70674
пунктуация

Share this post


Link to post
Share on other sites

 А зачем вам что-то другое? Если у вас важен базовый тип сам по себе, без его применения, без какой-либо транзакции, или компонента, то это синтетическая задача, не имеющая практической ценности, и решать её  просто не нужно.

P.S. но даже в этом случае, она становится решаемой - засуньте сепульку в класс-контейнер, унаследованный от `uvm_object`, и ваша проблема решена

Edited by one_eight_seven

Share this post


Link to post
Share on other sites

Из занятного – LRM в 23.2 Elaboration time typeof function предлагает вот так функцию typeof использовать для сравнения типов: 

 

bit [12:0] A_bus, B_bus;

parameter type bus_t = $typeof(A_bus);

generate
	case ($typeof(but_t))
		$typeof(bit[12:0]): addfixed_int #(bus_t)          (A_bus,B_bus);
		$typeof(real)     : add_float    #($typeof(A_bus)) (A_bus,B_bus);
	endcase
endgenerate

По идее, результат не должен зависеть от симулятора. 

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...