Verilog提供了大量的内置基本门,例如:and/or等,但是我们在具体的仿真验证过程中经常会遇到大量ASIC Foundry提供的各种库单元,其中使用了大量自定义的原语单元,在仿真过程中有时需要对这些原语单元实现的功能有所了解,本文将以具体示例讲述原语的特点和使用方法,以期在仿真过程中不为此困扰。
在使用Verilog构建模型时除了可以使用Verilog提供的大量内置基本门之外,用户还可以使用大量的自定义有用户特点的原语,即自定义原语(UDP:User Defined Primitive)这些原语的结构和使用方法与基本门类似。在构建原语时需要注意,UDP只能有一个输出端口,可以有一个或者多个输入,其中可以使用的状态只有三种“0,1,x”,如果输入端口出现了“z”,那么在原语内部该值将被当做“x”处理。常用的自定义原语可以分为两类:
组合逻辑UDP:输出由输入决定;
时序逻辑UDP:输出由输入和当前输出状态决定;
1 UDP基本概念
1.1 UDP的定义
UDP与module在Verilog中处于同一级别,不依赖于其他module的定义,即UDP不能再module中定义(即不能出现在“module-endmodule”之间),但是可以像module一样在其他地方定义然后被例化引用。
1.2 UDP格式

在具体使用和定义UDP时需要注意以下几点:
1.3 UDP符号汇总
UDP中的状态表都是基于以下符号完成状态的跳转和产生对应的输出的:
| 符号 |
意义 |
|