中国高校课件下载中心 》 教学资源 》 大学文库

《Verilog HDL语言》教程教学资料(参考书籍)第6章 用户定义的原语

文档信息
资源类别:文库
文档格式:PDF
文档页数:5
文件大小:137.08KB
团购合买:点击进入团购
内容简介
在前一章中,我们介绍了Verilog HDL提供的内置基本门本章讲述Verilog HDL指定用户 定义原语UDP的能力。 UDP的实例语句与基本门的实例语句完全相同,即UDP实例语句的语法与基本门的实例 语句语法一致。
刷新页面文档预览

Chinapub.com 下载 第6章用户定义的原语 在前一章中,我们介绍了 Verilog HDl提供的内置基本门。本章讲述 Verilog hdl指定用户 定义原语UDP的能力。 UDP的实例语句与基本门的实例语句完全相同,即UDP实例语句的语法与基本门的实例 语句语法一致 6.1UDP的定义 使用具有如下语法的UDP说明定义UDP。 primitive UDP name (OutputName, List of inputs List of input declarations [Reg declaration] [Initial statement] table endtable endprimitive UDP的定义不依赖于模块定义,因此出现在模块定义以外。也可以在单独的文本文件中 定义UDP UDP只能有一个输出和一个或多个输入。第一个端口必须是输出端口。此外,输出可以 取值0、1或x(不允许取z值)。输入中出现值z以x处理。UDP的行为以表的形式描述。 在UDP中可以描述下面两类行为 1)组合电路 2)时序电路(边沿触发和电平触发) 62组合电路UDP 在组合电路UDP中,表规定了不同的输入组合和相对应的输出值。没有指定的任意组合 输出为x。下面以2-1多路选择器为例加以说明 e MUX2x1(2, Hab, Bay, sel input Hab, Bay, set table Hab Bay se1:z注:本行仅作为注释

下载 第6章 用户定义的原语 在前一章中,我们介绍了Verilog HDL提供的内置基本门。本章讲述 Verilog HDL指定用户 定义原语U D P的能力。 U D P的实例语句与基本门的实例语句完全相同,即 U D P实例语句的语法与基本门的实例 语句语法一致。 6.1 UDP的定义 使用具有如下语法的U D P说明定义U D P。 p r i m i t i v e U D P _ n a m e (OutputName, List_of_inputs) O u t p u t _ d e c l a r a t i o n L i s t _ o f _ i n p u t _ d e c l a r a t i o n s [R e g _ d e c l a r a t i o n] [I n i t i a l _ s t a t e m e n t] t a b l e L i s t _ o f _ t a b e l _ e n t r i e s e n d t a b l e e n d p r i m i t i v e U D P的定义不依赖于模块定义,因此出现在模块定义以外。也可以在单独的文本文件中 定义U D P。 U D P只能有一个输出和一个或多个输入。第一个端口必须是输出端口。此外,输出可以 取值0、1或x(不允许取z值)。输入中出现值z以x处理。U D P的行为以表的形式描述。 在U D P中可以描述下面两类行为: 1) 组合电路 2) 时序电路(边沿触发和电平触发) 6.2 组合电路UDP 在组合电路U D P中,表规定了不同的输入组合和相对应的输出值。没有指定的任意组合 输出为x。下面以2 - 1多路选择器为例加以说明。 p r i m i t i v e MUX2x1 (Z, Hab, Bay, Sel) ; o u t p u t Z; i n p u t Hab,Bay, Sel; t a b l e // Hab Bay Sel : Z 注:本行仅作为注释。 0 ? 1 : 0 ; 1 ? 1 : 1 ; ? 0 0 : 0 ; ? 1 0 : 1 ; 0 0 x : 0 ;

50 Verilog hdl硬停描述语言 China-pubcoM 下载 endtable endprimitive 符?代表不必关心相应变量的具体值,即它可以 是0、1或x。输入端口的次序必须与表中各项的次序smM以飞Msm 匹配,即表中的第一列对应于原语端口队列的第一个 输入(例子中为Hab),第二列是Bay,第三列是Sel。 在多路选择器的表中没有输入组合01x项(还有其它 MuX2xI/Sel[2] 些项):在这种情况下,输出的缺省值为x(对其它未 定义的项也是如此)。 图6-1使用UDP构造的4-1多路选择器 图6-1为使用2-1多路选择器原语组成的4-1多路选择器的示例 module MUX4x1(2, A, B, C, D, sel input A, B, C, D input [2: 1] parameter tRISE 2, tEALL 3 MUX2x1群( tRISE,tFAD↓ (TL, A, B, Sefl]) (TP, C, D, sell]) (z,T,TP,Se四2]) endmodule 如上例所示,在UDP实例中,总共可以指定2个时延,这是由于UDP的输出可以取值0、1 或x(无截止时延) 63时序电路UDP 在时序电路UDP中,使用1位寄存器描述内部状态。该寄存器的值是时序电路UDP的输出值。 共有两种不同类型的时序电路UDP:一种模拟电平触发行为:另一种模拟边沿触发行为。 时序电路UDP使用寄存器当前值和输入值决定寄存器的下一状态(和后继的输出)。 631初始化状态寄存器 时序电路UDP的状态初始化可以使用带有一条过程赋值语句的初始化语句实现。形式如下 initial reg name =0,l, or x 初始化语句在UDP定义中出现。 632电平触发的时序电路UDP 下面是D锁存器建模的电平触发的时序电路UDP示例。只要时钟为低电平0,数据就从输 入传递到输出:否则输出值被锁存 atch (0, Clk, D utput o; input Clk, D

1 1 x : 1 ; e n d t a b l e e n d p r i m i t i v e 字符?代表不必关心相应变量的具体值,即它可以 是0、1或x。输入端口的次序必须与表中各项的次序 匹配,即表中的第一列对应于原语端口队列的第一个 输入 (例子中为 H a b),第二列是 B a y,第三列是 S e l。 在多路选择器的表中没有输入组合 0 1x项(还有其它一 些项 );在这种情况下,输出的缺省值为 x(对其它未 定义的项也是如此 )。 图6 - 1为使用2 - 1多路选择器原语组成的4 - 1多路选择器的示例。 m o d u l e MUX4x1 (Z, A, B, C, D, Sel) ; i n p u t A, B, C, D; i n p u t [2:1] S e l ; o u t p u t Z; p a r a m e t e r tRISE = 2, tFALL = 3; MUX2x1 #(tRISE, tFALL) (TL, A, B, Sel[ 1 ] ) , (TP, C, D, Sel[ 1 ] ) , (Z, TL, TP, Sel[ 2 ] ) ; e n d m o d u l e 如上例所示,在U D P实例中,总共可以指定 2个时延,这是由于U D P的输出可以取值0、1 或x(无截止时延)。 6.3 时序电路UDP 在时序电路U D P中,使用1位寄存器描述内部状态。该寄存器的值是时序电路U D P的输出值。 共有两种不同类型的时序电路 U D P:一种模拟电平触发行为;另一种模拟边沿触发行为。 时序电路U D P使用寄存器当前值和输入值决定寄存器的下一状态 (和后继的输出)。 6.3.1 初始化状态寄存器 时序电路U D P的状态初始化可以使用带有一条过程赋值语句的初始化语句实现。形式如下: i n i t i a l r e g _ n a m e = 0,1,or x; 初始化语句在U D P定义中出现。 6.3.2 电平触发的时序电路UDP 下面是D锁存器建模的电平触发的时序电路 U D P示例。只要时钟为低电平 0,数据就从输 入传递到输出;否则输出值被锁存。 p r i m i t i v e Latch (Q, Clk, D) ; o u t p u t Q; r e g Q; i n p u t Clk, D; t a b l e 50 Verilog HDL 硬件描述语言 下载 图6-1 使用U D P构造的4 - 1多路选择器

第6章用户定义的原语 51 下载 / clk D o(state) o(next) endtable endprimitive ”字符表示值“无变化”。注意UDP的状态存储在寄存器D中。 633边沿触发的时序电路UDP 下例用边沿触发时序电路UDP为D边沿触发触发器建模。初始化语句用于初始化触发器的 状态。 primitive d Edge FF (Q, Cik, Dath output i input Data, Clk initial Q =0; table / CIk Data cstate) o(next) 0x) 1:1 0x) /忽略时钟负边沿: //忽略在稳定时钟上的数据变化 (??) endtable endprimitive 表项(01)表示从0转换到1,表项(0x)表示从0转换到x,表项(?0)表示从任意值(0,1或x)转 换到0,表项(?)表示任意转换。对任意未定义的转换,输出缺省为x。 假定 D Edge FF为UDP定义,它现在就能够象基本门一样在模块中使用,如下面的4位寄 存器所示 input [0: 3] Din: output[0:3]D。ut d Edge FE DLABO (Dout[0], clk, Din[0]) DLABI (Dout[l], clk, Din[1]) DLAB2(Dout[2],Clk, Din[21 DLAB3 (Dout[3],clk, Din[31 634边沿触发和电平触发的混合行为 在同一个表中能够混合电平触发和边沿触发项。在这种情况下,边沿变化在电平触发之

// Clk D Q(State) Q( n e x t ) 0 1 : ? : 1 ; 0 0 : ? : 0 ; 1 ? : ? : - ; e n d t a b l e e n d p r i m i t i v e “-”字符表示值“无变化”。注意U D P的状态存储在寄存器D中。 6.3.3 边沿触发的时序电路UDP 下例用边沿触发时序电路U D P为D边沿触发触发器建模。初始化语句用于初始化触发器的 状态。 p r i m i t i v e D _ E d g e _ F F (Q, Clk, Data) ; o u t p u t Q ; r e g Q ; i n p u t Data, Clk; i n i t i a l Q = 0; table // Clk Data Q(State) Q( n e x t ) (01) 0 : ? : 0 ; (01) 1 : ? : 1 ; (0x) 1 : 1 : 1 ; (0x) 0 : 0 : 0 ; // 忽略时钟负边沿: (?0) ? : ? : - ; // 忽略在稳定时钟上的数据变化: ? (??): ? : - ; e n d t a b l e e n d p r i m i t i v e 表项( 0 1 )表示从0转换到1,表项( 0 x )表示从0转换到x,表项( ? 0 )表示从任意值 ( 0 , 1或x)转 换到0,表项( ? ? )表示任意转换。对任意未定义的转换,输出缺省为 x。 假定D _ E d g e _ F F为U D P定义,它现在就能够象基本门一样在模块中使用,如下面的 4位寄 存器所示。 m o d u l e R e g 4 (Clk, Din, Dout) ; input C l k ; i n p u t [0:3] D i n; o u t p u t [0:3] D o u t; D _ E d g e _ F F D L A B 0 (Dout[0],Clk, Din[0]), D L A B 1 (Dout[1],Clk, Din[1]), D L A B 2 (Dout[2],Clk, Din[2]), D L A B 3 (Dout[3],Clk, Din[3]), e n d m o d u l e 6.3.4 边沿触发和电平触发的混合行为 在同一个表中能够混合电平触发和边沿触发项。在这种情况下,边沿变化在电平触发之 第6章 用户定义的原语 51 下载

52 Verilog hdl硬描述语言 Chinapub coM 下载 前处理,即电平触发项覆盖边沿触发项。 下例是带异步清空的D触发器的UDP描述。 primitive D Async FF(O, Clk, CIr, Da ta output o; input Clr, Data, Clk table //C1k Clr ta (State) o(next) 000 /忽略时钟负边沿: ?0)0 endear⊥e mi tive 64另一实例 下面是3位表决电路的UDP描述。如果输入向量中存在2个或更多的1,则输出为1。 primitive Majority3(2, A, B, g table 0 endtable 6.5表项汇总 出于完整性考虑,下表列出了所有能够用于UDP原语中表项的可能值。 逻辑0 (AB) 由A变到B 与(??)相同 未知的值 跳变沿,与(01)相同 0、1或x中的任一个 下跳变沿,与(10)相同 0或1中任选一个 (01)、(0x)和(x1)的任一种

前处理,即电平触发项覆盖边沿触发项。 下例是带异步清空的D触发器的U D P描述。 p r i m i t i v e D_Async_FF (Q, Clk, Clr, Data) ; o u t p u t Q; r e g Q; i n p u t Clr, Data, Clk; t a b l e // Clk Clr Data Q(State) Q( n e x t ) (01) 0 0 : ? : 0 ; (01) 0 1 : ? : 1 ; (0x) 0 1 : 1 : 1 ; (0x) 0 0 : 0 : 0 ; // 忽略时钟负边沿: (?0) 0 ? : ? : - ; (??) 1 ? : ? : 0 ; ? 1 ? : ? : 0; e n d t a b l e e n d p r i m i t i v e 6.4 另一实例 下面是3位表决电路的U D P描述。如果输入向量中存在 2个或更多的1,则输出为1。 p r i m i t i v e M a j o r i t y 3(Z, A, B, C) ; i n p u t A, B, C; o u t p u t Z table //A B C : Z 0 0 ? : 0 ; 0 ? 0 : 0 ; ? 0 0 : 0 ; 1 1 ? : 1 ; 1 ? 1 : 1 ; ? 1 1 : 1 ; e n d t a b l e e n d p r i m i t i v e 6.5 表项汇总 出于完整性考虑,下表列出了所有能够用于 U D P原语中表项的可能值。 符 号 意 义 符 号 意 义 0 逻辑0 ( A B ) 由A变到B 1 逻辑1 * 与( ? ? )相同 x 未知的值 r 上跳变沿,与( 0 1 )相同 ? 0、1或x中的任一个 f 下跳变沿,与( 1 0 )相同 b 0或1中任选一个 p ( 0 1 )、( 0x)和(x1 )的任一种 - 输出保持 n ( 1 0 )、( 1x)和(x0 )的任一种 52 Verilog HDL 硬件描述语言 下载

Chinaopub.com 第6章用户定义的原语 53 下载 1.组合电路UDP与时序电路UDP如何区别? 2UDP可有一个或多个输出,是否正确 3.初始语句可用于初始化组合电路UDP吗? 4.为图5-12中显示的优先编码器电路编写UD描述。使用测试激励验证描述的模型 5.为T触发器编写UDP描述。在T触发器中,如果数据输入为0,则输出不变化。如果数据输 入是1,那么输出在每个时钟沿翻转。假定触发时钟沿是时钟下跳沿,使用测试激励验证所 描述的模型 6.以UDP方式为上跳边沿触发的JK触发器建模。如果J和K两个输入均为0,则输出不变。如 果J为0,K为1,则输出为0。如果J是1,K是0,则输出是1。如果J和K都是1,则输出翻转 使用测试激励验证描述的模型

习题 1. 组合电路U D P与时序电路U D P如何区别? 2. UDP可有一个或多个输出,是否正确 ? 3. 初始语句可用于初始化组合电路 U D P吗? 4. 为图5 - 1 2中显示的优先编码器电路编写U D P描述。使用测试激励验证描述的模型。 5. 为T触发器编写 U D P描述。在T触发器中,如果数据输入为 0,则输出不变化。如果数据输 入是1,那么输出在每个时钟沿翻转。假定触发时钟沿是时钟下跳沿,使用测试激励验证所 描述的模型。 6. 以U D P方式为上跳边沿触发的 J K触发器建模。如果 J和K两个输入均为 0,则输出不变。如 果J为0,K为1,则输出为0。如果J是1,K是0,则输出是1。如果J和K都是1,则输出翻转。 使用测试激励验证描述的模型。 第6章 用户定义的原语 53 下载

已到末页,全文结束
刷新页面下载完整文档
VIP每日下载上限内不扣除下载券和下载次数;
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
相关文档