《verilog语言学习6-9.ppt》由会员分享,可在线阅读,更多相关《verilog语言学习6-9.ppt(97页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Verilog采用的四值逻辑系统采用的四值逻辑系统0, Low, False, Logic Low, Ground,VSS, Negative Assertion1, High, True, Logic High, Power,VDD, VCC, Positive AssertionX Unknown: Occurs at Logical Which Cannot be Resolved ConflictHiZ, High Impedance, Tri- Stated,Disabled Driver (Unknown)主要数据类型主要数据类型Verilog主要有三类主要有三类(class)数据
2、类型:数据类型: net (线网)(线网) : 表示器件之间的物理连接表示器件之间的物理连接 register (寄存器)(寄存器) :表示抽象存储元件:表示抽象存储元件 parameters(参数参数) : 运行时的常数运行时的常数(run-time constants)net(线网)(线网)net需要被持续的驱动,驱动它的可以是门和模块。需要被持续的驱动,驱动它的可以是门和模块。 当当net驱动器的值发生变化时,驱动器的值发生变化时, Verilog自动的将新值传送到自动的将新值传送到net上。上。在例子中,线网在例子中,线网out由由or门驱动。当门驱动。当or门的输入信号置位时将传输到
3、线网门的输入信号置位时将传输到线网net上。上。net类的类型(线网)类的类型(线网) 有多种有多种net类型用于设计类型用于设计(design-specific)建模和工艺建模和工艺(technology-specific)建模建模 没有声明的没有声明的net的缺省类型为的缺省类型为 1 位位(标量标量)wire类型。但这个类型。但这个缺省类型可由下面的编译指导改变:缺省类型可由下面的编译指导改变: default_nettype net类型类型功功 能能wire, trisupply1, supply0wor, triorwand, triandtriregtri1, tri0标准内部连接
4、线标准内部连接线(缺省缺省)电源和地电源和地多驱动源线或多驱动源线或多驱动源线与多驱动源线与能保存电荷的能保存电荷的net无驱动时上拉无驱动时上拉/下拉下拉综合编译综合编译器不支持器不支持的的net类型类型net类的类型(线网)类的类型(线网)wire类型是最常用的类型,只有连接功能。类型是最常用的类型,只有连接功能。wire和和tri类型有相同的功能。用户可根据需要将线网定义为类型有相同的功能。用户可根据需要将线网定义为wire或或tri以提高可以提高可读性。例如,可以用读性。例如,可以用tri类型表示一个类型表示一个net有多个驱动源。或者将一个有多个驱动源。或者将一个net声明为声明为t
5、ri以指示这个以指示这个net可以是高阻态可以是高阻态Z(hign-impedance)。可推广至。可推广至wand和和triand、wor和和triorwand、wor有线逻辑功能;与有线逻辑功能;与wire的区别见下页的表。的区别见下页的表。trireg类型很象类型很象wire类型,但类型,但trireg类型在没有驱动时保持以前的值。这个值的类型在没有驱动时保持以前的值。这个值的强度随时间减弱。强度随时间减弱。修改修改net缺省类型的编译指导:缺省类型的编译指导: default_nettype nettype不能是不能是supply1和和supply0。net类在发生逻辑冲突时的决断类在
6、发生逻辑冲突时的决断 Verilog有预定义的决断函数有预定义的决断函数 支持与工艺无关的逻辑冲突决断支持与工艺无关的逻辑冲突决断 wire-and用于集电极开路电路用于集电极开路电路 wire-or用于射极耦合电路用于射极耦合电路寄存器类寄存器类 (register)寄存器类型在赋新值以前保持原值寄存器类型在赋新值以前保持原值寄存器类型大量应用于行为模型描述及激励描述。在下面的例子中,寄存器类型大量应用于行为模型描述及激励描述。在下面的例子中,reg_a、reg_b、reg_sel用于施加激励给用于施加激励给2:1多路器。多路器。用行为描述结构给寄存器类型赋值。给用行为描述结构给寄存器类型赋
7、值。给reg类型赋值是在过程块中。类型赋值是在过程块中。寄存器类的类型寄存器类的类型 寄存器类有四种数据类型寄存器类有四种数据类型寄存器类型 功能 reg 可定义的无符号整数变量,可以是标量(1位)或矢量,是 最常用的寄存器类型 integer 32位有符号整数变量,算术操作产生二进制补码形式的 结果。通常用作不会由硬件实现的的数据处理。real 双精度的带符号浮点变量,用法与integer相同。time 64位无符号整数变量,用于仿真时间的保存与处理realtime 与real内容一致,但可以用作实数仿真时间的保存与 处理 不要混淆寄存器数据类型与结构级存储元件,如不要混淆寄存器数据类型与结
8、构级存储元件,如udp_dffVerilog中中net和和register声明语法声明语法 net声明声明 range delay , net_name;net_type: net类型类型range: 矢量范围,以矢量范围,以MSB:LSB格式格式delay: 定义与定义与net相关的延时相关的延时net_name: net名称,一次可定义多个名称,一次可定义多个net, 用逗号分开。用逗号分开。 寄存器声明寄存器声明 range , reg_name;reg_type:寄存器类型:寄存器类型range: 矢量范围,以矢量范围,以MSB:LSB格式。只对格式。只对reg类型有效类型有效reg_
9、name :寄存器名称,一次可定义多个寄存器,用逗号分开:寄存器名称,一次可定义多个寄存器,用逗号分开Verilog中中net和和register声明语法声明语法 举例:举例:reg a; /一个标量寄存器一个标量寄存器wand w; / 一个标量一个标量wand类型类型netreg 3: 0 v; / 从从MSB到到LSB的的4位寄存器向量位寄存器向量reg 7: 0 m, n; / 两个两个8位寄存器位寄存器tri 15: 0 busa; / 16位三态总线位三态总线wire 0: 31 w1, w2; / 两个两个32位位wire,MSB为为bit0选择正确的数据类型选择正确的数据类型m
10、odule top;wire y; reg a, b;DUT u1 (y, a, b) ;initial begina = 0; b = 0; #5 a = 1; endendmodulemodule DUT (Y, A, B);output Y;input A, B;wire Y, A, B;and (Y, A, B) ;endmodule输入端口可以由输入端口可以由net/register驱动,但输驱动,但输入端口只能是入端口只能是net输出端口可以是输出端口可以是net/register类型,输出类型,输出端口只能驱动端口只能驱动net在过程块中只能给在过程块中只能给register类型
11、赋值类型赋值若若Y,A,B说明为说明为reg则会产生错误。则会产生错误。in1in2OABY双向端口输入双向端口输入/输出只输出只能是能是net类型类型选择数据类型时常犯的错误选择数据类型时常犯的错误用过程语句给一个用过程语句给一个net类型的或忘记声明类型的信号赋值。类型的或忘记声明类型的信号赋值。 信息:信息:illegal assignment.将实例的输出连接到声明为将实例的输出连接到声明为register类型的信号上。类型的信号上。 信息:信息: has illegal output port specification.将模块的输入信号声明为将模块的输入信号声明为register类
12、型。类型。 信息:信息:incompatible declaration, 下面所列是常出的错误及相应的错误信息下面所列是常出的错误及相应的错误信息(error message)信号可以分为端口信号和内部信号。出现在端口列表中的信号是端口信号,其它的信号为内部信号可以分为端口信号和内部信号。出现在端口列表中的信号是端口信号,其它的信号为内部信号。信号。对于端口信号,输入端口只能是对于端口信号,输入端口只能是net类型。输出端口可以是类型。输出端口可以是net类型,也可以是类型,也可以是register类型。若类型。若输出端口在过程块中赋值则为输出端口在过程块中赋值则为register类型;若在
13、过程块外赋值类型;若在过程块外赋值(包括实例化语句),则为包括实例化语句),则为net类类型。型。内部信号类型与输出端口相同,可以是内部信号类型与输出端口相同,可以是net或或register类型。判断方法也与输出端口相同。若在类型。判断方法也与输出端口相同。若在过程块中赋值,则为过程块中赋值,则为register类型;若在过程块外赋值,则为类型;若在过程块外赋值,则为net类型。类型。若信号既需要在过程块中赋值,又需要在过程块外赋值。这种情况是有可能出现的,如决断信若信号既需要在过程块中赋值,又需要在过程块外赋值。这种情况是有可能出现的,如决断信号。这时需要一个中间信号转换。号。这时需要一个
14、中间信号转换。信号类型确定方法总结如下:信号类型确定方法总结如下:选择数据类型时常犯的错误举例选择数据类型时常犯的错误举例修改前:修改前:module example(o1, o2, a, b, c, d); input a, b, c, d; output o1, o2; reg c, d; reg o2 and u1(o2, c, d); always (a or b) if (a) o1 = b; else o1 = 0;endmodule修改后:修改后:module example(o1, o2, a, b, c, d); input a, b, c, d; output o1, o2
15、;/ reg c, d;/ reg o2 reg o1; and u1(o2, c, d); always (a or b) if (a) o1 = b; else o1 = 0;endmoduleexample.v选择数据类型时常犯的错误举例选择数据类型时常犯的错误举例Compiling source file example.vError! Illegal left-hand-side assignment Verilog-ILHSA example.v, 11: o1 = b;Error! Illegal left-hand-side assignment Verilog-ILHSA e
16、xample.v, 12: o1 = 0;2 errors第一次编译信息第一次编译信息verilog c example.v第二次编译信息第二次编译信息Compiling source file example.vError! Incompatible declaration, (c) defined as input at line 2 Verilog-IDDIL example.v, 5: Error! Incompatible declaration, (d) defined as input at line 2 Verilog-IDDIL example.v, 5: Error! Ga
17、te (u1) has illegal output specification Verilog-GHIOS example.v, 8: 3 errors参数(参数(parameters)用参数声明一个可变常量,常用于定义延时及宽度变量。用参数声明一个可变常量,常用于定义延时及宽度变量。参数定义的语法:参数定义的语法:parameter ;可一次定义多个参数,用逗号隔开。可一次定义多个参数,用逗号隔开。在使用文字在使用文字(literal)的地方都可以使用参数。的地方都可以使用参数。参数的定义是局部的,只在当前模块中有效。参数的定义是局部的,只在当前模块中有效。参数定义可使用以前定义的整数和实
18、数参数。参数定义可使用以前定义的整数和实数参数。module mod1( out, in1, in2); . . .parameter cycle = 20, prop_ del = 3, setup = cycle/2 - prop_del, p1 = 8, x_ word = 16bx, file = / usr1/ jdough/ design/ mem_ file. dat; . . . wire p1: 0 w1; / A wire declaration using parameter . . .endmodule注意注意:参数:参数file不是不是string,而是一个整数,其值
19、是所有而是一个整数,其值是所有字母的扩展字母的扩展ASCII值。若值。若file=“AB”,则,则file值为值为8h4142。用法:。用法:$fopen(file);$display(“%s”, file);参数重载(参数重载(overriding)可用可用defparam语句在编译时重载参数值。语句在编译时重载参数值。defparam语句引用参数的层次化名称语句引用参数的层次化名称使用使用defparam语句可单独重载任何参数值。语句可单独重载任何参数值。Defparam语句语句(现在综合工具还不支持)(现在综合工具还不支持)module mod1( out, in1, in2); . .
20、 . parameter p1 = 8, real_constant = 2.039, x_word = 16bx, file = /usr1/jdough/design/mem_file.dat; . . .endmodulemodule test;. . . mod1 I1( out, in1, in2); defparam I1. p1 = 6, I1. file = ./ my_mem.dat;. . .endmodule参数重载(参数重载(overriding)module mod1( out, in1, in2); . . . parameter p1 = 8, real_cons
21、tant = 2.039, x_word = 16bx, file = /usr1/jdough/design/mem_file.dat;. . .endmodulemodule top; . . . mod1 #( 5, 3.0, 16bx, ./ my_mem. dat) I1( out, in1, in2); . . .endmodule模块实例化时参数重载模块实例化时参数重载使用#次序与原说明相同不需要给所有参数赋新值,但不能跳跃赋值,假设模块MOD顺序定义三个参数a, b, c,则:MOD u1 #( a, b) (.); MOD u2 #(a) (.);MOD u3 #(a, ,c
22、) (.); MOD u4 #(, b, c) (.); 为什么编译器认为什么编译器认为这是参数而不为这是参数而不是延时呢?是延时呢?因为因为# #说明延时的时候只能用说明延时的时候只能用于于gategate或过程语句,不能用于或过程语句,不能用于模块实例。模块实例。gategate(primitives)primitives)在实例化时只在实例化时只能有延时,不能有模块参数。能有延时,不能有模块参数。寄存器数组寄存器数组(Register Arrays) 在在Verilog中可以说明一个寄存器数组。中可以说明一个寄存器数组。 integer NUMS 7: 0; / 包含包含8个整数数组变量
23、个整数数组变量 time t_vals 3: 0; / 4个时间数组变量个时间数组变量 reg类型的数组通常用于描述存储器类型的数组通常用于描述存储器 其语法为:其语法为: reg MSB:LSB first_addr:last_addr; MSB:LSB定义存储器字的位数定义存储器字的位数 first_addr:last_addr定义存储器的深度定义存储器的深度 例如:例如: reg 15: 0 MEM 0:1023; / 1K x 16存储器存储器 reg 7: 0 PREP hFFFE: hFFFF; / 2 x 8存储器存储器 描述存储器时可以使用参数或任何合法表达式描述存储器时可以使
24、用参数或任何合法表达式 parameter wordsize = 16; parameter memsize = 1024; reg wordsize-1: 0 MEM3 memsize-1: 0;存储器寻址存储器寻址(Memory addressing)存储器元素可以通过存储器索引(存储器元素可以通过存储器索引(index)寻址,也就是给出元素在存储器的寻址,也就是给出元素在存储器的位置来寻址。位置来寻址。 mem_name addr_exprVerilog不支持多维数组。也就是说只能对存储器字进行寻址,而不能对存不支持多维数组。也就是说只能对存储器字进行寻址,而不能对存储器中一个字的位寻址
25、。储器中一个字的位寻址。module mems;reg 8: 1 mema 0: 255; / declare memory called memareg 8: 1 mem_word; / temp register called mem_ word. . .initial begin $displayb( mema5); /显示存储器中第显示存储器中第6个字的内容个字的内容 mem_word = mema5; $displayb( mem_word8); / /显示第显示第6个字的最高有效位个字的最高有效位 endendmodule若要对存储器字的某些位存取,若要对存储器字的某些位存取,只能
26、通过暂存器传递只能通过暂存器传递复习复习(review)问题:问题:在在Verilog中,什么情况下输出端会输出中,什么情况下输出端会输出X值?值?net和和register类型的主要区别是什么?类型的主要区别是什么?1.在在Verilog中如何定义一个常数?中如何定义一个常数?解答:解答:若输出端输出若输出端输出X值,值, 一种可能是输出一种可能是输出net上发生驱动冲突,二上发生驱动冲突,二是由一个未知值传递到是由一个未知值传递到net上引起。上引起。register有存储功能,而有存储功能,而net必须持续驱动。必须持续驱动。1.在在Verilog中使用中使用parameter定义一个常
27、数。文本宏也是常数的定义一个常数。文本宏也是常数的一种形式。一种形式。第第7 7章章 结构描述结构描述(structural modeling)如何使用如何使用Verilog的基本单元的基本单元(primitives)如何构造层次化设计如何构造层次化设计了解了解Verilog的逻辑强度系统的逻辑强度系统学习内容:学习内容:术语及定义术语及定义 (terms and definations) 结构描述结构描述 : 用门来描述器件的功能用门来描述器件的功能 primitives(基本单元基本单元) : Verilog语言已定义的具有简单逻辑语言已定义的具有简单逻辑功能的功能模型功能的功能模型(mo
28、dels)结构描述结构描述Verilog结构描述表示一个逻辑图结构描述表示一个逻辑图结构描述用已有的元件构造。结构描述用已有的元件构造。module MUX4x1( Z, D0, D1, D2, D3, S0, S1); output Z; input D0, D1, D2, D3, S0, S1; and (T0, D0, S0_, S1_), (T1, D1, S0_, S1), (T2, D2, S0, S1_), (T3, D3, S0, S1); not (S0_, S0), (S1_, S1); or (Z, T0, T1, T2, T3);endmodulemodule rs_l
29、atch (y, yb, r, s); output y, yb; input r, s; nor n1( y, r, yb); nor n2( yb, s, y);endmodule结构描述等结构描述等价于逻辑图,价于逻辑图,都是连接简都是连接简单元件构成单元件构成更复杂元件更复杂元件通过门的实通过门的实例使用门例使用门忽略了门的忽略了门的实例名。实例名。同一种门可同一种门可以通过一个以通过一个语句实例化语句实例化Latch结构描述(续)结构描述(续)结构描述等价于逻辑图。它们都是连接简单元件来构成更为复杂的元结构描述等价于逻辑图。它们都是连接简单元件来构成更为复杂的元件。件。Verilog
30、使用其连接特性完成简单元件的连接。使用其连接特性完成简单元件的连接。在描述中使用元件时,通过建立这些元件的实例来完成。在描述中使用元件时,通过建立这些元件的实例来完成。上面的例子中上面的例子中MUX是没有反馈的组合电路,使用中间或内部信号将门是没有反馈的组合电路,使用中间或内部信号将门连接起来。描述中忽略了门的实例名,并且同一种门的所有实例可以连接起来。描述中忽略了门的实例名,并且同一种门的所有实例可以在一个语句中实例化。在一个语句中实例化。上面的锁存器上面的锁存器(latch)是一个时序元件,其输出反馈到输入上。它没有使是一个时序元件,其输出反馈到输入上。它没有使用任何内部信号。它使用了实例
31、名并且对两个用任何内部信号。它使用了实例名并且对两个nor门使用了分开的实例门使用了分开的实例化语句。化语句。Verilog基本单元(基本单元(primitives)Verilog基本单元提供基本的逻辑功能,也就是说这些逻辑功能是预定基本单元提供基本的逻辑功能,也就是说这些逻辑功能是预定义的,用户不需要再定义这些基本功能。义的,用户不需要再定义这些基本功能。基本单元是基本单元是Verilog开发库的一部分。大多数开发库的一部分。大多数ASIC和和FPGA元件库是用元件库是用这些基本单元开发的。基本单元库是自下而上的设计方法的一部分。这些基本单元开发的。基本单元库是自下而上的设计方法的一部分。基
32、本单元名称功能andornotbufxornandnorxnor Logical And Logical Or Inverter Buffer Logical Exclusive Or Logical And Inverted Logical Or Inverted Logical Exclusive Or Inverted基本单元的引脚基本单元的引脚 (pin)的可扩展性的可扩展性基本单元引脚的数目由连接到门上的基本单元引脚的数目由连接到门上的net的数量决定。因此当基本单元的数量决定。因此当基本单元输入或输出的数量变化时用户不需要重定义一个新的逻辑功能。输入或输出的数量变化时用户不需要重定
33、义一个新的逻辑功能。所有门(除了所有门(除了not和和buf)可以有多个输入,但只能有一个输出。)可以有多个输入,但只能有一个输出。not和和buf门可以有多个输出,但只能有一个输入。门可以有多个输出,但只能有一个输入。带条件的基本单元带条件的基本单元 Verilog有四种不同类型的条件有四种不同类型的条件基本单元基本单元 这四种基本单元只能有三个引脚:这四种基本单元只能有三个引脚:output, input, enable 这些单元由这些单元由enable引脚使能。引脚使能。 当条件基本单元使能信号无效时,输出高阻态。当条件基本单元使能信号无效时,输出高阻态。基本单元名称 功能bufif1
34、条件缓冲器,逻辑条件缓冲器,逻辑 1 使能使能bufif0 条件缓冲器,逻辑条件缓冲器,逻辑 0 使能使能notif1 条件反相器,逻辑条件反相器,逻辑 1 使能使能notif0 条件反相器,逻辑条件反相器,逻辑 1 使能使能带条件的基本单元(续)带条件的基本单元(续) 条件条件基本单元有三个端口:输出、数据输入、使能输入基本单元有三个端口:输出、数据输入、使能输入三种未知状态:三种未知状态: 值值 强度强度x 1, 0, z 未知未知L 0, z 未知未知H 1, z 未知未知基本单元实例化基本单元实例化在端口列表中,先说明输出端口,然后是输入端口在端口列表中,先说明输出端口,然后是输入端口
35、实例化时实例的名字是可选项实例化时实例的名字是可选项 and (out, in1, in2, in3, in4); / unnamed instance buf b1 (out1, out2, in); / named instance延时说明是可选项。所说明的延时是固有延时。输出信号经过所说明的延时才延时说明是可选项。所说明的延时是固有延时。输出信号经过所说明的延时才变化。没有说明时延时为变化。没有说明时延时为0。 notif0 #3.1 n1 (out, in, cntrl); / delay specified信号强度说明是可选项信号强度说明是可选项 not (strong1, weak
36、0) n1 (inv, bit); / strength specifiedmodule intr_sample; reg A; wire Y; not #10 intrinsic (Y, A);initial begin A = 0; #15 A = 1; #15 A = 0; #8 A = 1; #8 A = 0; #11 A = 1; #10 $finish;endendmodule仿真波形仿真波形固有延时固有延时模块实例化模块实例化(module instantiation)模块实例化时实例必须有一个名字。模块实例化时实例必须有一个名字。使用位置映射时,端口次序与模块的说明相同。使用位
37、置映射时,端口次序与模块的说明相同。使用名称映射时,端口次序与位置无关使用名称映射时,端口次序与位置无关没有连接的输入端口初始化值为没有连接的输入端口初始化值为x。module comp (o1, o2, i1, i2); output o1, o2; input i1, i2; . . .endmodulemodule test; comp c1 (Q, R, J, K); / Positional mapping comp c2 (.i2(K), .o1(Q), .o2(R), .i1(J); / Named mapping comp c3 (Q, , J, K); / One port
38、left unconnected comp c4 (.i1(J), .o1(Q); / Named, two unconnected portsendmodule名称映射的语法:名称映射的语法:.内部信号(外部信号)内部信号(外部信号)没有连接时通常会产生警告没有连接时通常会产生警告module driver (in, out, en); input 2: 0 in; output 2: 0 out; input en; bufif0 u2:0 (out, in, en); / array of buffersendmodule实例数组实例数组(Array of Instances)实例名字后
39、有范围说明时会创建一个实例数组。在说明实例数组时,实例名字后有范围说明时会创建一个实例数组。在说明实例数组时,实例必须有一个名字实例必须有一个名字 (包括基本单元实例包括基本单元实例)。其说明语法为:。其说明语法为: ();两个模块功两个模块功能完全等价能完全等价范围说明语法:范围说明语法:MSB : LSBmodule driver_equiv (in, out, en); input 2: 0 in; output 2: 0 out; input en; / Each primitive instantiation is done separately bufif0 u2 (out2, i
40、n2, en); bufif0 u1 (out1, in1, en); bufif0 u0 (out0, in0, en);endmodule实例数组实例数组(Array of Instances)(续续)如果范围中如果范围中MSB与与LSB相同,则只产生一个实例。相同,则只产生一个实例。一个实例名字只能有一个范围。一个实例名字只能有一个范围。下面以模块下面以模块comp为例说明这些情况为例说明这些情况module oops; wire y1, a1, b1; wire 3: 0 a2, b2, y2, a3, b3, y3; comp u1 5: 5 (y1, a1, b1); / 只产生一
41、个只产生一个comp实例实例 comp m1 0: 3 (y2, a2, b2); comp m1 4: 7 (y3, a3, b3); / 非法非法endmoduleml作为实例阵作为实例阵列名字使用了列名字使用了两次两次现有综合现有综合工具还不工具还不支持实例支持实例数组数组逻辑强度逻辑强度(strength)模型模型Verilog提供多级逻辑强度。提供多级逻辑强度。逻辑强度模型决定信号组合值是可知还是未知的,以更精确的描述硬逻辑强度模型决定信号组合值是可知还是未知的,以更精确的描述硬件的行为。件的行为。下面这些情况是常见的需要信号强度才能精确建模的例子。下面这些情况是常见的需要信号强度才
42、能精确建模的例子。 开极输出开极输出(Open collector output)(需要上拉)需要上拉) 多个三态驱动器驱动一个信号多个三态驱动器驱动一个信号 MOS充电存储充电存储 ECL门(门(emitter dotting)逻辑强度是逻辑强度是Verilog模型的一个重要部分。通常用于元件建模,如模型的一个重要部分。通常用于元件建模,如ASIC和和FPGA库开发工程师才使用这么详细的强度级。但电路设计工程师使用这些精库开发工程师才使用这么详细的强度级。但电路设计工程师使用这些精细的模型仿真也应该对此了解。细的模型仿真也应该对此了解。逻辑强度逻辑强度(strength)模型(续)模型(续)
43、用户可以给基本单元实例或用户可以给基本单元实例或net定义强度。定义强度。基本单元强度说明语法:基本单元强度说明语法: ();); 例:例:nand (strong1, pull0) #( 2: 3: 4) n1 (o, a, b); / strength and delay or (supply0, highz1) (out, in1, in2, in3); / no instance name用户可以用用户可以用%v格式符显示格式符显示net的强度值的强度值 $monitor ($ time, output = %v, f);电容强度电容强度(large, medium, small)只能
44、用于只能用于net类型类型trireg和基本单元和基本单元tran 例如:例如:trireg (small) tl;信号强度值系统信号强度值系统 Level Type %v formats SpecificationSupply 7 Drive Su0 Su1 supply0, supply1Strong 6 Drive(default) St0 St1 strong0, strong1Pull 5 Drive Pu0 Pu1 pull0, pull1Large 4 Capacitive La0 La1 largeWeak 3 Drive We0 We1 weak0, weak1Medium
45、2 Capacitive Me0 Me1 mediumSmall 1 Capacitive Sm0 Sm1 smallHigh Z 0 Impedance Hi0 Hi1 highz0, highz1Verilog多种强度决断多种强度决断在在Verilog中,级别高的强度覆盖级别低的强度中,级别高的强度覆盖级别低的强度复习复习问题:问题:什么是什么是Verilog中的结构化描述?中的结构化描述?连接模块端口有哪两种方法?哪一种更通用一些?连接模块端口有哪两种方法?哪一种更通用一些?什么是实例数组?什么是实例数组?1.什么时候实例名字是可选的?什么时候实例名字是可选的?解答:解答:结构化描述是使
46、用结构化描述是使用Verilog基本单元或单元基本单元或单元(cell)级元件对设计进行描级元件对设计进行描述,与逻辑图很相似。述,与逻辑图很相似。可以根据次序(位置映射)或名字(名称映射)来映射端口。虽然在可以根据次序(位置映射)或名字(名称映射)来映射端口。虽然在这个教程中大多使用位置映射,这主要是为了节省空间。在实际设计这个教程中大多使用位置映射,这主要是为了节省空间。在实际设计中,名称映射可能更通用一些。中,名称映射可能更通用一些。实例数组用一条语句创建模型实例数组用一条语句创建模型(模块或基本单元)的多个实例。模块或基本单元)的多个实例。1.基本单元实例化时实例名是可选的,说明基本单
47、元数组时除外。当实基本单元实例化时实例名是可选的,说明基本单元数组时除外。当实例化模块时,实例名是必须的。例化模块时,实例名是必须的。第第8 8章章 延时模型延时模型学习内容学习内容:如何说明块延时如何说明块延时如何说明分布延时如何说明分布延时如何说明路径延时如何说明路径延时怎样在模块中说明时序检查怎样在模块中说明时序检查1.标准延时格式标准延时格式SDF(Standard Delay Format)术语及定义术语及定义模块路径模块路径(module path): 穿过模块,连接模块输入穿过模块,连接模块输入(input端口或端口或inout端口)到模块输出端口)到模块输出(output端口或
48、端口或inout端口)的路径。端口)的路径。路径延时路径延时(path delay):与特定路径相关的延时与特定路径相关的延时PLI:编程语言接口,提供编程语言接口,提供 Verilog数据结构的过程访问。数据结构的过程访问。时序检查时序检查(timing check):监视两个输入信号的关系并检查的系统任务,监视两个输入信号的关系并检查的系统任务,以保证电路能正确工作。以保证电路能正确工作。时序驱动设计时序驱动设计(timing driven design):从前端到后端的完整设计流程从前端到后端的完整设计流程中,用时序信息连接不同的设计阶段中,用时序信息连接不同的设计阶段延时模型类型延时模
49、型类型(Delay Modeling Types)延时有三种描述模型:延时有三种描述模型:将全部延时集中将全部延时集中到最后一个门到最后一个门延时分布在延时分布在每一个门上每一个门上用专用块说明每用专用块说明每一个路径一个路径pin-to-pin延时延时典型的延时说明:典型的延时说明:Delay from A to O = 2Delay from B to O = 3Delay from C to O = 1分布延时分布延时块延时块延时路径延时路径延时块延时块延时(Lumped Delay)块延时方法是将全部延时集中到最后一个门上。这种模型简单但不块延时方法是将全部延时集中到最后一个门上。这种
50、模型简单但不够精确,只适用于简单电路。因为当到输出端有多个路径时不能描够精确,只适用于简单电路。因为当到输出端有多个路径时不能描述不同路径的不同延时。述不同路径的不同延时。可以用这种方法描述器件的传输延时,并且使用最坏情况下的延时可以用这种方法描述器件的传输延时,并且使用最坏情况下的延时(最大延时)。最大延时)。timescale 1ns/ 1nsmodule noror( Out, A, B, C); output Out; input A, B, C; nor n1 (net1, A, B); or #3 o1 (Out, C, net1);endmodule用块延时描述时,不同路径的延用