EDA设计技术教学课件 第8章 用户定义原语_第1页
EDA设计技术教学课件 第8章 用户定义原语_第2页
EDA设计技术教学课件 第8章 用户定义原语_第3页
EDA设计技术教学课件 第8章 用户定义原语_第4页
EDA设计技术教学课件 第8章 用户定义原语_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第8章用户定义原语用户定义原语设计并定义新的原语单元的集合称为用户定义原语(User-DefinedPrimitives,UDP)两种类型:组合用户定义原语和时序用户定义原语组合用户定义原语的输入决定输出,常用于组合逻辑电路的建模;用户定义原语的输出由当前的输出和输入决定,常用于触发器、锁存器等时序电路的建模。UDP的基本形式{attribute_instance}primitiveudp_identifier(udp_port_list);udp_port_declaration;//端口申明

initialstatements;//初始化语句table//状态表table_entity;endtableendprimitive确认符前缀端口列表UDP的结构形式前缀{attribute_instance}是对该UDP的属性进行例化的可选项,UDP的属性是由用户定义原语自身特性决定的。例如,指定输入端口的总线宽度参数属性{*Size=8*}。udp_identifier是确认符,每个用户定义原语必须指定唯一的确认符。例如定义一个确认符为DFF的D触发器:primitiveDFF(Q,D,clk,rst); …… endprimitiveUDP的端口列表udp_port_list是端口列表VerilogHDL规定UDP只能有一个确定的输出端口输出端口的逻辑取值可以是0、1或x,不允许z;允许一个或多个输入端口,输入端口接受0、1或x逻辑值,z值当作x处理。括号内的端口列表,第一个端口必须是输出端口,之后以逗号分隔各输入端口,例如:DFF(Q,D,clk,rst);UDP的端口列表输入端口和输出端口分别以关键词input和output申明紧随其后是端口数据类型申明和端口名时序逻辑的UDP应申明输出端口的数据类型为寄存器类型组合逻辑UDP不允许寄存器类型的端口类型申明。不允许申明双向端口。例:D触发器的用户定义原语 primitiveDFF(Q,D,clk,rst); inputD,clk,rst; outputQ; regQ; …… endprimitiveUDP的语句体由初始化语句和状态表组成。initial和table/endtable语句是用户定义原语的语句体,是对模块的功能进行描述的主体。primitiveDFF(Q,D,clk); inputD,clk; outputQ; regQ;

initialQ=1'b0;

table //clkDQnQn+1

r0:?:0; r1:?:1; f?:?:-; ?*:?:-;

endtable endprimitive用户定义原语的表符号VerilogHDL规定了丰富的表符号,UDP的状态表描述语句和表达式需遵循表中的符号规定。符号符号意义备注0逻辑值0

1逻辑值1

x未知逻辑值x两类UDP的输入口都允许使用逻辑值x?代替任意0,1或x输出口不允许使用?符号b代替任意0或1输入口允许,但输出口不允许-无变化仅允许用于时序逻辑UDP的输出口(vw)v至w的变化仅允许用于输入口,v和w可以在0,1,x,?和b之间任意取值。*等同于(??)输入口的任意变化r等同于(01)或↑输入口的上升沿f等同于(10)或↓输入口的下降沿p代替任意(01)、(10)或(x1)输入口的任意一种正边沿n代替任意(10)、(1x)或(x0)输入口的任意一种负边沿UDP的状态表状态表介于关键词table和endtable之间由规定的符号组成多行描述语句每一行输入端口与输出端口之间的表符号,以冒号分隔每一行语句以分号结尾。组合逻辑UDP每一行表示不同的输入和组合输出,输入端口的表达顺序与端口列表的顺序必须保持一致可以与端口申明的顺序不同primitiveUDP_or(Z,A,B);inputA,B;outputZ;

table//AB:Z00:0;?1:1;1?:1;11:1;endtableendprimitive例:或门用户定义原语[例1]本例定义的UDP是一个2选1多路选择器。primitiveMUX2x1(Z,Hab,Bay,Sel);//Z是输出端,其余为输入端,注意输入端的排列顺序outputZ;inputHab,Bay,Sel;table/*表中每一行的值是按照HabBaySel:Z的顺序排列的,前3个输入端的排列顺序应与端口列表中的顺序相同*/0?1:0;//HabBaySel:Z1?1:1;//HabBaySel:Z?00:0;//HabBaySel:Z?10:1;//HabBaySel:Z00x:0;//HabBaySel:Z11x:1;//HabBaySel:ZendtableendprimitiveUDP的使用方法和内置基元的完全相同。【例2】调用例1定义好的2选1多路选择器,用3个这样的UDP可以组合成4选1多路选择器,如图所示。ABCD程序如下:moduleMUX4x1(Z,A,B,C,D,Sel);inputA,B,C,D;input[2:1]Sel;outputZ;MUX2x1

(TL,A,B,Sel[1]),(TP,C,D,Sel[1]),(Z,TL,TP,Sel[2]);//3个UDPendmodule可见,UDP的使用方法和内置基元的使用方法完全相同,本例是通过6个输入端A、B、C、D、Sel[1]、Sel[2]和1个输出端Z以及2个线网TL、TP实现3个UDP连接的。时序逻辑UDP时序逻辑UDP分为

电平敏感型UDP边沿敏感型UDP电平敏感型UDP的时序行为与组合逻辑UDP类似。区别在于电平敏感型UDP的输出端口为寄存器类型,而且状态表的每一行多出一列,即在输入和下一个输出Qn+1之间增加一列表符号,用于表达UDP的当前输出值Qn。primitiveDLatch(Q,En,D);inputEn,D;outputQ;regQ;

table//EnD:Qn:Qn+101:?:1;00:?:0;1?:?:-;endtableendprimitive例:D锁存器用户定义原语。当锁存控制端En为高电平时,下一状态输出为保持状态;反之,下一状态为数据接收状态,即Qn+1=D。“?”表示Qn+1的值仅与En和D有关。上述状态表中,在输入口En和D、输出口Qn+1之间,插入一列当前Qn输出,以“?”表示Qn+1的值仅与En和D有关。如下语句:?:?:-;可解释为:当锁存控制端En为逻辑1,则无论输入口D和当前输出Qn的值为何值,下一个状态的输出为数据锁存状态。在本例状态表中,Qn一直取任意值,属多余项。边沿敏感型UDP边沿敏感型UDP的每一行只能指定一个输入口的上升沿(01)、下降沿(10)等变化对,或按表符号r、f、p或n等表达变化对。状态表每一行的变化说明语句中,不能出现两个或两个以上的变化对。(01)00:?:0;//(1),合法的变化说明r00:?:0;//(2),与语句(1)等效(01)(01)0:?:0;//(3),两个端口的变化对说明,非法表达rr0:?:0;//(4),两个端口的变化对说明,非法表达表符号的顺序状态表中,表符号的安排顺序分别是输入端口、输出端口的当前状态、输出端口的下一个状态,输入端口与端口列表的顺序一致。用户定义原语允许在状态表内混合使用电平敏感和边沿敏感的多分支变化说明,当输入变化时,先执行边沿敏感分支,之后再执行电平敏感分支。当两种类型的分支指定不同的输出值,结果由电平敏感分支决定。例:边沿触发JK触发器UDP电平敏感和边沿敏感混合描述的边沿触发JK触发器。如表所示,边沿触发JK触发器定义如下具有四种类型的功能:置1功能:Qn+1=1,当且仅当变化说明序号(1)、(2)或(8);置0功能:Qn+1=0,当且仅当变化说明序号(3)、(4)或(7);反向保持功能:Qn+1=Qn',当且仅当变化说明序号(5)、(9)或(10);正向保持功能:Qn+1=Qn,当且仅当变化说明序号(6)、(11)、(12)或(13);变化说明序号clkJKSDRDQnQn+1功能1???01?1Qn+1=12???*1113???10?0Qn+1=04???1*005↑000001Qn+1=Qn'6↑0011?-Qn+1=Qn7↑0111?0Qn+1=08↑1011?1Qn+1=19↑111101Qn+1=Qn'10↑111110Qn+1=Qn'11↓?????-Qn+1=Qn12b*????-Qn+1=Qn13b?*???-Qn+1=Qn电平敏感描述边沿敏感描述primitiveudp_edge_jkff(Q,clk,J,K,SD,RD);inputclk,J,K,SD,RD;outputQ;regQ;table//clkJKSDRD:Qn:Qn+1???01:?:1;//置位???*1:1:1;???10:?:0;//复位???1*:0:0;r0000:0:1;//时钟驱动变化

说明分支r0011:?:-;r0111:?:0;r1011:?:1;r1111:0:1;r1111:1:0;f????:?:-;b*???:?:-;//JK变化说明分支b?*??:?:-;endtableendprimitive变化说明序号clkJKSDRDQnQn+1功能1???01?1Qn+1=12???*1113???10?0Qn+1=04???1*005↑000001Qn+1=Qn'6↑0011?-Qn+1=Qn7↑0111?0Qn+1=08↑1011?1Qn+1=19↑111101Qn+1=Qn'10↑111110Qn+1=Qn'11↓?????-Qn+1=Qn12b*????-Qn+1=Qn13b?*???-Qn+1=Qn时序UDP的初始化时序用户定义原语输出端口的初始化用于指定输出端口的初始状态,以关键词initial开始,紧随过程赋值语句对输出端口赋值,其基本形式为:initialoutput_port=initialization_value;initial语句布置在table之前,表达式左侧的output_port是UDP内申明的reg型输出端口,表达式右侧的initialization_value是初始化值。UDP初始化语句内不允许使用延时赋值。例:指定RS触发器输出端口的初始值为1由于UDP只有一个输出端口,因此只允许出现一条初始化赋值语句,赋值语句的操作对象是reg寄存器类型的输出端口,端口确认符必须一致。赋值表达式的右侧只能使用1'b1、1'b0、1'bx、1或0。primitiveSRFF(Q,S,R);outputQ;regQ;inputS,R;

initialQ=1'b1;//输出端口的初始值为逻辑1table//SR:Qn:Qn+110:?:1;f0:1:-;0r:?:0;0f:0:-;11:?:0;endtableendprimitive用户定义原语建模在系统层次化结构中,用户定义原语是一个独立的模块,与其他模块有相同的语法层次和相应的抽象级别。在源文件的模块结构中,用户定义原语可以出现在模块内任何需要例化的地方,当然不能超出模块的module和endmodule范围。UDP建模的基本形式udp_name[drive_strength][delay2][attribute_instance]udp_instance(output_port,input_port);udp_name:用户定义原语模块名,例如SR触发器UDP的SRFF;drive_strength用于指定UDP的驱动强度;delay2用于指定UDP的延时赋值;attribute_instance用于例化UDP的属性;上述三项与模块的相关规则相同。udp_instance是模块中被指定的UDP例化名;output_port和input_port是分别与模块连接的输出端口和输入端口列表,其连接顺序必须与模块内相关端口的顺序保持一致。(1)设计T触发器用户定义原语udp_tff。

设清零控制端Clear,Q为触发器输出端,下降沿触发。Clear为高电平时,输出端Q被清零。若Clear为高电平,则时钟脉冲下降沿到来时,输出端反向保持,即Qn+1=Qn'。primitiveudp_tff(Q,T,Clear);inputT,Clear;outputQ;regQ;

table//TClear:Qn:Qn+1?1:?:0;//清零?(10):?:-;//正向保持,Qn+1=Qn(10)0:1:0;//反向保持,Qn+1=Qn'(10)0:0:1;//反向保持,Qn+1=Qn'(0?)0:?:-;//正向保持,Qn+1=Qnendtableendprimitive例化用户定义原语(2)例化用户定义原语,设计计数器模块。其中,驱动强度和延时赋值设置为默认值,输入输出端口连接采用串行级联方式。将第i个T触发器udp_inst(i)的输出Count[i]与第i+1个T触发器udp_inst(i+1)的输入端(T端)连接在一起udp_tffudp_inst(i)(Count[i],Count[0],Clear);udp_tffudp_inst(i+1)(Count[2],Count[i],Clear);例化用户定义原语moduleCounter(Count,T,Clear);inputT,Clear;inout[7:0]Count;reg[7:0]Count;udp_tff

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论