Verilog语法: 必须掌握的User-defined primitives (UDPs)
来源:eetop发布时间:2023-09-141465浏览
询问 AI1、UDP的使用场景User-defined primitives (UDPs) 翻译过来就是用户自定义原语,常常用于构建组合逻辑模型和时序逻辑模型。我们编写Verilo代码时,定义寄存器使用的是reg 和always@(*clk*),运行VCS RTL仿真时,VCS能够识别此类信号是寄存器,能够模拟其行为模型。然而在使用VCS进行网表仿真时,此时网表中寄存器名称是这样的SDFF*_XXXX,其中SDFF_XXXX是每个寄存器类型对应的标准Cell的名称。SDFF_XXXX是每个Fab厂家独有的名称,且在Verilog规范中并没有相关术语,那么VCS等EDA仿真工具是如何识别并且模拟其器件行为的呢?实际上进行网表仿真时,EDA工具会读取对应SDFF_XXXX的UDPs模型,从而进行SDFF_XXXX的行为模拟。
UDP模型在描述层级上与module/endmodule属于同一等级,因此primitive/endprimitive不能出现在module/endmodule内部,就像不能在一个模块里出现module~module~endmodule~endmodule.
每个UDP不支持定义inout类型的信号时序UDP的输出信号应该使用reg申明。组合UDP的输出信号不能使用reg申明。 时序UDP可以使用initial语句定制仿真开始前output信号的初始值
组合UDP模型中,如果输入信号状态组合在状态表中没有指定,则输出会是X。

请注意:信号列表中,输出信号out在第一个。状态表中,out处于最后一列。


参考文档:IEEE P1364-2005/D3
2、UDPs的语法说明
2.1. 2种类型
UDPs的分为combinational UDP(组合逻辑)和 sequential UDP(时序逻辑)。combinational UDP用于构建组合逻辑模型,常见有mux模块.sequential UDP用于构建寄存器和Latch模型,sequential UDP可以是边沿触发,也可以是电平触发。2.2.基本语法规范
UDP建模使用primitive表示建模开始,类似module,endprimitive表示建模结束,类似endmodule。UDP模型在描述层级上与module/endmodule属于同一等级,因此primitive/endprimitive不能出现在module/endmodule内部,就像不能在一个模块里出现module~module~endmodule~endmodule.
每个UDP有且只有一个输出,并且输出只有三种状态,0, 1, or x,不支持Z状态。每个UDP可以由多个输入信号,如果输入信号为z,则当做X对待。时序UDP至少允许9个输入信号,组合UDP至少允许10个输入信号。//语法错误modulexxx();primitiveendprimitiveendmodule
每个UDP不支持定义inout类型的信号时序UDP的输出信号应该使用reg申明。组合UDP的输出信号不能使用reg申明。 时序UDP可以使用initial语句定制仿真开始前output信号的初始值
2.3.UDP state table(状态表)
UDP模型使用状态表来描述模型的行为,状态表中使用的各类变量见表40。例如r表示上升沿,f表示下降沿。*表示数值改变。 状态表中的每行以分号结束。状态表本质上就是一个输入信号/输出信号组合的列表。组合UDP状态表中有一个冒号“:”,用于隔离输入和输出信号。时序UDP状态表中有当前状态,还有下一个状态,因此有2个冒号“:”,用于隔离输入、输出(当前状态)和下一个状态。组合UDP模型中,如果输入信号状态组合在状态表中没有指定,则输出会是X。

2.4.UDP结构
本节可忽略,直接看案例
3、组合UDP案例
请注意:信号列表中,输出信号out在第一个。状态表中,out处于最后一列。

4、电平触发时序UDPs

5、边沿触发时序UDP
6、小技巧
7、总结
参考文档:IEEE P1364-2005/D3
新闻来源:eetop,文中所述为作者独立观点,不代表icspec立场。更多精彩资讯请下载icspec App。如对本稿件有异议,请联系微信客服specltkj。

