Verilog中的UDP
概述
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相关推荐
- verilog中数组的定义_开源仿真工具Icarus Verilog中的verilog parser
前面提到用flex和bison开处理命令行参数,回顾一下:开源仿真工具Icarus Verilog中的命令行参数处理方法. 那么Verilog的parser又是怎么实现的呢?简单地说,与做命令行参数的 ...
- verilog 中的可综合与不可综合
一.什么是综合? Verilog HDL或VHDL都只是一种硬件的描述语言,并且允许在不同的抽象层次上对电路进行建模.VerilogHDL侧重于电路级,可以在门级和寄存器传输级(RTL)描述硬件,也可 ...
- Verilog中可综合及不可综合语句概述
Verilog中可综合及不可综合语句概述 2017-06-02 23:51 379人阅读 评论(0) 收藏 举报 分类: FPGA(4) Verilog中可综合及不可综合语句概述 Verilog硬 ...
- Verilog中generate语法和作用
Verilog中generate语句的用法 在Verilog-2001中新增了语句generate,通过generate循环,可以产生一个对象(比如一个元件或者是一个模块)的多次例化,为可变尺度的设计 ...
- 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英寸的应用 ...
- FPGA的设计艺术(18)如何使用Verilog中的数组对存储器进行建模?
前言 Verilog中的二维数组很有用,可以使用for以及generate for配合二维数组进行使用,可以代替大量寄存器的场合,其实大量同类寄存器可以使用存储器进行代替,Verilog中可以使用二维 ...
- Verilog初级教程(21)Verilog中的延迟控制语句
文章目录 前言 正文 延迟控制语句 事件控制语句 Named Events Event or operator 往期回顾 参考资料及推荐关注 前言 Verilog中的延迟控制有两种类型–延迟和事件表达 ...
- Verilog初级教程(20)Verilog中的`ifdef 条件编译语句
文章目录 前言 正文 语法 示例 Testbench文件 往期回顾 参考资料及推荐关注 前言 `ifdef条件编译语句在逻辑设计中还是很常见的,但也常见一些滥用的情况,这应该避免. 应该在什么情况下使 ...
- Verilog初级教程(15)Verilog中的阻塞与非阻塞语句
文章目录 前言 正文 阻塞赋值 非阻塞赋值 往期回顾 参考资料以及推荐关注 前言 本文通过仿真的方式,形象的说明阻塞赋值以及非阻塞赋值的区别,希望和其他教程相辅相成,共同辅助理解. 正文 阻塞赋值 阻 ...
最新文章
- ROS中cv_bridge如何用python3进行编译
- CNN 的一些可视化方法
- Win32 API 显示鼠标坐标位置
- 长沙望城:当好“贴心人” 扎牢“人民根” 坚守“云阵地”
- python中用来回溯异常的模块_python学习笔记(异常)
- leetcode 1006. 笨阶乘
- 动环监控系统接线图_机房动环监控系统报价
- java 线程停止在那个为止_java停止线程
- qt mysql分页控件_Qt分页布局与切分窗口的实现
- SQLi LABS Less 25a 联合注入+布尔盲注+时间盲注
- NFC是什么功能?有哪些使用场景?
- openstack学习之路-python运维(network)
- 简历制作器App使用条款
- 常用分析模型---RFM客户价值模型
- 一年的时间,我出版了一本实体书
- 【GD32F310开发板试用】利用I2C接口通过温湿度传感器HDC1080读取当前环境温湿度
- PC与IOS outlook客户端配置大全——(163邮箱、QQ邮箱、谷歌gmail邮箱)
- IOS-升级102 全局监听SendEvent
- ios底部栏设计规范_设计干货:底部导航栏规范设计总结
- 全屋网络覆盖方案笔记