2014-12-19 3 views
0

У меня возникла ошибка компиляции vcs при добавлении функции в объявление структуры. В документе IEEE не упоминается, разрешена ли функция в структуре.О структуре в системе-verilog?

У меня также возникла ошибка компиляции vcs при попытке присвоить значение по умолчанию для поля. Но это разрешено в IEEE-1800-2012 7.2.2.

typedef struct { 
     int a = 1; //compile error here 
     int b; 
     function void func(); 
       b = a; 
     endfunction 
} a_struct; 

Так что я добавить командную строку и информацию об ошибке, как предложено:

vcs -sverilog a.sv 

Error-[V2KIIAD] Invalid initialization at declaration 
.... 
Struct or union member field 'a' cannot be initialized at declaration. 

Error-[SE] Syntax error 
    Following verilog source has syntax error : 
    "a.sv", 4: token is 'function' 
    function void func(); 
      ^

И мой VCS версия 2013,06-SP1-10

+0

Вам следует связаться с Synopsys. – toolic

+1

Это хорошая идея включить ошибки, которые вы получаете в вопросе. – Morgan

+1

Было бы полезно знать команду vcs, которую вы использовали (вы забыли флаг -sverilog?) – Unn

ответ

1

Функции, объявленные внутри структур не поддерживается в IEEE Std 1800-2012 , Рассматривая синтаксис объявления структуры, a struct_union_member является data_type_or_void, а функция не является data_type.

§ 7,2 Структуры

data_type ::= // from A.2.2.1 
... 
| struct_union [ packed [ signing ] ] { struct_union_member { struct_union_member } } 
{ packed_dimension } 
struct_union_member ::= 
{ attribute_instance } [random_qualifier] data_type_or_void list_of_variable_decl_assignments ; 
data_type_or_void ::= data_type | void 
struct_union ::= struct | union [ tagged ] 

расширяющие DATA_TYPE из § А.2.2.1 Net и типы переменных

data_type ::= 
integer_vector_type [ signing ] { packed_dimension } 
| integer_atom_type [ signing ] 
| non_integer_type 
| struct_union [ packed [ signing ] ] { struct_union_member { struct_union_member } } 
{ packed_dimension } 
| enum [ enum_base_type ] { enum_name_declaration { , enum_name_declaration } } 
{ packed_dimension } 
| string 
| chandle 
| virtual [ interface ] interface_identifier [ parameter_value_assignment ] [ . modport_identifier ] 
| [ class_scope | package_scope ] type_identifier { packed_dimension } 
| class_type 
| event 
| ps_covergroup_identifier 
| type_reference 
+0

Так что system-verilog не разрешает функцию в структуре, которая отличается от C-стиля. Но значение поля по умолчанию должно быть разрешено. Это может быть проблема с синхронизацией. – awill

0

Как известно, структуры являются статическими, а классы - это динамические типы данных. Таким образом, в SV, в то время как мы используем класс, мы можем назначать значения в принципе или в других условиях. Но для структуры мы не можем инициализировать любую переменную внутри декларации.

Смежные вопросы