ошибка: невозможно преобразовать ‘bool’ в ‘svLogic *’ в назначении

Мы работаем над системой verilog DPI для вызовов. При составлении C++ файл мы получаем ошибки, как это:

ошибка: невозможно преобразовать ‘bool’ в ‘svLogic *’ в назначении

Вот svLogic является переменной с 4 состояниями.

Симулятор VCS имеет предопределенную функцию в методе DirectC vc_putScalarгде vc_putScalar находится «Передает значение скалярного регистра или бита в vc_handle по ссылке». Vc_handle является входной или выходной переменной в функции. С VCS мы могли бы использовать: vc_putScalar(mem_req_rdy, mm->req_cmd_ready());

Мы работаем над симулятором квестов Modelsim, поэтому DirectC не будет работать. Мы устали, чтобы изменить vc_putScalar в w.r.t DPI IEEE Std 1800-2012 стандарты.
Мы изменили предопределенную логику функции на это:
mem_req_rdy = mm->req_cmd_ready(); Здесь mem_req_rdy — это svLogic, а req_cmd_ready — это bool.

-2

Решение

Учитывая, что у вас было:

vc_putScalar(mem_req_rdy, mm->req_cmd_ready());

Я предполагаю, что mem_req_rdy имеет тип указателя svLogic * (так как из названия функции vc_putScalar, кажется, что он намеревается изменить значение в mem_req_rdy). Таким образом, вам нужно разыменовать указатель, как в следующем выражении:

*mem_req_rdy = mm->req_cmd_ready();
0

Другие решения

ошибка: невозможно преобразовать ‘bool’ в ‘svLogic *’ в назначении

svLogic кажется указателем. Вы не можете назначить bool значение переменной указателя.

TYPE* p = /* initialized somehow */;
bool b = /* initialized somehow */;
p = b;  // YOU CANNOT DO THAT
0

Вы можете пересмотреть свой интерфейс DPI. Ваш код C действительно должен иметь дело с логикой с 4 состояниями?

Во многих случаях не требуются процедуры доступа для доступа к аргументам, передаваемым между двумя языками. Это всегда верно, если передаваемые типы являются C-совместимыми (int, byte, string и неупакованные массивы и структуры этих типов).

Например, этот пример DirectC

SV:
extern "C" void foo(input bit A, output bit B);
C:
void foo(vc_handle A, vc_handle B)
{ vc_scalar value;
value = vc_getSalar(A);
vc_putScalar(B,value);
}

переводит в этот код DPI

SV:
import "DPI-C" void foo(input bit A, output bit B);
C:
void foo(svBit A, svBit *B)
{ svBit value;
value = A;
*B = value;
}

Мы настоятельно рекомендуем пользователям Questa DPI использовать ключ vlog -dpiheader filename.h, а затем их код C должен #include этот файл. Затем компилятор обнаружит любые несоответствия в синтаксисе обработки аргументов.

0

svLogic — это определение типа unsiged char, увидеть IEEE Std 1800-2012 § H.10.1.1 Скаляры типа бит и логика

Для преобразования bool в svLogic вам нужна функция, а не прямое назначение. Если значение bool равно true, тогда svLogic должен быть присвоен sv_1, Если значение bool равно falue, тогда svLogic должен быть присвоен sv_0,

Примерно так должно работать:

mem_req_rdy = mm->req_cmd_ready() ? sv_1 : sv_0;
0
По вопросам рекламы [email protected]