第12章.用户自定义原语教学课件PPT.ppt

上传人:春哥&#****71; 文档编号:25007547 上传时间:2022-07-09 格式:PPT 页数:20 大小:1.05MB
返回 下载 相关 举报
第12章.用户自定义原语教学课件PPT.ppt_第1页
第1页 / 共20页
第12章.用户自定义原语教学课件PPT.ppt_第2页
第2页 / 共20页
点击查看更多>>
资源描述

《第12章.用户自定义原语教学课件PPT.ppt》由会员分享,可在线阅读,更多相关《第12章.用户自定义原语教学课件PPT.ppt(20页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、完整版教学课件完整版教学课件第12章.用户自定义原语EDA技术与Verilog HDL语言第十二章 用户自定义原语Page 3本章学习目标本章学习目标 理解编写理解编写UDP的规则,明白的规则,明白UDP的各个组成部分。的各个组成部分。 学会编写表示时序和表示组合逻辑的两种不同的学会编写表示时序和表示组合逻辑的两种不同的UDP。 理解理解UDP的调用(实例引用)方法。的调用(实例引用)方法。 为使为使UDP的行为表达得更加简洁和易懂,应记住定义的行为表达得更加简洁和易懂,应记住定义UDP的各种缩写符号。的各种缩写符号。 阐述编写阐述编写UDP的指导原则。的指导原则。Page 412.1 UDP

2、的基础知识的基础知识 Verilog语言提供了一整套标准的原语,例如and,nand,or,nor和not等,它们是该语言的一部分,即通常所说的内置原语。然而在设计过程中,设计者有时希望使用自己编写的原语。Verilog语言具有定义这种自定义原语的能力,这种原语就是用户自定义原语(User-Defined Primitive,UDP)。 UDP是自成体系的,在UDP中不能调用其他模块或者其他原语。UDP的调用方式和门级原语的调用方式完全相同。 UDP的类型有两种: 1表示组合逻辑的UDP。输出仅取决于输入信号的组合逻辑。四选一的多路选择器是典型的表示组合逻辑的UDP的例子; 2表示时序逻辑的U

3、DP。下一个输出值不但取决于当前的输入值,还取决于当前的内部状态。锁存器和触发器是两个典型的表示时序逻辑的UDP的例子。 UDP定义的组成部分和编写规则。 Page 512.1.1 UDP定义的组成定义的组成UDP的定义以关键字primitive作为开始,然后指定原语名称、输出端口和输入端口。在端口声明部分将端口声明为output或者input。 在表示时序的UDP中,输出端口必须被声明为reg类型,而且还需要有一条可选的initial语句,用于初始化时序逻辑UDP的输出端口。 UDP状态表是UDP中最重要的部分,它以关键字table开始, 以关键字endtable结束。状态表定义了如何根据输

4、入状态和当前状态得到输出值,该表也是一个查找表,类似于逻辑真值表。 原语定义以关键字endprimitive结束。 Page 612.1.2 UDP的定义规则的定义规则 UDP定义必须遵循以下几条规则: 1UDP只能采用标量(即1位)输入端口,允许有多个输入端口。 2UDP只能允许一个标量(即1位)输出端口。输出端口必须出现在端口列表的第一个位置,绝对不允许有多个输出端口。 3在声明部分,输出端口以关键字output声明。因为表示时序逻辑的UDP需要保存状态,所以其输出端口必须声明为reg类型。 4输入端口以关键字input声明。 5表示时序逻辑的UDP中的状态可以用initial语句初始化。

5、该语句是可选的,它将一个1位的值赋给reg类型的输出。 6状态表的项可以包含0,1或x。UDP不能处理z值。传送给UDP的z值被当做x值。 7UDP与模块同级,因而UDP不能在模块内部定义,但可以在模块内部调用(实例引用)。UDP的调用方法与门级原语的调用方法完全相同。 8UDP不支持inout端口。Page 712.2.1 表示组合逻辑的表示组合逻辑的UDP的定义的定义 状态表是UDP定义中最重要的部分。用表示与门的UDP模型来解释状态表最容易使读者理解。下面让我们不使用Verilog语言所提供的与门,自己来定义一个表示与门的原语,并将其命名为udp_and。 本例的定义中没有将输出声明为r

6、eg,并且没有initial语句。注意,这里缺少的两部分描述仅用于表示时序逻辑UDP的定义,后面章节将会阐述。 Page 812.2.2 状态表项状态表项 仔细观察一下udp_and的状态表。表示组合逻辑的UDP状态表中的每一行的语法形式如下: 关于状态表项需要注意以下几点: 1状态表每一行中状态表每一行中 的顺序必须与它们在端口列表中的出现顺序的顺序必须与它们在端口列表中的出现顺序相同。相同。设计UDP时必须牢记这一点,这一点非常重要。设计者经常搞错输入的顺序,因而得到错误的输出值。 2输入和输出以“ : ”分隔。 3状态表的每一行以“ ; ”结束。 4能够产生确定输出值的所有输入项组合都必

7、须在状态表中列出。否则,如果在状态表各行中找不到与这组输入对应的项,相应的输出就是x。商业模型中经常使用默认输出值x。注意,udp_and的状态表不处理a或b的值为x的情况。 Page 912.2.2 状态表项(续)状态表项(续) 如果a = x并且b = 0,Verilog语言提供的与门的输出为0,但是udp_and的输出为x,这是因为相应的输入组合在定义udp_and的状态表的行项中无法找到。这也就是说,状态表的说明不完整。 下面的例子中自定义的表示或门的UDP完整地说明了所有可能的输入组合情况。Page 1012.2.3 无关项的缩写表示无关项的缩写表示 上例中,当a和b两个输入的其中一

8、个为1时,不论另一个输入是什么值,输出都是1。不影响输出值的输入项称为无关项,可以用符号“?”来表示。符号“?”被自动展开为0,1或x。可以用符号“?”重新改写上例中表示或逻辑关系的UDP,如下:Page 1112.2.4 UDP原语的调用(实例引用)原语的调用(实例引用) 调用UDP的方法与调用Verilog门级原语相同。使用前面定义的udp_and和udp_or设计一个一位全加器。代码如下:Page 1212.2.5 表示组合逻辑的表示组合逻辑的UDP举例举例 四选一多路选择器四选一多路选择器 因为多路选择器只有一个输出端口,所以它用UDP来表示是合适的。该多路选择器具有六个输入端口和一个

9、输出端口。 Page 1312.3 表示时序逻辑的表示时序逻辑的UDP 表示时序逻辑的UDP与表示组合逻辑的UDP在定义形式和行为功能上有所不同。表示时序逻辑的UDP的不同之处在于以下几点: 1表示时序逻辑的UDP的输出必须声明为reg类型。 2表示时序逻辑的UDP的输出可以用initial语句初始化。 3状态表的格式也稍有不同。 4表示时序逻辑的UDP的状态表的每行由三部分组成,分别是:输入部分、当前状态部分和输出状态部分。这三部分由冒号(:)分隔。 5状态表的输入项可以是电平或者跳变沿的形式。 6当前状态就是输出寄存器的当前值。 7下一个状态由输入和当前状态计算得出。下一状态的值成为输出寄

10、存器的新值。 8表示时序逻辑的UDP必须在状态表各行的输入项中列出所有可能的(输入)组合,以避免出现不确定的输出值。Page 1412.3.1 电平敏感的表示时序逻辑的电平敏感的表示时序逻辑的UDP 电平敏感的UDP根据输入电平改变状态。锁存器是最典型的电平敏感UDP的例子。在下图所示的电平敏感锁存器中,如果清零端clear的输入值是1,那么该锁存器的输出端q恒为0。如果清零端clear的输入值是0,那么当时钟输入端clock为1时,输出端q等于输入端d;当时钟输入端clock为0时,输出端q保持原值。Page 1512.3.2 边沿敏感的表示时序逻辑的边沿敏感的表示时序逻辑的UDP 清零端c

11、lear的输入值是1,那么该锁存器的输出端q恒为0。清零端clear的输入值是0,那么该D触发器执行正常功能。在时钟输入端clock的下降沿,输出端q从输入端d取值。如果时钟输入端clock跳变到一个不确定状态,或者时钟输入端上有一个上升沿,那么输出端q保持原值不变。同样,如果输入端d改变而clock保持稳定不变,输出端q也保持原值不变。Page 1612.3.3 时序时序UDP举例举例 四位二进制行波进位计数器四位二进制行波进位计数器 Page 1712.4 UDP表中的缩写符号表中的缩写符号 Verilog提供了电平和跳变沿的缩写符号,以便用简洁的方式描述UDP表。下表1总结了所有的缩写符

12、以及它们的含义。Page 1812.5 UDP设计指南设计指南 Module 和和 UDP UDP只能进行功能建模,不能对电路时序和制造工艺(例如CMOS,TTL和ECL)进行建模。使用UDP的主要目的是以简洁的形式建立模块功能部分的模型,而module总是用于建立完整的模块模型,包括电路时序和制造工艺。 只有惟一输出端口的模块,才能使用UDP建模。如果设计的模块含有一个以上输出端口,只能使用module对其建模。 UDP输入端口数目的上限由用户使用的Verilog仿真器决定。然而,对Verilog仿真器的最低要求是它至少要能够处理具有9个输入端口的表示时序逻辑的UDP和具有10个输入端口的表

13、示组合逻辑的UDP。 UDP一般是使用内存中的查找表来实现的。随着输入端口数目的增加,查找表的输入组合项数呈指数级增长。结果,处理UDP的内存需求也以同样的方式增长。所以,输入端口数目过多的模块不宜使用UDP实现。 UDP并不总是设计功能模块的最佳方式。有时将功能模块设计成module更容易。例如,以UDP的方式设计八选一的多路选择器并不可取,因为UDP表的输入项数太多。而用数据流描述方式或行为描述方式要简单得多。决定是否使用UDP表示功能模块时,复杂度是重要的考虑因素。 Page 1912.5 UDP设计指南设计指南 UDP状态表状态表 应该尽可能完整地描述UDP的状态表。必须在状态表中列出

14、能够产生确定输出值的所有输入项组合。否则,如果某个特定的输入项组合没有被指定输出值,这个输入项组合的默认输出值就是x。商用库中经常使用这一特性来减小状态表输入项的数目。 应该尽可能地使用缩写符来表示状态表输入项组合。缩写符使UDP的描述更简明。但是,Verilog仿真器会在其内部展开状态表的输入项组合。因此,使用缩写符并没有减少内存需求。 关于电平敏感的状态表的输入项,其优先级高于边沿敏感的状态表的输入项。若边沿敏感的输入项和电平敏感的输入项在同一个输入端口发生冲突,则输出由电平敏感的状态表的输出项决定,因为它的优先级高于边沿敏感的状态表的输出项。Page 2012.6 小结小结 用户自定义原

15、语(UDP)通过使用查找表来定义自己的Verilog原语。UDP提供了一种便利的方式来设计这种特定的功能模块。 UDP只能具有一个输出端口。UDP与module在同一个层次中定义。UDP的调用(实例引用)方法与门级原语的调用方法完全相同。状态表是UDP说明中最重要的部分。 UDP可以用来表示组合的或者时序的逻辑关系。表示时序逻辑的UDP可以是边沿敏感的或者电平敏感的。 表示组合逻辑的UDP用于描述组合电路,该电路的输出只是输入信号的纯组合逻辑函数。 表示时序逻辑的UDP用于定义具有时序控制端口的模块。像锁存器和触发器这样的模块都可以用时序UDP描述。时序UDP以状态机的方式建模,它含有当前状态和下一状态。下一状态也就是UDP的输出。 边沿敏感和电平敏感的描述可以混合出现在同一个UDP中。 缩写符使得UDP状态表项更加简洁。应该尽可能地使用缩写符。 描述功能模块时,重要的是决定究竟用UDP还是用module来实现它。必须全面考虑内存的需求和复杂度,做必要的折中。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 初中资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁