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

时间:2017-03-25 12:11:20

标签: 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 ? 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',期待&#39 ;;'

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

1 个答案:

答案 0 :(得分:2)

不,无法定义具有多个输出的UDP。根据IEEE Std 1800-2012,第29.2节概述

Each UDP has exactly one output, which can be in one of three states: 0, 1, or x.

和第29.3.1节 UDP标头

All ports of a UDP shall be scalar; vector ports are not permitted.

您可以使用module代替primitive