玩转UDP用户原语,这篇文章就够了【Verilog高级教程】

简介: 玩转UDP用户原语,这篇文章就够了【Verilog高级教程】

cb39282b8fb147aaa3a300f70d43c278.png


一、写在前面


本专栏为作者在 【数字IC手撕代码】 【数字IC笔试面经分享】 【数字IC工具解析】 以外开设的第四个独立专栏,旨在学习并提供有关Verilog硬件描述语言中非基础性的高阶语法特性知识,因本身专栏的独特定位,因此作者并不会涉及基础Verilog语言如阻塞式非阻塞赋值,过程块,数据类型等内容;同时受限于作者知识有限,本专栏也不会涉及System Verilog的相关内容,若按照IEEE的相关标准来看,本专栏将会聚焦Verilog-2005,即“IEEE Std 1364™-2005”以及之前的有关内容,提供相关的IC设计领域语法特性。以下为Verilog的进阶框图,有更多学习需求的读者可以检索相关英文标准进行学习。

image.png


二、什么是UDP用户原语


UDP用户原语是一种嵌入在IEEE Verilog Standard中的建模方法,我们在【Verilog高级教程】灭霸打个响指的功夫,看懂Verilog多维数组的举例中,在wire型数组中对门电路(异或门,与门,或门)进行例化连接,实际上,Verilog内嵌了诸如非门,异或门,与非门等基础门电路

image.png


那假如我们需要调使用一个复杂门电路(比如十输入与非门)呢?这里我们就需要使用到UDPs了。UDPs的出现,给予了IC工程师定义自己设计的基本逻辑元件的能力。但是UDP语句没有办法综合,因此它更多的使用在验证功能上。


UDPs可以分为以下三类,他们三类的区别主要体现在对于table的描述上,后文就讲解什么是table。

  • 组合逻辑UDP
  • 时序逻辑UDP
  • 混合型UDP


三、UDP的构成


一个基本的UDP结构如下,primitive和endprimitive类似于module和endmodule,端口声明的两种方式与module中的端口声明也是一样的,唯一的不同是primitive中的table和endtable,table和endtable中罗列的内容描述了UDP的功能,相当于从输入到输出的真值表,在组合逻辑UDP和时序逻辑UDP中我们还有更为详细的例子

primitive name(/*在括号内定义端口*/);  
table
/*在这里定义输入与输出的的关系*/
endtable
endprimitive


  • 需要注意的是,UDP可以有多个输入,但是只能存在一个输出
  • 同时在端口声明的时候,输出端口需要处在第一个的位置上
  • inout双向端口在UDP中不被允许,同时无论是输入端口还是输出端口都必须是标量(即一位位宽)
  • 时序逻辑UDP,输出端口都需要定义成reg型,这是语法的规定
  • UDP支持0,1,x三个状态,但是不支持高阻态z


3.1 组合逻辑UDP

以下的例子定义了一个multiplexer,在control的控制下,选择dataA或dataB作为输出,以下的自定义原语也同样存在更简单的写法,我们可以通过引入"?"符号 来减少所需语句数量,但作者在这里不再赘述,需要注意的是,IEEE-1364中我们同样规定没有必要定义每一种组合逻辑的结果,没有列举的输入情况,默认输出为不定态x

primitive multiplexer (mux, control, dataA, dataB);
output mux;
input control, dataA, dataB;
table
// control dataA dataB mux
0 1 0 : 1 ;
0 1 1 : 1 ;
0 1 x : 1 ;
0 0 0 : 0 ;
0 0 1 : 0 ;
0 0 x : 0 ;
1 0 1 : 1 ;
1 1 1 : 1 ;
1 x 1 : 1 ;
1 0 0 : 0 ;
1 1 0 : 0 ;
1 x 0 : 0 ;
x 0 0 : 0 ;
x 1 1 : 1 ;
endtable
endprimitive


3.2 时序逻辑UDP

以下的例子定义了一个上升沿触发的D触发器,以下例子的具体含义为当clock信号的上升沿到来的时候,data值被输送到q,(01)为从0到1,其他的符号含义可以参考文章最后的UDP符号表进行参考

  • 对比组合逻辑UDP,我们可以发现,时序逻辑UDP的table中多了一列初态(对应q的那一列),这就是二者之间的区别
primitive d_edge_ff (q, clock, data);
output q; reg q;
input clock, data;
table
// clock data q q+
// obtain output on rising edge of clock
(01) 0 : ? : 0 ;
(01) 1 : ? : 1 ;
(0?) 1 : 1 : 1 ;
(0?) 0 : 0 : 0 ;
// ignore negative edge of clock
(?0) ? : ? : - ;
// ignore data changes on steady clock
? (??) : ? : - ;


3.3 UDP的初始化

同时,我们在时序逻辑UDP中可以定义输出的初始化值,使用initial定义输入初始化值的案例如下,这其中需要解释的是r和f的含义,这里的r与f意味着rising/falling edge on input.即上升沿与下降沿,其他的符号同样可以参考最后罗列UDP符号表。

primitive srff (q, s, r);
output q; reg q;
input s, r;
initial q = 1'b1;
table
// s r q q+
1 0 : ? : 1 ;
f 0 : 1 : - ;
0 r : ? : 0 ;
0 f : 0 : - ;
1 1 : ? : 0 ;
endtable
endprimitive


四、UDP符号表


f71eb40e4bf246caae871c898af1608d.png


五、往期Verilog高级教程文章


  • 多维数组:灭霸打个响指的功夫,看懂Verilog多维数组
  • clog2系统函数: 关于Verilog自动计算位宽的系统函数$clog2,这些是你不得不知道的
  • UDP用户原语:玩转UDP用户原语,这篇文章就够了
  • $monitor系统函数:放学前的最后几分钟,看懂Verilog中的monitor系统函数
  • generate语句:一把王者的时间,学会Verilog中的generate语句
  • parameter常量:玩转parameter与localparameter,这篇文章就够了
  • inout双向端口:通俗易懂的带你解读inout双向端口
  • task与function区别:芯片人必会的task与function区别详解
相关文章
|
4月前
|
网络协议 程序员 网络架构
UDP报文结构详解:一篇文章带你搞懂
**UDP报文格式简述:**包含源端口、目的端口、长度和检验和4个字段,用于传输层无连接通信。IP报文格式关键点:版本、首部长度、服务类型、总长度、标识、TTL和首部检验和,确保数据在网络中的路由与可靠性。了解这些基础对于网络协议学习至关重要。
258 2
|
2月前
|
存储 网络协议 算法
UDP 协议和 TCP 协议
本文介绍了UDP和TCP协议的基本结构与特性。UDP协议具有简单的报文结构,包括报头和载荷,报头由源端口、目的端口、报文长度和校验和组成。UDP使用CRC校验和来检测传输错误。相比之下,TCP协议提供更可靠的传输服务,其结构复杂,包含序列号、确认序号和标志位等字段。TCP通过确认应答和超时重传来保证数据传输的可靠性,并采用三次握手建立连接,四次挥手断开连接,确保通信的稳定性和完整性。
83 1
UDP 协议和 TCP 协议
|
3月前
|
消息中间件 网络协议 算法
UDP 和 TCP 哪个更好?
【8月更文挑战第23天】
158 0
|
7天前
|
网络协议 算法 网络性能优化
|
1天前
|
缓存 负载均衡 网络协议
面试:TCP、UDP如何解决丢包问题
TCP、UDP如何解决丢包问题。TCP:基于数据块传输/数据分片、对失序数据包重新排序以及去重、流量控制(滑动窗口)、拥塞控制、自主重传ARQ;UDP:程序执行后马上开始监听、控制报文大小、每个分割块的长度小于MTU
|
18天前
|
网络协议 前端开发 物联网
TCP和UDP区别?
本文首发于微信公众号“前端徐徐”,详细介绍了TCP和UDP两种传输层协议的核心概念、连接性和握手过程、数据传输和可靠性、延迟和效率、应用场景及头部开销。TCP面向连接、可靠、有序,适用于网页浏览、文件传输等;UDP无连接、低延迟、高效,适用于实时音视频传输、在线游戏等。
31 1
TCP和UDP区别?
|
9天前
|
Web App开发 缓存 网络协议
不为人知的网络编程(十八):UDP比TCP高效?还真不一定!
熟悉网络编程的(尤其搞实时音视频聊天技术的)同学们都有个约定俗成的主观论调,一提起UDP和TCP,马上想到的是UDP没有TCP可靠,但UDP肯定比TCP高效。说到UDP比TCP高效,理由是什么呢?事实真是这样吗?跟着本文咱们一探究竟!
37 10
|
20天前
|
网络协议 网络性能优化 C#
C# 一分钟浅谈:UDP 与 TCP 协议区别
【10月更文挑战第8天】在网络编程中,传输层协议的选择对应用程序的性能和可靠性至关重要。本文介绍了 TCP 和 UDP 两种常用协议的基础概念、区别及应用场景,并通过 C# 代码示例详细说明了如何处理常见的问题和易错点。TCP 适用于需要可靠传输和顺序保证的场景,而 UDP 适用于对延迟敏感且可以容忍一定数据丢失的实时应用。
25 1
|
25天前
|
网络协议 Linux 网络性能优化
Linux C/C++之TCP / UDP通信
这篇文章详细介绍了Linux下C/C++语言实现TCP和UDP通信的方法,包括网络基础、通信模型、编程示例以及TCP和UDP的优缺点比较。
31 0
Linux C/C++之TCP / UDP通信
|
28天前
|
存储 网络协议 Java
【网络】UDP和TCP之间的差别和回显服务器
【网络】UDP和TCP之间的差别和回显服务器
56 1