EDA课件第三章3.ppt

上传人:本田雅阁 文档编号:2891707 上传时间:2019-06-02 格式:PPT 页数:58 大小:566.52KB
返回 下载 相关 举报
EDA课件第三章3.ppt_第1页
第1页 / 共58页
EDA课件第三章3.ppt_第2页
第2页 / 共58页
EDA课件第三章3.ppt_第3页
第3页 / 共58页
EDA课件第三章3.ppt_第4页
第4页 / 共58页
EDA课件第三章3.ppt_第5页
第5页 / 共58页
点击查看更多>>
资源描述

《EDA课件第三章3.ppt》由会员分享,可在线阅读,更多相关《EDA课件第三章3.ppt(58页珍藏版)》请在三一文库上搜索。

1、VHDL语言描述系统硬件行为时,按语句执行顺序可以分为 (Sequential)描述语句和 Concurrent)描述语句。灵活运用这两类语句就可以正确地描述系统的并发行为和顺序行为。 例如,进程语句(Process Statement)是一个并发语句。在一个构造体内可以有几个进程语句同时存在,各进程语句是 执行的。但是,在进程内部所有语句应是 描述语句,也就是说,是按书写的顺序自上至下,一个语句一个语句地执行的。例如,IF 语句、LOOP语句等都属于此类顺序描述语句。,1、 顺序描述语句,执行顺序与书写顺序一致,与传统软件设计语言的特点相似。顺序语句只能用在 与 中。 在VHDL语言中顺序描

2、述语句主要有以下几种:,*信号代入语句; * 变量赋值语句; * WAIT语句; * IF语句; * CASE语句; * LOOP语句; * NEXT语句; * EXIT 语句;,2、 并发描述语句,VHDL的并发语句用来描述一组并发行为,它是并发执行的,与程序的书写顺序无关。 语句(PROCESS); (CONCURRENT)信号代入语句; (CONDITIONAL)信号代入语句; (SELECTIVE)信号代入语句; (CONCURRENT PROCEDURE)过程调用语句; (BLOCK)语句。,3.4.1 信号代入语句,信号代入语句的作用是将数据或表达式的结果赋给一个目标对象,目标对象

3、可以是内部信号,也可以是端口信号。 信号代入语句可分为: 三种。,1、简单信号代入语句,简单代入语句可以在进程内部使用,按顺序执行;代入语句也可以在构造体内部的进程外使用,且并发执行。 并发代入语句在仿真时刻同时运行,它表征了各个独立器件的各自的独立操作。如: a=b+c; d=e*f;,-分别描述加法器和乘法器行为。在实际系统中加法器和乘法器是同时并发执行的。,书写格式: 目的信号量=信号量表达式; 意义:将右边信号量表达式的值赋给左边的目的信号量。,1、简单信号代入语句(续),代入符号“=”的右边可以用算术表达式,也可以用逻辑运算表达式,还可以用关系操作表达式。,注意,1)代入符号与小于等

4、于的区别; 2)代入符号两边信号量的类型和长度应一致;,a. 一个进程:最后一次赋值有效,补充:信号的多次赋值,architecture rtl of ex is signal a : std_logic; begin process() begin a = b; a = c; end process; end rtl;,- 结果是a=c,2、 条件信号代入语句,格式:,目的信号量 = 表达式1 WHEN 条件1 ELSE 表达式2 WHEN 条件2 ELSE 表达式3 WHEN 条件3 ELSE 表达式n;,ELSE,在每个表达式后面都跟有用“WHEN”所指定的条件,如果满足该条件,则该表达

5、式值代入目的信号量;如果条件不满足,则再判断下一个表达式所指定的条件。最后一个表达式可以不跟条件,即所有条件都不满足时,条件信号代入语句举例,利用条件信号代入语句实现四选一逻辑电路。 ENTITY mux4 IS PORT ( i0, i1, i2, i3, a, b : IN STD_LOGIC; q : OUT STD_LOGIC); END mux4; ARCHITECTURE rtl OF mux4 IS SIGNAL sel : STD_LOGIC_VECTOR ( 1 DOWNTO 0 ); BEGIN sel= b,目的信号量 = 表达式1 WHEN 条件1 ELSE 表达式2

6、WHEN 条件2 ELSE 表达式3 WHEN 条件3 ELSE 表达式n;,格式:,WITH 表达式 SELECT 目的信号量 = 表达式1 WHEN 条件1, 表达式2 WHEN 条件2, 表达式n WHEN 条件n;,1)不能有重叠的条件分支。 2)最后条件可为 others。否则,全部条件 必须能包含表达式的所有可能值。 3)选择信号赋值语句与进程中的 case 语 句等价。,3、 选择信号代入语句,注,用选择信号代入语句实现四选一电路,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux IS PORT ( i0, i1, i2,

7、 i3, a, b : IN STD_LOGIC; q : OUT STD_LOGIC ); END mux; ARCHITECTURE behave OF mux IS SIGNAL sel : INTEGER; BEGIN WITH sel SELECT q= i0 WHEN 0, i1 WHEN 1, i2 WHEN 2 , i3 WHEN 3, X WHEN OTHERS;,sel= 0 WHEN a=0 AND b=0 ELSE 1 WHEN a=0 AND b=1 ELSE 2 WHEN a=1 AND b=0 ELSE 3 WHEN a=1 AND b=1 ELSE 4; END

8、 behave;,选择信号代入语句,根据sel的不同值来完成选择功能,条件信号代入语句,根据a和b不同取值,对信号sel代入值,4、 变量赋值语句,书写格式: 目的变量:=表达式; 意义:表达式的值替代目的变量的值,立即有效。,注意,1)两边的数据类型必须相同; 2)目的变量的类型和范围应事先给出; 3)右边的表达式可以是变量,信号或字符; 4)变量只在进程或子程序中使用,它无法传递到进程之外。,1)赋值方式的不同: 变量:= 表达式; 信号 = 表达式; 2)硬件实现的功能不同: 信号代表电路单元、功能模块间的互联,代表实际的硬件连线;变量代表暂存的临时数据。 3)有效范围的不同: 信号:程

9、序包、实体、结构体;全局量。 变量:进程、子程序;局部量。 4)赋值行为的不同: 信号赋值 更新数值;变量赋值 更新数值;,补充:变量与信号的差异,信号赋值: architecture rtl of sig is signal a,b : std_logic; - 定义信号 begin process(a, b) begin a = b ; b = a ; end process ; end rtl ;,补充举例:信号赋值与变量赋值的比较,在进程内部信号是延时更新,信号只有在整个过程执行完毕后(end process)才更新完成。此例中,a = b先是b的值赋给a,但a的值并不立即更新;所以在

10、执行 b = a 时,a还是先前的a,即是要将a的原值赋给b;当程序执行到end process时,a和b才更新完成,最终a和b值互换。,- 结果是 a 和 b 的值互换,变量赋值: architecture rtl of var is begin process variable a,b:std_logic; - 定义变量 begin a := b ; b := a ; end process ; end rtl;,补充举例:信号赋值与变量赋值的比较,变量的赋值立即生效,a的值立即更新为b的初始值,此时的a已经变为b的初值,于是就是将b的初值代入b,- 结果是a和b的值都等于b的初值,3.4

11、.2 IF语句,IF语句是VHDL语言中最基础、最常用的语句,常用于选择器、比较器、编码器、译码器状态机的设计,。 IF语句根据制定的条件来执行指定的语句,共有三种类型: 1、单选控制; 2、二选控制; 3、多选控制。,1、IF语句的单选控制,格式: IF 条件 THEN 顺序处理语句; END IF; 当程序执行到该IF语句时,就要判断IF语句所指定的条件是否成立。如果条件成立,则执行顺序处理语句;不成立则跳过IF语句所包含的顺序处理语句,而向下执行IF语句的后续语句。这里的条件起到门闩的控制作用。,D触发器的描述举例,LIBRARY IEEE; USE IEEE.STD.LOGIC.116

12、4.ALL; ENTITY dff IS PORT(clk,d : IN STD_LOGIC; q : OUT STD_LOGIC); END dff; ARCHITECTURE rtl OF dff IS BEGIN PROCESS( clk ) BEGIN IF( clkEVENT AND clk= 1 ) THEN q=d; END IF; END PROCESS; END trl;,注,此例中,IF语句的条件是时钟信号clk事件发生,且时钟clk=1(时钟脉冲上升沿到来)。只有在这个时候d端信号值才赋值给q端。当该条件不满足时,q端维持原来的输出值。,2、IF语句的二选择控制,格式:

13、IF 条件 THEN 顺序处理语句; ELSE 顺序处理语句; END IF; 当条件满足时,则执行THEN和ELSE之间的顺序处理语句;如不满足则执行ELSE和END IF之间的顺序处理语句。,IF二选择控制举例,二选一电路 ARCHITECTURE rtl OF mux2 IS BEGIN PROCESS( a, b, sel ) BEGIN IF ( sel = 1 ) THEN c= a; ELSE c=b; END IF; END PROCESS; END rtl;,此例中,二选一电路的输入端为a和b,选择控制端为sel,输出端为c。,注,3、IF语句的多条件控制,格式: IF 条件

14、 THEN 顺序处理语句; ELSIF 条件 THEN 顺序处理语句; ELSIF 条件 THEN 顺序处理语句; ELSE 顺序处理语句; END IF;,在多选择控制的IF语句中,设置了多个条件。当某个条件满足时就执行跟在该条件这后的顺序处理语句, 如果条件都不满足则执行ELSE和END IF之间的语句。,注,IF语句多条件控制语句举例,四选一电路: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux4 IS PORT ( input : IN STD_LOGIC_VECTOR ( 3 DOWNTO 0); sel : IN STD_

15、LOGIC_VECTOR ( 1 DOWNTO 0); y: OUT STD_LOGIC); END mux4; ARCHITECTURE rtl OF mux4 IS BEGIN PROCESS( input, sel ) BEGIN IF ( sel = “00” ) THEN y = input ( 0 ); ELSIF ( sel = “01” ) THEN y = input ( 1 );,ELSIF ( sel = “10” ) THEN y = input ( 2 ); ELSE y = input ( 3); END IF; END PROCESS; END rtl;,注,if

16、_then_elsif 语句中隐含了优先级别的判断,最先出现的条件优先级最高,可用于设计具有优先级的电路。如8-3优先级编码器。,3、IF语句小结,(1)IF语句可以用于凡是可以进行条件控制的逻辑电路设计。 (2)IF语句的条件判断的输出是布尔量,即是“真”(true)或“假”(FALSE)。因此在IF语句的条件表达式中只能使用关系运算操作符( =,/=, = )及逻辑运算操作符的组合表达式。 (3)IF语句只能在进程内部使用。,条件信号赋值语句与进程中的多选择 if 语句等价:,q = a WHEN sela = 1 ELSE b WHEN selb = 1 ELSE c;,PROCESS(

17、sela, selb, a, b, c) BEGIN IF sela=1 THEN q = a; ELSIF selb=1 THEN q = b; ELSE q = c; END IF; END PROCESS;,3.4.3 CASE语句,case 语句常用来描述总线或编码、译码行为。 可读性比if 语句强。 格式: CASE 表达式 IS WHEN 条件表达式=顺序处理语句; END CASE; 当CASE 和 IS 之间的表达式的取值满足指定的条件表达式的值时,程序将执行后跟的,由符号“=”所指的顺序处理语句。,CASE语句中条件表达式的形式可以是: 1)一个值;2)多个值的逻辑“或”关系

18、;3)一个取值范围;4)表示其它所有的缺省值(OTHERS)。 如: WHEN 值=顺序处理语句;-单个值 WHEN 值| 值| 值| | 值|=顺序处理语句;-多个值的“或” WHEN 值 TO 值=顺序处理语句;-一个取值范围 WHEN OTHERS=顺序处理语句;-其它所有缺省值,CASE语句使用举例,ENTITY mux4 IS PORT ( a, b, i0 ,i1, i2, i3 : IN STD_LOGIC; q : OUT STD_LOGIC); END mux4; ARCHITECTURE mux4_behave OF mux4 IS SIGNAL sel : STD_LOG

19、IC_VECTOR( 1 DOWNTO 0); BEGIN sel q q q q=i3; END CASE; END PROCESS; END mux4_behave;,1)前面例子中使用多选择控制的IF语句来描述四选一选择器时,发现 if_then_elsif 语句中隐含了优先级别的判断,最先出现的条件优先级最高。 2)而用CASE语句描述选择器行为时,没有值的优先级;,注,并置运算符用于位的连接而构成位矢量,1)分支条件的值必须在表达式的取值范围内。 2)两个分支条件不能重叠。 3)CASE语句执行时必须选中,且只能选中一个分支条件。 4)如果没有others分支条件存在,则分支条件必须

20、覆盖表达式所有可能的值。,Case 语句使用注意事项,CASE 表达式 IS WHEN 分支条件 = 顺序处理语句; WHEN 分支条件 = 顺序处理语句; WHEN 分支条件 = 顺序处理语句; END CASE;,3.4.4 LOOP语句,LOOP语句与其它高级语句中的循环语句一样,使程序能进行有规则的循环,循环次数受迭代算法控制。 VHDL语言中常用来描述位片逻辑及迭代电路的行为。 LOOP语句书写格式一般有两种: 1)FOR 循环变量 LOOP;2)WHILE 条件 LOOP。,1、FOR -LOOP循环,书写格式如下 标号:FOR 循环变量 IN 离散范围 LOOP 顺序处理语句;

21、END LOOP 标号;,循环变量的值在每次循环中都将发生变化;离散范围则表示循环变量在循环过程中依次取值的范围。例如: sum:=0; -sum初始值为0 ASUM: FOR i IN 1 TO 9 LOOP sum=i+sum; END LOOP ASUM; 该例中i是循环变量,它可取1,2,.,9共9个值,也就是sum=i+sum的算式应循环计算9次。,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY parity_check IS PORT ( a: IN STD_LOGIC_VECTOR (7 DOWNTO 0); y: OUT ST

22、D_LOGIC); END parity_check ; ARCHITECTURE rtl OF parity_check IS BEGIN PROCESS( a ) VARIABLE tmp: STD_LOGIC; BEGIN tmp:= 0; FOR i IN 0 TO 7 LOOP tmp:=tmp XOR a( i ); END LOOP; y=tmp; END PROCESS; END rtl;,1)本例实际是8位奇偶校验电路 2)i是一个循环变量,使用时无需先声明,也不能代入信号量和变量。 3)进程内tmp是变量,tmp的值通过赋给信号y而带出进程。,FOR-LOOP 循环举例,逐

23、一对输入的8位数中每一位都进行异或运算,输入8位2进制代码,输出校验码,暂存奇偶校验位,注,2、WHILE LOOP 循环,书写格式如下: 标号: WHILE 条件 LOOP 顺序处理语句; END LOOP 标号; 如果条件为“真” ,则进行循环;如果条件为“假”,则结束循环。,例:用WHILE语句来描述奇偶校验电路,. ARCHITECTURE behave OF parity_check IS BEGIN PROCESS( a ) VARIABLE temp : STD_LOGIC; VARIABLE i : INTEGER; BEGIN temp :=0; i:= 0; WHILE (

24、i8 ) LOOP temp:= temp XOR a( i); i:= i+1; END LOOP; y= temp; END PROCESS; END behave;,在WHILE-LOOP语句中的变量i要首先声明才能使用,这一点和FOR-LOOP语句中不一样。 循环变量 i 需事先定义、赋初值,并指定其变化方式。 一般使用FOR-LOOP语句比 WHILE-LOOP语句更多。,3、 NEXT语句,在LOOP语句中用NEXT语句来跳出本次循环,格式为: NEXT 标号 WHEN 条件; NEXT语句执行时将停止本次循环,而转入下一次新的循环。“标号”为下次循环的起始位置,而条件为NEXT语

25、句执行的条件。如果无“标号”也无条件,则只要执行到该语句就无条件跳出本次循环,从LOOP语句的起始位置进入下一次循环。 NEXT语句实际上是用于LOOP语句的内部循环控制。,NEXT 语句举例,PROCESS( a, b) CONSTANT max_limit : INTEGER := 255; BEGIN FOR i IN 0 TO max_limit LOOP IF (done( i )= TRUE ) THEN NEXT; ELSE done ( i ):= TRUE ; END IF ; q( i )=a ( i )AND b( i ); END LOOP; END PROCESS;,

26、无“标号”也无条件,则只要执行 到该语句就无条件跳出本次循环,4、 EXIT语句,EXIT 语句用于结束循环状态,从LOOP语句中跳出,结束LOOP语句的正常执行。格式: EXIT 标号 WHEN 条件; 如果EXIT后面没有跟“标号”和“WHEN条件”,则程序执行到该语句时就无条件地从LOOP语句中跳出,结束循环状态,继续执行LOOP语句后继的语句。,EXIT 语句举例,PROCESS( a ) VARIABLE int_a : INTEGER; BEGIN int_a := a; FOR i IN 0 TO max_limit LOOP IF ( int_a=0 ) THEN EXIT;

27、ELSE int_a :=int_a 1; q( i )=3.1416/ REAL( a*i ); END IF; y=q ; END PROCESS;,本例中,如果int_a小于或等于0时就执行EXIT语句,LOOP语句执行结束。,3.4.5 进程(PROCESS)语句,各个进程之间是并发处理的,而在进程内部则是按顺序处理的。在一个构造体内部可以有多个PROCESS语句同时并发执行。PROCESS语句是VHDL语句中是基本的语句。 PROCESS( 敏感信号表) BEGIN 顺序语句; END PROCESS; 特点: 1、进程与进程,或其它并发语句之间的并发性; 2、进程内部的顺序性; 3

28、、进程的启动与挂起,必须要有一个显式的敏感 信号量表或者包含一个WAIT语句; 4、进程与进程,或其它并发语句之间的通信。,PROCESS和并发代入语句,ARCHITECTURE behave OF a_var IS BEGIN output=a(i); END behave; 可以等效于一个进程语句: ARCHITECTURE behave OF a_var IS BEGIN PROCESS( a,i ) BEGIN output=a(i); END PROCESS; END behave;,一个简单并行信号赋值,可见:一个简单并行信号赋值语句是一个进程的缩写。,3.5 VHDL的描述风格,

29、对硬件系统进行描述,可以采用3种不同风格的描述方式,即行为描述方式、寄存器传输(或数据流Data Flow)描述方式和结构化的描述方式。这3种描述方式从不同的角度对硬件系统进行行为和功能的描述。一般情况下,采用后两种描述方式的VHDL语言程序易于进行逻辑综合,而采用行为描述的VHDL语言程序,大部分用于系统仿真,有些不可以进行逻辑综合。下面针对这3种不同风格的描述方式作一介绍。,3.5.1 构造体的行为描述方式,行为描述方式是对系统数学模型的描述,其抽象程度比寄存器传输描述方式和结构化描述方式更高。 在行为描述方式的程序中大量采用算术运算、关系运算、惯性延时、传输延时等难于进行逻辑综合和不能进

30、行逻辑综合的VHDL语句。 一般来说,采用行为描述方式的VHDL语言程序主要用于系统数学模型的仿真或者系统工作原理的仿真。,举例,用行为描述方式描述四选一电路。,条件信号代入语句,根据a和b具体状态,将0-4值代入信号量sel,6个输入端口和一个输出端口。a和b是选择信号输入端口,延时常用于行为描述,根据选择信号sel当前值,将指定代入值代入给输出量,3.5.2 构造体的寄存器传输(RTL)描述方式,RTL描述方式也称为数据流描述方式。采用行为描述方式的VHDL语言程序,抽象层次高,一般情况下只能用于行为层次的仿真,而不能进行逻辑综合。 对于用行为描述方式的VHDL语言程序只有改写为RTL描述

31、方式才能进行逻辑综合,也就是说RTL描述方式才是真正可以进行逻辑综合的描述方式。,RTL描述方式的特点,寄存器传输级描述(RTL -Register Transfer Level是以寄存器为特征,在寄存器之间插入组合逻辑电路。即以描述数据流的流向为特征。 在RTL描述方式中要么采用寄存器硬件的一一对应的直接描述,要么采用寄存器之间的功能描述。,2、举例,3.5.3 构造体的结构描述方式,所谓构造体的结构描述方式,就是在多层次的设计中,高层次的设计模块调用低层次的设计模块,或者直接用门电路设计单元来构成一个复杂的逻辑电路的描述方法。 结构描述方式最能提高设计效率,它可以将已有的设计成果,方便地用

32、到新的设计中去。,假如某一个逻辑电路是由AND门、OR门和XOR门构成的,而AND门、OR门和XOR门的逻辑电路都已由现成的设计单元。那么,用这些现成的设计单元(AND的ENTITY、OR的ENTITY和XOR的ENTITY)经适当连接就可以构成新的设计电路的ENTITY。 这样的描述,其结构非常清晰,且能做到与电原理图中所画的器件一一对应。当然,如要用结构描述方式,则要求设计人员有较多的硬件设计知识。 结构描述是元件互连的描述,使用元件例化语句。,定义:对所调用的较低层次的实体模块(元件)的 名称、类属参数、端口类型、数据类型的声明 语法:,元件声明类似实体声明(entity),1. 元件声

33、明,COMPONENT 元件名 GENERIC 说明; PORT 说明; END COMPONENT;,-类属声明,-端口声明,元件声明举例,定义:把低层元件安装(调用)到当前层次 设计实体内部的过程。 包括:类属参数传递、元件端口映射。,例如: u2: and2 PORT MAP (nsel,d1,ab);,2. 元件的例化,元件例化语句的书写格式为: 标号名:元件名 PORT MAP (信号,);,标号名加在元件名的前面,在该构造体的说明中该标号名一定是唯一的。 下一层元件的端口信号与当前层次的连接信号用PORT MAP的映射关系联系起来。 映射方法有两种:一种是位置映射;一种是名称映射。

34、,位置映射方法,例如,在二输入与门中端口的定义为: PORT (a,b: IN BIT; c: OUT BIT); 若在设计中,例化该二输入与门语句描述为: u2: and2 PORT MAP (nsel,d1,ab);,则连接关系是: nsel -a; d1-b; ab-c 其中nsel、d1和ab为当前层次的信号。,可见,所谓位置映射就是:连接该元件的信号书写顺序和被例化元件端口信号的顺序一一对应。,名称映射方法,名称映射例化为: u2: and2 PORT MAP (a=nsel,b=d1,c=ab);,可见:所谓名称映射就是将被例化元件的端口名与当前层次的信号名用“=”符号映射。,二输入与门中端口的定义为: PORT (a,b: IN BIT; c: OUT BIT);,构造体描述方式总结,三种描述方式比较,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1