概述

Verilog HDL语言提供了一种扩展基元的方法,允许用户自己定义元件(User Defined Primitives,UDP)。通过UDP,可以把一块组合逻辑电路或者时序逻辑电路封装在一个UDP内,并把这个UDP作为一个基本的元件来使用。需要注意的是,UDP不能综合,只能用于仿真。

UDP的定义与调用

UDP定义的语法和模块定义类似,但由于UDP和模块同属于同级设计,因此,UDP定义不能出现在模块之内。UDP定义使用由关键词primitive和endprimitive封装起来的一段代码,这段代码定义了该UDP的功能。这种功能的定义是通过表来实现的,即在这段代码中有一段处于 关键词table和endtable之间的表,用户可以通过设置该表来规定UDP的功能。

UDP的定义格式如下:

primitive<元件名称>(<输出端口名>,<输入端口名1>,输入端口名1>...输入端口名n>);

输出端口类型声明(output);

输入端口类型声明(input);

输出端口寄存器 变量说明(reg);

元件初始状态说明(initial);

table

<table 表项1>;

<table 表项2>;

......

<table 表项n>;

endtable

endprimitive

与Verilog HDL中的模块相比,UDP具有以下特点:

(1)UDP的输出端口只能有一个,且必须位于端口列表的第一项。只有输出端口能定义为REG类型。

(2)UDP的输入端口可有多个,一般时序电路UDP的输入端口最多9个,组合电路UDP的输入端口可多至10个。

(3)所有端口变量的位宽必须是1比特。

(4)在table表项中,只能出现0,1,x这三种状态,z将被认为是x状态。

根据UDP包含的基本逻辑功能,可以将UDP分为组合电路UDP、时序电路UDP及混合电路UDP,这几类UDP的差别主要体现在table表项的描述上。

UDP的调用和verilog HDL中模块的调用方法相似,通过位置映射。其语法格式如下:

UDP名  例化名(连接端口1信号名,连接端口2信号名,连接端口3信号名,...);

UDP定义的全加器

组合逻辑电路的功能列表类似真值表,规定了不同的输入值和对应的输出值,表中每一行的形式是"output ,input1,input2...",排列顺序与端口列表中的顺序相同。组合电路UDP的输入端口可多至10个。如果某个输入,输出组合没有定义输出,那么就把这种情况的输出置位x。

3选1多路选择器

?代表不必关心相应变量的具体值。

UDP原语中可以使用的值

UDP还可以描述具有电平触发和边沿触发特性的时序电路。时序电路拥有内部状态序列,其内部状态必须用寄存器变量进行建模,该寄存器的值就是时序电路的的当前状态,它的下一个状态是由放在基本功能列表中的状态转换表决定的,而且寄存器的下一个状态就是这个时序电路UDP的输出值。所以时序电路UDP由两部分组成——状态寄存器和状态列表,定义时序电路UDP的工作也分为两部分——初始化状态寄存器和描述状态列表。

在时序电路的UDP描述中,01、0x、x1代表着信号的上升沿。

通过verilog hdl语言给出D触发器的UDP描述

表项(01)表示从0转换到1,表项(0x)表示从0转换到x,表项(?0)表示从任意值转换到0,表项(??)表示任意转换。对于未定义的转换,输出默认为x,假定D_Edge_FF为UDP定义,则它现在就能够像基本门一样在模块中使用。


版权所有权归卿萃科技 杭州FPGA事业部,转载请注明出处

作者:杭州卿萃科技ALIFPGA

原文地址:杭州卿萃科技FPGA极客空间 微信公众号


扫描二维码关注杭州卿萃科技FPGA极客空间


转载于:https://www.cnblogs.com/alifpga/p/8078555.html

Verilog中的UDP相关推荐

  1. verilog中数组的定义_开源仿真工具Icarus Verilog中的verilog parser

    前面提到用flex和bison开处理命令行参数,回顾一下:开源仿真工具Icarus Verilog中的命令行参数处理方法. 那么Verilog的parser又是怎么实现的呢?简单地说,与做命令行参数的 ...

  2. verilog 中的可综合与不可综合

    一.什么是综合? Verilog HDL或VHDL都只是一种硬件的描述语言,并且允许在不同的抽象层次上对电路进行建模.VerilogHDL侧重于电路级,可以在门级和寄存器传输级(RTL)描述硬件,也可 ...

  3. Verilog中可综合及不可综合语句概述

    Verilog中可综合及不可综合语句概述 2017-06-02 23:51 379人阅读 评论(0) 收藏 举报  分类: FPGA(4)  Verilog中可综合及不可综合语句概述 Verilog硬 ...

  4. Verilog中generate语法和作用

    Verilog中generate语句的用法 在Verilog-2001中新增了语句generate,通过generate循环,可以产生一个对象(比如一个元件或者是一个模块)的多次例化,为可变尺度的设计 ...

  5. linux如何关闭udp端口,如何阻止linux RHEL7中的udp端口范围(How to block udp ports range in linux RHEL7)...

    如何阻止linux RHEL7中的udp端口范围(How to block udp ports range in linux RHEL7) 需要测试使用UDP端口范围从5000到60,000英寸的应用 ...

  6. FPGA的设计艺术(18)如何使用Verilog中的数组对存储器进行建模?

    前言 Verilog中的二维数组很有用,可以使用for以及generate for配合二维数组进行使用,可以代替大量寄存器的场合,其实大量同类寄存器可以使用存储器进行代替,Verilog中可以使用二维 ...

  7. Verilog初级教程(21)Verilog中的延迟控制语句

    文章目录 前言 正文 延迟控制语句 事件控制语句 Named Events Event or operator 往期回顾 参考资料及推荐关注 前言 Verilog中的延迟控制有两种类型–延迟和事件表达 ...

  8. Verilog初级教程(20)Verilog中的`ifdef 条件编译语句

    文章目录 前言 正文 语法 示例 Testbench文件 往期回顾 参考资料及推荐关注 前言 `ifdef条件编译语句在逻辑设计中还是很常见的,但也常见一些滥用的情况,这应该避免. 应该在什么情况下使 ...

  9. Verilog初级教程(15)Verilog中的阻塞与非阻塞语句

    文章目录 前言 正文 阻塞赋值 非阻塞赋值 往期回顾 参考资料以及推荐关注 前言 本文通过仿真的方式,形象的说明阻塞赋值以及非阻塞赋值的区别,希望和其他教程相辅相成,共同辅助理解. 正文 阻塞赋值 阻 ...

最新文章

  1. ROS中cv_bridge如何用python3进行编译
  2. CNN 的一些可视化方法
  3. Win32 API 显示鼠标坐标位置
  4. 长沙望城:当好“贴心人” 扎牢“人民根” 坚守“云阵地”
  5. python中用来回溯异常的模块_python学习笔记(异常)
  6. leetcode 1006. 笨阶乘
  7. 动环监控系统接线图_机房动环监控系统报价
  8. java 线程停止在那个为止_java停止线程
  9. qt mysql分页控件_Qt分页布局与切分窗口的实现
  10. SQLi LABS Less 25a 联合注入+布尔盲注+时间盲注
  11. NFC是什么功能?有哪些使用场景?
  12. openstack学习之路-python运维(network)
  13. 简历制作器App使用条款
  14. 常用分析模型---RFM客户价值模型
  15. 一年的时间,我出版了一本实体书
  16. 【GD32F310开发板试用】利用I2C接口通过温湿度传感器HDC1080读取当前环境温湿度
  17. PC与IOS outlook客户端配置大全——(163邮箱、QQ邮箱、谷歌gmail邮箱)
  18. IOS-升级102 全局监听SendEvent
  19. ios底部栏设计规范_设计干货:底部导航栏规范设计总结
  20. 全屋网络覆盖方案笔记

热门文章

  1. Spring Cloud(二) Consul 服务治理实现
  2. canvas做的图片查看器1
  3. vSphere Data Protection 6.1.2部署与配置
  4. weblogic服务器启动报错
  5. 基于Netty的http服务器
  6. ajax查询数据的举例
  7. Codeforces Gym 100187M M. Heaviside Function two pointer
  8. Kuskal/Prim POJ 1789 Truck History
  9. 液态金属和Liquidmetal公司
  10. MongoDB3.4 版本新节点同步的一点惊喜