• 硅芯思见:UDP是干什么的?


    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时需要注意以下几点:

    • UDP只能包含一个输出端口和多个输入端口(时序逻辑UDP最多可以有9个输入端口,组合逻辑UDP最多可以有10个输入端口);
    • UDP中不存在双向端口,即端口列表中不存在inout;
    • UDP端口都是标量类型,不能是向量类型;
    • 时序逻辑UDP必须对输出端口增加reg类型声明,组合逻辑UDP中不能出现reg声明;
    • 时序逻辑UDP可以包含“initial-end”用来对输出端口初始化;
    • UDP的行为是通过“table-endtable”描述的,表格中描述的行为符号来自UDP符号表(下文给出),table的输入与UDP端口列表中输入端口的顺序一致,切记不是端口声明顺序;
    • table中如果没有对应匹配的输入组合模式,则输出“x”;
    • table中相同的输入如果对应不同的输出是矛盾非法的;
    • UDP的例化类似于其他Verilog中内置的基本门,例化名可有可无;

    1.3 UDP符号汇总

    UDP中的状态表都是基于以下符号完成状态的跳转和产生对应的输出的:

    符号

    意义

  • 相关阅读:
    计算机启动过程(万字长文)
    算法笔记-第十章-图的存储
    WIN10 python安装并执行脚本
    Kafka在企业级应用中的实践
    CentOS虚拟机装完了,不能粘贴window命令行?不能上网?
    电子电气架构设计需要考虑哪些方面?
    nVisual网络可视化管理平台在金融行业的应用价值分析
    MMDetection 使用示例:从入门到出门
    mysql(十)mysql主从复制--主库切换
    The kgdb Patches
  • 原文地址:https://blog.csdn.net/m0_46345246/article/details/127677320