首页 UDP用户自定义元件

UDP用户自定义元件

举报
开通vip

UDP用户自定义元件基本元件与用户自定义元件(UDP)——Verilog行为仿真王淑敏632085208013信息学院一、什么是UDP?Verilog语言提供了一整套标准的原语,例如and、nand、or、nor和not等,它们是该语言的一部分,即通常所说的内置原语。然而,在设计过程中,设计者有时希望使用自己编写的原语。Verilog语言具有定义这种自定义原语的能力,这种原语就是UDP(即用户自定义原语的英文缩写)。UDP是自我完备的,在UDP中不能调用(实例引用)其它模块或者其它原语。1.1基本元件及其用法图1基本元件——基本门1....

UDP用户自定义元件
基本元件与用户自定义元件(UDP)——Verilog行为仿真王淑敏632085208013信息学院一、什么是UDP?Verilog语言提供了一整套标准的原语,例如and、nand、or、nor和not等,它们是该语言的一部分,即通常所说的内置原语。然而,在 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 过程中,设计者有时希望使用自己编写的原语。Verilog语言具有定义这种自定义原语的能力,这种原语就是UDP(即用户自定义原语的英文缩写)。UDP是自我完备的,在UDP中不能调用(实例引用)其它模块或者其它原语。1.1基本元件及其用法图1基本元件——基本门1.1基本元件及其用法图2基本元件——开关级1.2用户自定义元件(UDP)定义:UDP的定义以关键字primitive作为开始,然后指定原语名称、输出端口和输入端口。在端口声明部分将端口声明为output或者input。在表示时序的UDP中,输出端口必须被声明为reg型,而且还需有一条可选的initial语句,用于初始化时序逻辑UDP的输出端口。UDP状态表是UDP中最重要的部分,它以关键字table开始, 以关键字endtable结束。状态表定义了如何根据输入状态和当前状态得到输出值,该表也是一个查找表,类似于逻辑真值表。原语定义以关键字endprimitive结束。1.2用户自定义元件(UDP)UDP定义的组成:1.2用户自定义元件(UDP)UDP定义必须遵循以下几条规则: 1.UDP只能采用标量(即1位)输入端口,允许有多个输入端口; 2.UDP只能允许一个标量(即1位)输出端口。输出端口必须出现在端口列表的第一个位置,绝对不允许有多个输出端口; 3.在声明部分,输出端口以关键字output声明。因为表示时序逻辑的UDP需要保存状态,所以其输出端口必须声明为reg类型; 4.输入端口以关键字input声明;  1.2用户自定义元件(UDP)5.表示时序逻辑的UDP中的状态可以用initial语句初始化。该语句是可选的。它将一个1位的值赋给reg类型的输出;6.状态表的项可以包含值0、1或者x。UDP不能处理z值。传送给UDP的z值被当作x值; 7.UDP与模块同级,因而UDP不能在模块内部定义,但可以在模块内部调用(实例引用); 8.UDP不支持inout端口。1.3UDP的类型1) 表示组合逻辑的UDP - 输出仅取决于输入信号的组合逻辑。四选一的多路选择器是典型的表示组合逻辑的UDP的例子; 2) 表示时序逻辑的UDP - 下一个输出值不但取决于当前的输入值还取决于当前的内部状态,锁存器和触发器是两个典型的表示时序逻辑的UDP的例子。1.4 UDP表中的缩写符号  Verilog提供了电平和跳变沿的缩写符号,以便用简洁的方式描述UDP表。下表 总结 初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf 了所有的缩写符以及它们的含义。二、表示组合逻辑的UDP  表示组合逻辑的UDP根据UDP内部所列出的表示输入和输出关系的状态表,由输入确定输出值。2.1表示组合逻辑的UDP的定义状态表是UDP定义中最重要的部分。 用表示与门的UDP模型来解释状态表最容易使读者理解。下面让我们不使用Verilog语言所提供的与门,自己来定义一个表示与门的原语,并将其命名为udp_and。2.1表示组合逻辑的UDP的定义例1用户自定义原语 udp_and   //原语名和端口列表  primitive  udp_and (out, a, b);  //端口声明语句 output out;    //表示组合逻辑时一定不能声明为reg(寄存器)型  input a, b;    //输入端口声明  //状态表定义;以关键词 table 开始  table          // a   b   :   out;        0   0   :   0;          0   1   :   0;         1   0   :   0;        1   1   :   1;  endtable    // 状态表定义结束   endprimitive    //  自定义原语udp_and 的定义结束2.2状态表的项  为了理解状态表项的表达 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 ,仔细观察一下udp_and的状态表。表示组合逻辑的UDP状态表中的每一行的语法形式如下:  …..  : ;  2.2状态表的项 关于状态表项需要注意以下几点: 1.状态表每一行中  的顺序必须与它们在端口列表中的出现顺序相同。设计UDP时必须牢记这点,这点非常重要。设计者经常搞错输入的顺序,因而得到错误的输出值; 2.输入和输出以“:”分隔; 3.状态表的每行以“;”结束; 4.能够产生确定输出值的所有输入项组合都必须在状态表中列出。否则,如果在状态表各行中找不到与这组输入对应的项,相应的输出就是x。 2.2状态表的项如果a=x并且b=0,Verilog语言提供的与门其输出为0,但是udp_and的输出为x,这是因为相应的输入组合在定义udp_and的状态表的行项中无法找到。这也就是说,状态表的说明不完整。为了理解怎样完整地说明UDP中所有可能的组合,在例2中,我们定义了自己的表示或门的UDP:udp_or。这个自己定义的表示或门的UDP完整地说明了所有可能的输入组合情况。2.2状态表的项例2用户自定义原语udp_or   primitive udp_or(out, a, b);  output out; input a, b;  table   //  a   b   :   out;       0   0   :    0;       0   1   :    1;        1   0   :    1;        1   1   :    1; x   1   :    1; 1   x   :    1; endtable  endprimitive  注意本例覆盖了输出不是x的所有可能的a和b组合。UDP中不能使用值z , 输入端的z值被看作x值。2.3 无关项的缩写表示上例中,当a, b两个输入中其中一个为1时,不论另一个输入是什么值,输出都是1。不影响输出值的输入项称为无关项,可以用符号“ ? ”来表示。符号“ ? ”被自动展开为0、1或者x。可以用符号“ ? ”重新改写上例中表示或逻辑关系的UDP:udp_or。   primitive udp_or(out, a, b);  output out; input a, b;  table   //  a   b   :   out;       0   0   :   0;       1   ?   :   1;   //  ?  展开为0, 1, x       ?   1   :   1;   //  ?  展开为0, 1, x       0   x   :   x;       x   0   :   x;endtable  endprimitive2.4  UDP原语的调用(实例引用)上面讨论了怎样定义表示组合逻辑的UDP。再看一下如何调用UDP。使用前面定义的udp_and和udp_or设计一个一位全加器。例3为一位全加器的Verilog代码。2.4  UDP原语的调用(实例引用)例3udp原语的调用 //定义一位全加器 module  fulladd (sum, c-out, a, b, c, c_in ); output  sum,  c_out; input a,  b,  c_in; //内部连线类型声明 wire   s1, c1, c2; //引用逻辑门原语 xor (s1, a, b);      //使用verilog内部原语xor udp_and (c1, a, b );     //使用UDP  xor (sum, s1, c_in);     //使用verilog内部原语xor udp_and (c2, s1, c_In);     //使用UDP udp_or (c_out, c2, c1); //使用UDP endmodule 2.5 表示组合逻辑的UDP举例  前面已经讨论了两个小的表示组合逻辑的UDP的例子:udp_and和udp_or。这里我们再设计一个更大的表示组合逻辑的UDP:四选一的多路选择器。改用UDP来描述这个多路选择器。注意,因为多路选择器只有一个输出端口,所以它用UDP来表示是合适的。图3给出了多路选择器的方块图和真值表。2.5 表示组合逻辑的UDP举例图3用UDP表示四选一多路器2.5 表示组合逻辑的UDP举例例4 四选一多路选择器的Verilog 语言UDP描述 // 以UDP形式来表示四选一多路选择器 primitive mux4_to_1 (out, i0, i1, i2, i3, s1, s0);  output out; input i0, i1, i2, i3; input s1, s0;  table   //  i0  i1  i2   i3   s1   s0   :  out       1   ?    ?    ?    0    0    :  1        0   ?    ?    ?    0    0    :  0        ?   1    ?    ?    0    1    :  1        ?   0    ?    ?    0    1    :  0        ?   ?    1    ?    1    0    :  1        ?   ?    0    ?    1    0    :  0        ?   ?    ?    1    1    1    :  1        ?   ?    ?    0    1    1    :  0        ?   ?    ?    ?    x    ?    :  x        ?   ?    ?    ?    ?    x    :  x  endtable  endprimitive三、表示时序逻辑的UDP表示时序逻辑的UDP与表示组合逻辑的UDP在定义形式和行为功能上有所不同。表示时序逻辑的UDP的不同之处在于以下几点:1) 表示时序逻辑的UDP的输出必须声明为 reg 类型; 2) 表示时序逻辑的UDP的输出可以用initial语句初始化; 3) 状态表的格式也稍有不同;   4) 表示时序逻辑的UDP的状态表的每行由三部分组成,它们是:输入部分、当前状态部分和输出状态部分。这三部分由冒号(:)分隔; 5) 状态表的输入项可以是电平或者跳变沿的形式; 6) 当前状态就是输出寄存器的当前值; 7) 下一个状态由输入和当前状态计算得出。下一状态的值就成为输出寄存器的新值; 8) 表示时序逻辑的UDP必须在状态表各行的输入项中列出所有可能的(输入)组合,以避免出现不确定的输出值。  三、表示时序逻辑的UDP如果表示时序逻辑的UDP是对输入信号电平敏感的,就称为电平敏感的表示时序逻辑的UDP。如果表示时序逻辑的UDP是对输入信号跳变沿敏感的,就称为边沿敏感的表示时序逻辑的UDP。3.1电平敏感的表示时序逻辑的UDP电平敏感的UDP根据输入电平改变状态。锁存器是最典型的电平敏感UDP的例子。图4所示的是一个简单的带清零 (clear) 端的锁存器:图4带清零端的电平敏感锁存器3.1电平敏感的表示时序逻辑的UDP在上图所示的电平敏感锁存器中,如果清零端clear的输入值是1,那么该锁存器的输出端q恒为0。如果清零端clear的输入值是0,那么当时钟输入端clock为1时,输出端q等于输入端d;当时钟输入端clock为0时,输出端q保持原值。可以以例5所示的UDP形式描述锁存器。(注意:该锁存器状态表中的破折号表示保持原值不变。)3.1电平敏感的表示时序逻辑的UDP例5对电平敏感的UDP的Verilog语言描述                            //以UDP形式编写电平敏感型锁存器 primitive latch(q, d, clock, clear);  output q; reg q;    //将q声明为reg类型用于内部数据存储 input d, clock, clear;  //表示时序逻辑的UDP的初始化,只允许有一条initial语句  initial     q = 0;//状态表 table   //d  clock  clear  : q  :  q+        ?    ?      1    :  ?  :  0    //清零条件,q+是新的输出值        1    1      0    :  ?  :  1    //将data的值1锁存到q中l       0    1      0    :  ?  :  0    //将data的值0锁存到q中     ?    0    0    :  ?  :  - ;   //如果clock=0,保持原状态不变  endtable  endprimitive 3.2 边沿敏感的表示时序逻辑的UDP边沿敏感的表示时序逻辑的UDP根据边沿跳变与/或输入电平改变其状态。跳变沿触发的触发器是最典型的边沿敏感的时序UDP的例子。分析图5所示的带清零端(clear)的由下降沿触发的D触发器。图5 带清零端的时钟下降沿敏感的D触发器3.2 边沿敏感的表示时序逻辑的UDP在上图所示的边沿敏感触发器中,如果清零端clear的输入值是1,那么该锁存器的输出端q恒为0。如果清零端clear的输入值是0,那么该D触发器执行正常功能。在时钟输入端clock的下降沿,即从1到0的跳变沿,输出端q从输入端d取值。如果时钟输入端clock跳变到一个不定状态或者时钟输入端上有一个上升沿,那么输出端q保持原值不变。同样,如果输入端d改变而clock保持稳定不变,输出端q也保持原值不变。例6所示范的是用Verilog语言描述的表示D触发器的UDP。3.2 边沿敏感的表示时序逻辑的UDP例6 带清零端的时钟下降沿触发的D触发器://编写边沿敏感的表示时序逻辑的UDP primitive edge_dff  (output reg q = 0, input d, clock, clear);  table     //  d  clock  clear  :  q  :  q+  ;       ?    ?    1    :  ?  :  0 //如果clear = 1,那么output = 0        ?    ?   (10)  :  ?   :  -     //忽略clear的负跳变沿          1    (10)  0    :  ?   :  1     //在clock的下降沿锁存数据         0    (10)  0    :  ?   :  0     // clock ?    (1x)  0    :  ?   :  -  // clock变化到不定状态时,q保持不变 ?    (0?)  0    :  ?   :  -    //忽略clock的正跳变沿        ?    (x1)  0    :  ?   :  -    //忽略clock的正跳变沿      (??)   ?   0    :  ?   :  -    //当clock不变时,忽略d的任何变化  endtable  endprimitive3.2 边沿敏感的表示时序逻辑的UDP例6中,边沿跳变的解释如下: · (10) 表示从逻辑1到逻辑0的负跳变沿; · (1x) 表示从逻辑1到不定状态(x)的跳变; · (0?) 表示从逻辑0到0、1或者x的跳变,这里隐含正跳变沿; · (??) 表示信号值从0、1或者x到0、1或者x的任意跳变。四、 UDP设计指南设计功能块时,最重要的是决定使用module还是使用用户自定义原语来建模。下面给出一些在两者之间进行选择的指导原则。  1)UDP只能进行功能建模。它们不能对电路时序和制造 工艺 钢结构制作工艺流程车尿素生产工艺流程自动玻璃钢生产工艺2工艺纪律检查制度q345焊接工艺规程 (例如CMOS,TTL,ECL)进行建模。使用UDP的主要目的是以简洁的形式建立模块功能部分的模型,而module总是用于建立完整的模块模型,包括电路时序和制造工艺。  2)只有唯一输出端口的模块,才能使用UDP建模。如果设计的模块含有一个以上输出端口,只能使用module对其建模。  3)UDP输入端口数目的上限由用户使用的Verilog仿真器决定。然而,对Verilog仿真器的最低 要求 对教师党员的评价套管和固井爆破片与爆破装置仓库管理基本要求三甲医院都需要复审吗 是它至少要能够处理具有9个输入端口的表示时序逻辑的UDP和10个输入端口的表示组合逻辑的UDP。  4)UDP一般是使用内存中的查找表来实现的。随着输入端口数目的增加,查找表的输入组合项数呈指数型增长。结果,处理UDP的内存需求也以同样的方式增长。所以,输入端口数目过多的模块不宜使用UDP实现。  5)UDP并不总是设计功能模块的最佳方式。有时将功能模块设计成module更容易。例如,以UDP的方式设计8选1的多路选择器并不可取,因为UDP表的输入项数太多。而用数据流描述方式或行为描述方式要简单得多。决定是否使用UDP表示功能模块时,复杂度是重要的考虑因素。 四、 UDP设计指南下面给出几点编写UDP状态表的指导原则。  1)应该尽可能完整地描述UDP的状态表。必须在状态表中列出能够产生确定输出值的所有输入项组合。否则,如果某个特定的输入项组合没有被指定输出值,这个输入项组合的缺省输出值就是x。商业库中经常使用这一特性来减小状态表输入项的数目。  2)应该尽可能地使用缩写符来表示状态表输入项组合。缩写符使UDP的描述更简明。不过,Verilog仿真器会在其内部展开状态表的输入项组合。因此,使用缩写符并没有减少内存需求。  3)电平敏感的状态表的输入项其优先级高于沿敏感的状态表的输入项。若沿敏感的输入项和电平敏感的输入项在同一个输入端口发生冲突,则输出由电平敏感的状态表的输出项决定,因为它的优先级高于沿敏感的状态表的输出项。五、总结1)用户定义原语(UDP)通过使用查找表来定义自己的Verilog原语。UDP提供了一种便利的方式来设计这种特定的功能模块。  2)UDP只能具有一个输出端口。UDP与module在同一个层次定义。UDP的调用(实例引用)方法与门级原语的调用方法完全相同。状态表是UDP说明中最重要的部分。  3)UDP可以用来表示组合的或者时序的逻辑关系。表示时序逻辑的UDP可以是边沿敏感的或者电平敏感的。  4)表示组合逻辑的UDP用于描述组合电路,该电路的输出是输入信号纯组合逻辑的函数。  五、总结5)表示时序逻辑的UDP用于定义具有时序控制端口的模块。像锁存器和触发器这样的模块都可以用时序UDP描述。时序UDP以状态机的方式建模。它含有当前状态和下一状态。下一状态也就是UDP的输出。边沿敏感和电平敏感的描述可以混合出现在同一个UDP中。  6)缩写符使得UDP状态表入口更加简洁。应该尽可能地使用缩写符。  7)描述功能块时,重要的是决定究竟用UDP还是用module来实现它。必须全面考虑内存的需求和复杂度,做必要的折中。延时模块——Verilog行为仿真一、#延时例1:二、门延时例2:三、延时说明块例3:
本文档为【UDP用户自定义元件】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
秋天的云
暂无简介~
格式:ppt
大小:219KB
软件:PowerPoint
页数:0
分类:企业经营
上传时间:2021-09-11
浏览量:5