FPGA基础知识-用户自定义原语

目录

学习目标

学习内容

1.UDP的组成

2.UDP定义规则

3.表示组合逻辑的UDP

4.表示时序逻辑的UDP

5.UDP表中的缩写符号

6.UDP设计指南 

学习时间

学习总结


学习目标:

提示:这里可以添加学习目标

理解编写UDP的规则,明白UDP的各个组成部分。

学会编写表示时序和表示组合逻辑的两种不同的UDP,

理解UDP的调用(实例引用)方法。

为了使UDP的行为表达得更加简洁和易懂,应记住定义UDP的各种缩写符号。


学习内容:

提示:这里可以添加要学的内容

1.UDP的组成

    UDP 的定义以关键字primitive作为开始,然后指定原语名称、输出端口和输人端口。在端口声明部分将端口声明为output或者input。在表示时序的UDP中,输出端口必须被声明为reg类型,而且还需要有一条可选的initial语句,用于初始化时序逻辑UDP的输出端口。UDP状态表是UDP中最重要的部分,它以关键字table 开始,以关键字endtable结束。状态表定义了如何根据输人状态和当前状态得到输出值,该表也是一个查找表,类似于逻辑真值表。原语定义以关键字endprimitive 结束。

2.UDP定义规则

1. UDP只能采用标量(即1位)输入端口,允许有多个输入端口。
2. UDP只能允许一个标量(即1位)输出端口。输出端口必须出现在端口列表的第一个位
置,绝对不允许有多个输出端口。
3.在声明部分,输出端口以关键字output声明。因为表示时序逻辑的 UDP需要保存状态,
所以其输出端口必须声明为reg类型。
4.输入端口以关键字input声明。
5.表示时序逻辑的UDP中的状态可以用initial语句初始化。该语句是可选的,它将一个1
位的值赋给reg类型的输出。
6.状态表的项可以包含值0,1或x。UDP不能处理z值。传送给UDP的z值被当做×值。

3.表示组合逻辑的UDP

表示组合逻辑的UDP根据UDP内部所列出的表示输入和输出关系的状态表.由输人确定输出值。

状态表是UDP定义中最重要的部分。用表示与门的UDP模型来解释状态表最容易使读者理解。下面让我们不使用Verilog语言所提供的与门.自己来定义一个表示与门的原语,并将其命名为udp_and。

1.状态表每一行中<input#>的顺序必须与它们在端口列表中的出现顺序相同。设计UDP时必须牢记这一点,这一点非常重要。设计者经常搞错输入的顺序,因而得到错误的输出值。

2.输入和输出以“:”分隔。
3.状态表的每一行以“;”结束。
4.能够产生确定输出值的所有输入项组合都必须在状态表中列出。否则,如果在状态表各
行中找不到与这组输入对应的项,相应的输出就是x。商业模型中经常使用默认输出值x注意,udp_and 的状态表不处理a或b 的值为x的情况。

4.表示时序逻辑的UDP

表示时序逻辑的UDP与表示组合逻辑的UDP在定义形式和行为功能上有所不同。表示时序逻辑的UDP的不同之处在于以下几点:

1.表示时序逻辑的UDP的输出必须声明为reg类型.

2.表示时序逻辑的UDP的输出可以用initial语句初始化。

3.状态表的格式也稍有不同。

5.UDP表中的缩写符号

6.UDP设计指南 

UDP只能进行功能建模,不能对电路时序和制造工艺(例如CMOS,TIL和 ECL)进行建模。使用UDP的主要目的是以简洁的形式建立模块功能部分的模型,而module总是用于建立完整的模块模型,包括电路时序和制造工艺。

只有惟一输出端口的模块,才能使用UDP建模。如果设计的模块含有一个以上输出端口,只能使用module对其建模。

UDP输人端口数目的上限由用户使用的Verilog仿真器决定。然而,对Verilog仿真器的最低要求是它至少要能够处理具有9个输入端口的表示时序逻辑的UDP和具有10个输入口的表示组合逻辑的UDP。

·UDP一-般是使用内存中的查找表来实现的。随着输入端口数目的增加,查找表的输入组合项数呈指数级增长。结果,处理 UDP 的内存需求也以同样的方式增长。所以,输入端口数目过多的模块不宜使用UDP实现。

UDP并不总是设计功能模块的最佳方式。有时将功能模块设计成module更容易。例如,以UDP的方式设计八选一的多路选择器并不可取,因为UDP表的输入项数太多。而用数据流描述方式或行为描述方式要简单得多。决定是否使用UDP表示功能模块时,复杂度是重要的考虑因素。


学习时间:

提示:这里可以添加计划学习的时间

例如:

20230619


学习总结:

提示:这里统计学习计划的总量

用户自定义原语(UDP)通过使用查找表来定义自己的Verilog 原语。UDP提供了一种便利的方式来设计这种特定的功能模块。

UDP只能具有一个输出端口。UDP与module在同---个层次中定义。UDP的调用(实例引用)方法与门级原语的调用方法完全相同。状态表是UDP说明中最重要的部分。

表示组合逻辑的UDP用于描述组合电路。该电路的输出只是输人信号的纯组合逻辑函数。表示时序逻辑的UDP用于定义具有时序控制端口的模块。像锁存器和触发器这样的模块都可以用时序UDP描述。时序UDP以状态机的方式建模,它含有当前状态和下--状态。下一状态也就是UDP的输出。边沿敏感和电平敏感的描述可以混合出现在同一个UDP中。

缩写符使得UDP状态表项更加简洁。应该尽可能地使用缩写符。

描述功能模块时,重要的是决定究竟用UDP还是用module来实现它。必须全面考虑内存的需求和复杂度,做必要的折中。

猜你喜欢

转载自blog.csdn.net/whm128/article/details/131294819
今日推荐