Verilog有内建原语如门,传输管,开关等,这些都是相当小的原语,如果我们需要更为复杂的原语,verilog提供了UDP,也就是用户定义原语(User Defined Primitives). 使用UDP可以建模组合电路和时序电路。
UDP以保留字primitive开始,以endprimitive结束,并紧接着原语的Ports/terminals。这与module的定义类似。UDP应该定义在module和endmoudle外面。
View Code

1 //This code shows how input/output ports
2 // and primitve is declared
3 primitive udp_syntax (
4 a, // Port a
5 b, // Port b
6 c, // Port c
7 d // Port d
8 );
9 output a;
10 input b,c,d;
11 
12 // UDP function code here
13 endprimitive

在上面的语法中,udp_syntax是原语的名字,包含端口a,b,c,d。

  1. 一个UDP只可以包含一个输出和最多10个输入。
  2. 输出端口应该是第一个端口,然后才是一个或多个输入端口。
  3. 所有的UDP都是标量,也就是,向量端口不允许。
  4. UDP不能是双向端口。
  5. 时序UDP的输出端需要额外声明为reg类型。
  6. 组合UDP的输出端声明为reg类型是非法的。