Verilog 如何定义具有多个输出的组合用户定义原语(UDP)?

Verilog 如何定义具有多个输出的组合用户定义原语(UDP)?,verilog,system-verilog,modelsim,Verilog,System Verilog,Modelsim,是否可以定义具有多个输出的UDP?我甚至尝试按如下方式生成bundle输出,但它会产生一些错误。 我正在尝试为一个8位前缀加法器编写代码,我想将该操作定义为UDP,以计算G和P的值。 代码如下: primitive preaddprimitive(pgout,p2,p1,g2,g1); input p2,p1,g2,g1; output pgout; table // p2 p1 g2 g1 : {pout,gout} 0 ? 0 ? : 00; ? 0 1 ? : 01; 0 ?

是否可以定义具有多个输出的UDP?我甚至尝试按如下方式生成bundle输出,但它会产生一些错误。 我正在尝试为一个8位前缀加法器编写代码,我想将该操作定义为UDP,以计算G和P的值。 代码如下:

primitive preaddprimitive(pgout,p2,p1,g2,g1);
input p2,p1,g2,g1;
output pgout;
table
// p2 p1 g2 g1 : {pout,gout}
  0 ? 0 ? : 00;
  ? 0 1 ? : 01;
  0 ? 1 ? : 01;
  1 0 0 0 : 00;
  1 0 0 1 : 01;
  1 1 0 0 : 10;
  1 1 0 1 : 11;
  1 1 1 ? : 11;
endtable
endprimitive
这是错误消息:

接近“0”:语法错误,意外的“0”,应为“;”

我试图定义输出,但它犯了同样的错误。
我在modelsim 10.c上测试了代码。

不,不可能定义具有多个输出的UDP。根据IEEE标准1800-2012第29.2节概述:

和第29.3.1节UDP标头

您可以使用
模块
而不是
原语

Each UDP has exactly one output, which can be in one of three states: 0, 1, or x.
All ports of a UDP shall be scalar; vector ports are not permitted.