Tsegorah 0 16 марта, 2022 Опубликовано 16 марта, 2022 · Жалоба Есть конструктор: function new (const ref UDDCP_header h, const ref int unsigned d[$], bit v[$], int b, int a); Так он работает: int be, aa; ... be = 100; aa = 250; trans_single = new(h[i],d[i],valids_single,be,aa); А так нет: trans_single = new(h[i],d[i],valids_single,100,250); Моделсим при компиле говорит, что "The expression "100" is illegal for use with ref argument "b"". Почему? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nice_vladi 1 16 марта, 2022 Опубликовано 16 марта, 2022 (изменено) · Жалоба 1 hour ago, Tsegorah said: Есть конструктор: ... Так он работает: ... А так нет: ... Почему? Укажите явно направление для аргументов b, a. Что-то типа: function new (const ref UDDCP_header h, const ref int unsigned d[$], bit v[$], input int b, input int a); В противном случае, modelsim рассматривает аргументы как указатели (ref). ЗЫ. Ответ на вопрос "почему"- описано в стандарте: Quote Function declarations default to the formal direction input if no direction has been specified. Once a directionis given, subsequent formals default to the same direction. In the following example, the formal arguments aand b default to inputs, and u and v are both outputs: function logic [15:0] myfunc3(int a, int b, output logic [15:0] u, v);...endfunction Изменено 16 марта, 2022 пользователем nice_vladi Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lmx2315 5 17 марта, 2022 Опубликовано 17 марта, 2022 · Жалоба 15 часов назад, Tsegorah сказал: Моделсим при компиле говорит, что "The expression "100" is illegal for use with ref argument "b"". Почему? расположите переменные так чтобы ref был последним function new (bit v[$], int b, int a,const ref UDDCP_header h, const ref int unsigned d[$]); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться