Verilog HDL语言提供了一种扩展基元的方法,允许用户自己定义元件(User Defined Primitives,UDP)。通过UDP,可以把一块组合逻辑电路或时序逻辑电路封装在一个UDP内,并把这个UDP作为一个基本门元件来使用。需要注意的是,UDP是不能综合的,只能用来仿真。
1、定义UDP的语法:
primitive 元件名(输出端口名, 输入端口名1, 输入端口名2,…)
output 输出端口名;
input 输入端口名1, 输入端口名2,…;
reg 输出端口名;initial begin
// 输出端口寄存器或时序逻辑内部寄存器赋初值(0,1,X);
...
endtable
// 输入1 输入2 … : 输出
逻辑值 逻辑值 : 逻辑值;
逻辑值 逻辑值 : 逻辑值;
… … … …;
endtable
endprimitive
2、UDP的调用
UDP名 例化名 (连接端口1信号名, 连接端口2信号名, …, 连接端口n信号名);
3、注意事项:
a. UDP只能有一个输出端,而且必须是端口说明列表的第一项。
b. UDP可以有多个输入端,最多允许10个输入端。
c. UDP所有端口变量必须是标量,也就是必须是1位的。
d. 在UDP的真值表项中,只允许出现0、1、X三种逻辑值,高阻态Z是不允许的。
e. initial语句用于为时序电路内部寄存器赋初值时,只允许赋0、1、X的三种逻辑值,默认值为X.