《第6章.数据流建模教学课件PPT.ppt》由会员分享,可在线阅读,更多相关《第6章.数据流建模教学课件PPT.ppt(34页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、完整版教学课件完整版教学课件第6章.数据流建模EDA技术与Verilog HDL语言第六章 数据流建模Page 3概述概述 在电路规模较小的情况下,由于包含的门数比较少,因此使用门级建模进行设计是很合适的。随着芯片集成度的迅速提高,数据流建模的重要性越来越显著。现在已经没有任何一家设计公司从门级结构的角度进行整个数字系统的设计。目前普遍采用的设计方法是借助于计算机辅助设计工具,自动将电路的数据流设计直接转换为门级结构,这个过程也称为逻辑综合逻辑综合。 随着逻辑综合工具的功能不断地完善,数据流建模已经成为主流的设计方法。数据流设计可以使得设计者根据数据流来优化电路,而不必专注于电路结构的细节。为
2、了在设计过程中获得最大的灵活性,设计者常常将门级、数据流级和行为级的各种方式结合起来使用。在数字设计领域,RTL(Register Transfer Level,寄存器传输级)通常是指数据流建模和行为级建模的结合。Page 4本章学习目标本章学习目标 讲述连续赋值语句(讲述连续赋值语句(assign)、对于连续赋值语句的限制以及隐式连续赋)、对于连续赋值语句的限制以及隐式连续赋值语句。值语句。 解释赋值延迟、隐式赋值延迟以及用于连续赋值语句的线网声明延迟。解释赋值延迟、隐式赋值延迟以及用于连续赋值语句的线网声明延迟。 定义表达式、操作符和操作数。定义表达式、操作符和操作数。 列表解释所有类型的
3、操作符,包括算术操作符、逻辑操作符、关系操作符、列表解释所有类型的操作符,包括算术操作符、逻辑操作符、关系操作符、等价操作符、按位操作符、缩减操作符、移位操作符、拼接操作符和条件等价操作符、按位操作符、缩减操作符、移位操作符、拼接操作符和条件操作符等。操作符等。 使用数据流结构对实际的数字电路建模。使用数据流结构对实际的数字电路建模。Page 56.1 连续赋值语句连续赋值语句 连续赋值语句是Verilog数据流建模的基本语句,用于对线网进行赋值,必须以关键词assign开始,其语法为: 上面语法中的驱动强度是可选项,其默认值为strong1和strong0。延迟值也是可选的,用于指定赋值的延
4、迟,类似于门的延迟Page 66.1 连续赋值语句(续)连续赋值语句(续) 连续赋值语句特点:连续赋值语句特点: 1连续赋值语句的左值必须是一个标量或向量线网,或者是标量或向量线网的拼接,而不能是向量或向量寄存器。我们将在6.4.8节中对拼接操作进行讨论; 2连续赋值语句总是处于激活状态。只要任意一个操作数发生变化,表达式就会被立即重新计算,并且将结果赋给等号左边的线网; 3操作数可以是标量或向量的线网或寄存器,也可以是函数调用; 4赋值延迟用于控制对线网赋予新值的时间,根据仿真时间单位进行说明。赋值延迟类似于门延迟,对于描述实际电路中的时序是非常有用的。Page 76.1 连续赋值语句(续)
5、连续赋值语句(续) 隐式连续赋值:隐式连续赋值:Verilog提供了另一种对线网赋值的简便方法:在线网声明的同时对其进行赋值。 隐式线网声明:隐式线网声明:如果一个信号名被用在连续赋值语句的左侧,那么Verilog编译器认为该信号是一个隐式声明的线网。如果线网被连接到模块的端口上,则Verilog编译器认为隐式声明线网的宽度等于模块端口的宽度。Page 86.2 延迟延迟 指定延迟的方法有三种:普通赋值延迟、隐式赋值延迟和线网声明延迟普通赋值延迟、隐式赋值延迟和线网声明延迟。 普通赋值延迟普通赋值延迟 上式是一个普通赋值的延迟例子,如果in1和in2中的任意一个发生变化,那么在计算表达式in1
6、 & in2的新值并将新值赋给语句左值之前,会产生10个时间单位的延迟。如果在此10个时间单位期间,即左值获得新值之前,in1或in2的值再次发生变化,那么在计算表达式的新值时会取in1或 in2的当前值。我们称这种性质为惯性延迟。也就是说,脉冲宽度小于赋值延迟的输脉冲宽度小于赋值延迟的输入变化不会对输出产生影响。入变化不会对输出产生影响。Page 96.2 延迟(续)延迟(续)in1和in2变为1,out在10个时间单位之后变为1in1和in2变为0,out在时间单位70处变为0in1在时间80处变为1,但是在5个时间单位之内重新变为0。因此,在时间单位80之后再过10个时间单位,重新计算表
7、达式,此时in1的值已经为0,因此out的值仍然为0。Page 106.2 延迟(续)延迟(续) 隐式连续赋值延迟 隐式连续赋值等效于声明一个线网并且对其进行连续赋值。如下例: 线网声明延迟 Verilog允许在声明线网的时候指定一个延迟,这样对该线网的任何赋值都会被推迟指定的时间。线网声明同样可以用于门级建模中。 Page 116.3 表达式、操作符和操作数表达式、操作符和操作数 表达式表达式 表达式由操作符和操作数构成,其目的是根据操作符的意义计算出一个结果值。如a&b,in1|in2 等。 操作数操作数 可以是常数、整数、实数、线网、寄存器、时间、位选(向量线网或向量寄存器的一位)、域选
8、(向量线网或向量寄存器的一组选定的位)以及存储器和函数调用。如表达式中的a、b、in1、in2均为操作数。 操作符操作符 操作符对操作数进行运算并产生一个结果。如表达式中的&、| 均为操作符。Page 126.4 操作符类型操作符类型 Verilog提供了许多种类型的操作符,分别是算术、逻辑、关系、等价、按算术、逻辑、关系、等价、按位、缩减、移位、拼接和条件操作符位、缩减、移位、拼接和条件操作符。这些操作符中的一部分与C语言中的操作符类似。每个操作符都用一个符号来表示。Page 136.4.1 算术操作符算术操作符 算术操作符可以分为两种:双目操作符和单目操作符双目操作符和单目操作符。 双目操
9、作符双目操作符 双目操作符对两个操作数进行算术运算,包括乘(*)、除()、加(+)、减()、求幂(*)和取模(%)。如果操作数的任意一位为x,那么运算结果的全部位为x。取模运算的结果是两数相除的余数部分,它同C语言中的取模运算是一样的。Page 146.4.1 算术操作符(续)算术操作符(续) 单目操作符单目操作符 + 和 - 操作符也可以作为单目操作符来使用,这时它们表示操作数的正负。单目的 + 和 操作符比双目操作符具有更高的优先级。如:-4,+5。 在Verilog内部,负数是用其二进制补码来表示的。建议使用整数或实数来使用整数或实数来表示负数表示负数,而避免使用 的格式来表示负数,这是
10、因为它们将被转换为无符号的2进制补码形式,这样会产生意想不到的结果。Page 156.4.2 逻辑操作符逻辑操作符 逻辑操作符包括逻辑与(逻辑与(&)、逻辑或()、逻辑或(| |)和逻辑非()和逻辑非(!)。)。操作符&和 | | 是双目操作符,而!是单目操作符。逻辑操作符执行的规则为: 逻辑操作符计算结果是一个1位的值:0表示假,1表示真,x表示不确定; 如果一个操作数不为0,则等价于逻辑1(真);如果它等于0,则等价于逻辑0(假);如果它的任意一位为x或z,则它等价于x(不确定),而且仿真器一般将其作为假来处理; 逻辑操作符取变量或表达式作为操作数。Page 166.4.3 关系操作符关系
11、操作符 系操作符包括大于(大于()、小于()、小于(=)和小于等于()和小于等于()、左移()、左移()、算术左移()、算术左移()。普通移位操作符的功能是将向量操作数向左或向右移动指定的位数,因此它的两个操作数分别是要进行移位的向量(操作符左侧)和移动的位数(操作符右侧)。当向量被移位之后,所产生的空余位使用0来填充,而不是循环(首尾相连)移位。算术移位操作符则根据表达式的内容来确定空余位的填充值。Page 226.4.8 拼接操作符拼接操作符 使用拼接操作符(,)可以将多个操作数拼接在一起,组成一个操作数。拼接操作符的每个操作数必须是有确定位宽的数,这是由于为了确定拼接结果的位宽,必须知道
12、每个操作数的位宽,因此无位宽的数不能作为拼接操作符的操作数。 拼接操作符的用法是将各个操作数用大括号括起来,之间用逗号隔开。操作数的类型可以是变量线网或寄存器、向量线网或寄存器、位选、域选和有确定位宽的常数。Page 236.4.9 重复操作符重复操作符 如果需要多次拼接同一个操作数,则可以使用重复操作符;重复拼接的次数用常数来表示,该常数指定了其后大括号内变量的重复次数。Page 246.4.10 条件操作符条件操作符 条件操作符(?:)带有三个操作数: 语法:语法:condition_expr ? true_expr : false_expr; 即, 条件表达式 ? 真表达式 : 假表达式
13、 ; 执行过程为执行过程为:首先计算条件表达式(condition_expr), 如果为真(即逻辑1),则计算“真表达式”(true_expr); 如果为假(即逻辑0),则计算“假表达式”(false_expr); 如果为不确定x,则两个表达式都进行计算, 然后对两个结果 进行逐位比较。 如果相等,则结果中该位的值为操作数中该位的值; 如果不相等,则结果中该位的值取x。Page 256.4.11 操作符的优先级操作符的优先级Page 266.5 部分实例部分实例 四选一多路选择器四选一多路选择器 方法方法1:使用逻辑等式:使用逻辑等式与上一章例子的区别仅仅在于输出out的计算是由操作符的逻辑方
14、程完成的,而不是用门的实例引用完成的 ,除此之外,其他部分都一样。Page 276.5 部分实例部分实例 四选一多路选择器(续)四选一多路选择器(续) 方法方法2:使用条件操作符:使用条件操作符更为简洁Page 286.5 部分实例部分实例 四位全加器四位全加器 方法方法1:数据流操作符:数据流操作符 在第在第5章中我们已经设计过四位全加器,是用门级建模实现的。在本节中,章中我们已经设计过四位全加器,是用门级建模实现的。在本节中,我们使用数据流级对其进行描述。我们使用数据流级对其进行描述。Page 296.5 部分实例部分实例 四位全加器(续)四位全加器(续) 方法方法2:带超前进位的全加器:
15、带超前进位的全加器Page 306.5 部分实例部分实例 脉动进位计数器脉动进位计数器 四位脉动进位计数器的前面课程中已经设计过,它是由4个T触发器构成的,而T触发器由D触发器和反相门构成的,D触发器是由基本逻辑门构成的。我们按照自顶向下的顺序使用数据流语句写出Verilog描述。首先是顶层模块counter:Page 316.5 部分实例部分实例 脉动进位计数器(续)脉动进位计数器(续) 接下来设计T_FF模块采用代替not门对q取反Page 326.5 部分实例部分实例 脉动进位计数器(续)脉动进位计数器(续) 最后,使用数据流语句来定义底层的D_FF模块Page 33Page 346.6
16、 小结小结 连续赋值是数据流建模的主要语法结构。连续赋值总是处于有效(active)状态,即任一操作数的变化都会立即导致对表达式的重新计算。连续赋值语句的左侧值(赋值目标)必须是线网类型的变量或其连接。任何逻辑功能都能够使用连续赋值语句来完成。 延迟值用于控制右侧变量的改变和语句左侧被赋予新值之间的时间间隔。线网的(赋值)延迟可以通过assign语句、隐式连续赋值和线网声明三种方法来实现。 赋值语句包含表达式、操作符和操作数。 操作符的类型包括算术、逻辑、关系、等价、按位、缩减、移位、拼接、重复和条件。单目、双目和三目操作符分别具有一个、两个和三个操作符,而拼接操作符可以具有任意多个操作符。 条件操作符的功能类似硬件中的多路选择器或软件编程语言中的if-then-else语句。 电路的数据流级描述要比门级描述简明。在第5章中讨论的四选一多路选择器和四位全加器同样可以用数据流语句来实现。在本章中,我们使用两种方法重新设计了这两个电路。此外我们还使用负沿触发的D触发器设计了一个四位脉动计数器。