
eda技术实用教程ppt教学课件-第5章_vhdl设计进阶.ppt
101页EDA技术实用教程,第5章 VHDL设计进阶,第5章 VHDL设计进阶,教学内容:5.1 数据对象 5.2 VHDL设计实例及其语法内涵 5.3 顺序语句归纳 5.4 并行赋值语句讨论 5.5 IF语句概述 *5.7 仿真延时 *5.8 VHDL的RTL表述,教学要求:,通过对VHDL电路示例分析学习,进一步了解用VHDL表达和设计电路的方法,更深入理解VHDL语言现象和语句规则的特点5.1 数据对象DATA OBJECTS VHDL语言中,可以赋予一个质的对象就称为数据对象或客体 数据对象主要包括以下三种: 常量(CONSTANT) 变量(VARIABLE) 信号(SIGNAL),,常数就是对某一常数名赋予一个固定的值定义一个常数主要是为了使设计实体中的某些量易于阅读和修改通常在程序开始前进行赋值,该值的数据类型在说明语句中说明常数的数据类型和赋值定义后,在程序中不能改变,是全局量 常数定义的一般表述如下: CONSTANT 常数名:数据类型 := 表达式 ; 例如: CONSTANT FBT : STD_LOGIC_VECTOR := “010110“ ;-- 标准位矢类型CONSTANT DATAIN : INTEGER := 15 ; -- 整数类型,5.1.1 常数(CONSTANT),常量的可视性规则:常量使用范围取决于它被定义的位置常量定义语句所允许的设计单元有程序包、实体、结构体、块、进程和子程序。
变量只能在进程和子程序中用,是一个局部量,不能将信息带出对它做出定义的当前设计单元变量的赋值是理想化数据传输,其赋值是立即生效的,不存在任何的延时行为(与信号不同) 定义变量的一般表述: VARIABLE 变量名 : 数据类型 [:= 初始值 ]; 例如: VARIABLE a : INTEGER RANGE 0 TO 15 ; VARIABLE d : STD_LOGIC ; 变量赋值语句: 目标变量名 :=表达式,赋值语句 “:=” 右边的表达式必须与目标变量具有相同的数据类型,这个表达式可以是一个运算表达式也可以是一个数值变量赋值语句左边的目标变量可以是单值变量,也可以是变量的集合 如:位矢量类型的变量 VARIABLE x,y : INTEGER RANGE 15 DOWNTO 0 ; VARIABLE a,b : STD_LOGIC_VECTOR(7 DOWNTO 0) ; x := 11 ; y := 2 + x ; -- 运算表达式赋值,y 也是实数变量 a := b a (0 TO 5) := b (2 TO 7) ;,5.1.2 变量(VARIABLE),变量作为局部量,其适用范围仅限于定义了变量的进程或子程序的顺序语句中,信号是电子电路内部硬件连接的抽象。
它可以作为设计实体中的并行语句模块间交流信息的通道信号及其相关的延时语句明显地体现了硬件系统的特征 信号定义语句的格式为: SIGNAL 信号名: 数据类型 [:= 初始值] ; 信号赋值语句表达式为: 目标信号名 <= 表达式 ;,SIGNAL a,b,c,y,z: INTEGER;. PROCESS (a,b,c) BEGINy <= a + b ;z <= c – a ;y <= b ; END PROCESS ;,5.1.3 信号(SIGNAL),信号的使用和定义范围是实体、结构体和程序包 在进程和子程序中不允许定义信号符号 “<=” 表示赋值操作,即将数据信息传入数据信息传入时可以设置延时过程,这与器件的实际传播延时十分接近因此信号值的代入采用“<=”代入符,而不是像变量赋值时那样用“:=” 但信号定义时初始赋值符号“:=”,即仿真的时间坐标是从赋初始值开始的信号SIGNAL 变量VARIABLE基本用法 用于作为电路中的信号连线 用于作为进程中局部数据存储单元 适用范围 在整个结构体内的任何地方都能适用 只能在所定义的进程中使用 行为特性 在进程的最后才对信号赋值 立即赋值,表5-1 信号与变量赋值语句功能的比较,,,,,,5.1.4 进程中的信号与变量赋值语句,变量赋值:局部特征,延时为零[局部的、暂时性的数据对象],信号赋值:全局特性,有某种延时。
实体单元间数据传输载体),(6)信号赋值和变量赋值分别使用不同的赋值符号“<=”和“:=”,信号类型和变量类型可以完全一致,也允许两者之间相互赋值,但要保证两者的类型相同信号与变量的区别,(1)信号赋值至少有δ延时,而变量赋值没有延时2)信号除当前值外有许多相关的信息,而变量只有当前值3)进程对信号敏感而对变量不敏感4)信号可以是多个进程的全局信号;而变量只在定义它们的顺序域中可见(共享变量除外)5)信号是硬件中连线的抽象描述,它们的功能是保存变化的数据和连接子元件,信号在元件的端口连接元件变量在硬件中没有类似的对应关系,它们用于硬件特性的高层次建模所需要的计算中变量、常量、信号三者的比较:,(1)从硬件电路系统来看,常量相当于电路中的恒定电平如GND或VCC接口,而变量和信号则相当于组合电路系统中门与门间的连接及其连线上的信号值 (2)从行为仿真和VHDL语句功能上看,变量和信号二者的区别主要表现在接受和保持信号的方式和信息保持与传递的区域大小上例如信号可以设置延时量,而变量则不能;变量只能作为局部的信息载体,而信号则可作为模块间的信息载体。
变量的设置有时只是一种过渡,最后的信息传输和界面间的通信都靠信号来完成 (3)从综合后所对应的硬件电路结构来看,信号一般将对应更多的硬件结构,但在许多情况下,信号和变量并没有什么区别例如在满足一定条件的进程中,综合后它们都能引入寄存器这时它们都具有能够接受赋值这一重要的共性,而VHDL综合器并不理会它们在接受赋值时存在的延时特性 (4)虽然VHDL仿真器允许变量和信号设置初始值,但在实际应用中,VHDL综合器并不会把这些信息综合进去因为实际的FPGA/CPLD芯片在上电后,并不能确保其初始状态的取向因此,对于时序仿真来说,设置的初始值在综合时是没有实际意义的信号与变量的区别 请比较下面两个进程:,--第一个进程signal a: integer :=5; signal b: integer :=10; process(a,b)begin a<=b; b<=a; end process; --第二个进程 processvariable a: integer :=5;variable b: integer :=10;begina:=b;b:=a; end process;,第一个进程执行后a=10,b=5 第二个进程进程执行后a=10,b=10,LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF3 IS PORT ( CLK,D1 : IN STD_LOGIC ;Q1 : OUT STD_LOGIC); END ; ARCHITECTURE bhv OF DFF3 ISBEGIN PROCESS (CLK)VARIABLE : STD_LOGIC ; BEGIN IF CLK'EVENT AND CLK = '1' THEN := D1 ; END IF;Q1 <= ;END PROCESS ;END ;,【例5-1】-D触发器 使用变量赋值的时序电路设计,. . .ARCHITECTURE bhv OF DFF3 ISSIGNAL : STD_LOGIC ;BEGIN PROCESS (CLK)BEGIN IF CLK'EVENT AND CLK ='1' THEN <= D1 ; END IF;Q1 <= ;END PROCESS ;END ;,【例5-2】-D触发器 使用信号赋值的时序电路设计,LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF3 IS PORT ( CLK,D1 : IN STD_LOGIC ;Q1 : OUT STD_LOGIC); END ; ARCHITECTURE bhv OF DFF3 ISSIGNAL A,B : STD_LOGIC ;BEGIN PROCESS (CLK) BEGINIF CLK'EVENT AND CLK = '1' THEN A <= D1; B <= A; Q1 <=B;END IF;END PROCESS ;END ;,【例5-3】--D触发器,LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF3 IS PORT ( CLK,D1 : IN STD_LOGIC ;Q1 : OUT STD_LOGIC); END ; ARCHITECTURE bhv OF DFF3 ISBEGIN PROCESS (CLK)VARIABLE A,B : STD_LOGIC ; BEGIN IF CLK'EVENT AND CLK ='1' THEN A:= D1; B := A; Q1 <= B;END IF;END PROCESS ;END ;,【例5-4】--D触发器,,,【例5-5】SIGNAL in1,in2,e1, . : STD_LOGIC ;. PROCESS(in1,in2, . . .)VARIABLE c1,. . . : STD_LOGIC_VECTOR(3 DOWNTO 0) ;BEGINIF in1 = '1' THEN . –- 第 1 行e1 <= “1010“ ; –- 第 2 行.IF in2 = '0' THEN . . . –- 第 15+n 行.c1 := “0011“ ; –- 第 30+m 行. END IF;END PROCESS;,--信号与变量赋值的区别,信号的行为特性,*信号赋值需一个时间延时. *在进程中,所有赋值语句(包括变量赋值),都必须在一个时间中完成。
变量赋值语句在进程启动的瞬间立即完成更新信号赋值语句在进程启动的瞬间执行赋值,但是在一个延时后完成赋值(更新),并且必须在遇到“END PROCESS”语句发生 *在进程中存在同一个信号有多个赋值源时,完成赋值,赋值对象的值更新的信号是最接近“END PROCESS”语句的信号,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux4 IS PORT (i0, i1, i2, i3, a, b : IN STD_LOGIC;q : OUT STD_LOGIC); END mux4; ARCHITECTURE body_mux4 OF mux4 IS signal muxval : integer range 7 downto 0; BEGIN process(i0,i1,i2,i3,a,b) beginmuxval q q q q null; end case; end process; END body_mux4;,。
