版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、38/38可编程集成电路基础1.1 概述1.2 在系统可编程逻辑器件的结构 1.2.1 ispLSI1016 1.2.2 编程接口和编程 硬件描述语言VHDL基础 2.1 概述2.2 VHDL语言语法规则2.2.1 标识符 ( Identifiers) 2.2.2 数据对象 ( Data Objects )2.2.3 数据类型 ( Data Types )2.2.4 运算符 ( Operators)2.3 VHDL的语句结构分类2.3.1 库2.3.2 实体说明2.3.3 结构定义2.4 顺序语句2.4.1 信号赋值语句2.4.2 变量赋值语句2.4.3 if_then_else语句2.4.4
2、 case_when语句2.5 并行语句2.5.1 when_else语句2.5.2 with_select_when语句 2.6 结构体的子结构描述2.6.1 block语句2.6.2 Proess ( 进程 ) 语句2.6.3 子程序2.6.4 程序包 2.7 基本逻辑电路设计ispDesignEXPERT 开发系统设计示例第二章 硬件描述语言VHDL基础2.1 概 述随着集成电路的设计规模的增大和复杂程度日益增高,传统的数字电路设计方法不适合设计大规模的系统。众多软件公司开发研制了具有自己特色的电路硬件描述语言(Hardware Description Language,HDL),存在着
3、很大的差异,因此,需要一种强大的、标准化的硬件描述语言,作为可相互交流的设计环境。美国国防部在80年代初提出了VHSIC(Very High Speed Integrated Circuit)计划,其目的是为大规模集成电路设计,建立一项新的描述方法。1981年提出了一种新的HDL,称之为VHSIC Hardware Description Language,简称为VHDL,VHDL语言可描述一个数字电路的输入、输出以 与相互间的行为与功能,它特有的层次性设计语法结构适合大型设计项目的团队合作,是目前最通用的硬件描述语言。这种语言有如下的诸多优点:1. 可描述复杂的数字电路系统;2成为国际的硬件
4、描述语言标准,1987年被采纳为IEEE1076标准3与硬件独立,一个设计可用于不同的硬件结构,而且设计时不必了解过多的硬件细节;4有丰富的软件支持VHDL的综合和仿真,从而能在设计阶段就能发现设计中的Bug,缩短设计时间,降低成本;5VHDL有良好的可读性,容易理解。2.2 VHDL语言的语法规则2.2.1VHDL标识符(Identifiers)基本标识符由字母、数字和下划线组成;第一个字符必须是字母;最后一个字符不能是下划线;不允许连续2个下划线;保留字(关键字)不能用于标识符;大小写是等效的。数据对象 ( Data Objects )VHDL中常用的数据对象有:常量、信号和变量,常量相当
5、于电路中的恒定电平,信号和变量相当于电路中的连线和连线上的信号值。1 常量 (Constant)常量声明即为一个常量名赋予一个固定值,其一般格式为:CONSTANT 常量名:数据类型:=表达式;常量可在Library、Entity、Architecture、Process 中进行定义,其有效范围也相应限定。例如:CONSTANT w: integer := 8;- “w” 是整数类型的常数,其值为“8”2 信号 (Signal)信号没有方向性,是一个全局量,用于进程之间的通信,声明电路内部的信号。在Entity中和Architecture中声明,信号声明语句格式为:SIGNAL 信号名:数据类
6、型 约束条件:=表达式;例如:SIGNAL GROUND: BIT : = 0 ;符号“:=”表示直接赋值,用于指定信号的初始值。信号赋值语句的格式为: 信号名 = 表达式 AFTER 时间表达式;其中时间表达式指定延迟时间,如果省略AFTER语句,则延迟时间取默认值。3 变量 (Variable)变量属于临时数据,没有物理意义,只能在Process和Function中定义,并只在其内部有效。其声明格式为:variable 变量名: 数据类型 约束条件:=表达式;例如:variable count: INTEGER RANCE 0 TO 255:=10;变量count为整数类型,RANCE 0
7、 TO 255是对类型INTEGER的附加限制,该语句一旦执行,立即将初始值10赋予变量。2.2.3数据类型VHDL的数据类型定义非常严格,规定每一个对象都必须有明确的数据类型。不同类型之间的数据不可直接代入,连接不同数据类型的信号为非法。赋予一个值的对象只有一个类型,且只能具有该类型的值。1. 定义数据类型在std库中有一个标准程序包,其中定义了一些预定义的数据类型。用VHDL编写程序时,该库自动打开,所以使用这些数据类型时,不需要再次打开。常用的预定义的数据类型如下:(1)整数(Integer) VHDL的算术运算符均定义范围为32位的整数。描述算术运算时,一般使用整数类型,但是使用整数很
8、难表示未知或三态等逻辑状态。(2)实数(Real) 实数取值范围为-1.0E38+1.0E38。由于处理实数的运算需要大量资源,故一般可编程逻辑器件开发系统中的VHDL综合器不支持这种数据类型。(3)位(Bit)和位矢量(Bit_Vector) 位和位矢量类型的通用性强。位只能取值0或1,其值放在单引号中;位矢量为双引号括的一组位数据,一般表示总线的状态,如:“001100” X”00cce2000” X表示是十六进制。(4)布尔(Boolean) 布尔数据类型经常用于逻辑关系运算中,其取值只有TRUE或FALSE。(5)字符(CHARACTER) 当对一个变量执行字符赋值操作时,应先声明后赋
9、值。例如将字符A赋给变量C,声明如下: variable C: character;然后执行赋值操作: C:= A; 其中字符A放在单引号中。(6)时间(Time)时间是一个物理量,其格式如下: TYPE 数据类型名 Is 范围; UNITS 基本单位; 单位; END UNITS; 例如,在STD库中的STANDARD程序包中,如下定义时间类型: TYPE Time IS -2147483647 TO 2147483647; UNITS fs;ps=1000 fs;us=1000 ps;us=1000 ns;ms=1000 us;sec=1000 ms;min=60 sec;hr=60 mi
10、n;END UNITS;2. IEEE预定义的标准逻辑数据类型VHDL的标准数据“BIT”类型是一个不可描述高阻状态的逻辑数据类型,定义为该类型的数据对象的取值是0或1。在IEEE库中的程序包STD_LOGIC_1164中定义了包含高阻(Z)和不定(X)状态的标准逻辑位和逻辑矢量数据 STD_LOGIC和STD_ LOGIC_VECTOR类型。使用这类数据类型时,必须写出库声明语句和使用程序包集合的声明语句。3. 用户定义的数据类型 VHDL允许用户根据芯片的资源和实际的需要定义数据类型。用户定义的数据类型格式:TYPE 数据类型名 数据类型名 数据类型定义;可以由用户定义的数据类型有:枚举(
11、Enumerated)类型、整数(Integer)类型、实数(Real)类型、数组(Array)类型、存取(Access)类型、文件(File)类型、记录(Record)类型与时间(Time)类型(物理类型),常用类型有:(1)枚举类型枚举类型是一种特殊的数据类型,用符号表示一组实际的二进制数。这种类型适合表示有限状态机的状态,有助于改善复杂电路的可读性。定义格式:TYPE 数据类型名 IS (元素,元素,);例如:TYPE states IS (stO, stl, st2, st3);在综合过程中,通常自动编码枚举类型。例如将上述语句中的stO编码为0,以后的元素依次加1。(2)整数(Int
12、eger)和实数(Real)类型整数和实数类型在标准程序包中已定义。在实际应用中,由于数据类型的取值范围比较小,故应重新定义。特别要注意限定取值范围,以提高芯片的利用率。例如,有很多开始学习编写VHDL程序的初学者,往往忘记添加定义整数类型名的约束范围,编写程序后,综合也可通过。但是将该程序转换为具体的在系统可编程逻辑芯片的熔丝图文件时,开发可编程逻辑器件的系统却显示该芯片的资源不够,即使一个使用非常少的逻辑门和寄存器即可完成的简单程序也不能够满足要求。这是因为不加约束范围时,EDA开发软件将该整数类型名的整数范围定义为默认范围,占用芯片内部的资源非常多。定义格式:TYPE 数据类型名 Is
13、数据类型定义 约束范围;例如:TYPE digit IS INTEGER RANGE 0 TO 9;TYPE digit IS REAL RANGE -10 TO 10;(3)数组(Array)类型数组是一样类型数据集合形成的一个新的数据类型,可以是一维或多维数组,定义格式为:TYPE 数据类型名 IS ARRAY 范围 OF 原数据名例如:TYPE word IS ARRAY (15 DOWNTO 0) OF BIT;其中15指定数组元素的个数为16个,DOWNTO指定下标以降序变化。例如:TYPE matrix IS ARRAY (1 TO 8,1 TO 8) OF BIT;TO指定下标以
14、升序变化,按低到高的顺序排列8个元素。为了使整个设计保持一致的设计风格,建议采用关键字“DOWNTO”说明数组或向量。向量最高位的下标值最大,并且处于向量的最左边。(4)记录(Record)类型记录将不同类型的数据和数据名组织在一起形成一个新的数据类型,其定义格式为:TYPE 数据类型名 IS RECORD元素名:数据类型名;元素名:数据类型名;END RECORD;例如:TYPE bank IS RECORDaddr0:STD_ LOGIC_VECTOR(7 DOWNTO 0);r0: INTEGER;END RECORD;4. 属性 VHDL中可以具有属性(attribute)的项(ite
15、ms)如下: (1)类型和子类型。 (2)过程和函数。 (3)信号、变量和常量。 (4)实体、结构体、配置和程序包。 (5)元件。(6)语句标号。 属性是上述项目的特征,通过预定义属性描述语句可以得到预定义项目的有关值、功能、类型和范围。预定义的属性类型有:类型(TYPES)、数组、信号和字符串。定义属性的一般格式为:项目名属性表示符;(1)类型(TYPES)的属性常用类型属性有: TLEFT:T中最左端的值。 TRIGHT:T中最右端的值。 THIGH:T中的最大值。 TLOW:T中的最小值。 TPOS(n):参数n在T中位置序号。 TVAL(n)T中位置为n的值。 TSUCC(n):得到的
16、值为TVAL(TPOS(n)+1)。 TPRED(n):得到的值为TVAL(TPOS(n)-1)。 TLEFTOF(n):得到靠近输入n的左边的值。 TRIGHTOF(n):得到靠近输入n的右边的值。 例如: TYPE number IS INTEGER 0 TO 9;i :=numberLEFT; -i=0i :=numberRIGHT; -i=9 i :=numberHIGH; -i=9 i :=numberLOW; -i=0(2)数组属性 常用的数组属性有: ALEFT(n):索引号n的区间的左端位置序号。 ARIGHT(n):索引号n的区间的右端位置序号。 AfHIGH(n):索引号n
17、的区间的高端位置序号。 ALOW(n):索引号n的区间的低端位置序号。 ALENGTH(n):索引号n的区间的长度值。 ARANGE(n):索引号n的区间的范围。 例如: TYPE bitll IS ARRAY (10 TO 20) OF BIT;VARIABLE len: INTEGER; len:=bitllLENGTH; -len=11(3)信号属性 sDELAYED(t):延时t个时间单位的信号。sSTABLE(t):在t个时间单位内,如果没有时间发生,返回TRUE:否则返回FALSE。sQUIET(t):如果该信号在t个时间单位内没有发生变化,返回TRUE:否则返回FALSE。sTR
18、ANSACTION:建立一个BIT类型的信号,当s每次改变时,该BIT信号翻转。sEVENT:若在当前模拟周期内,该信号发生了某个事件(信号值变化),返回TRUE:否则返回FALSE。事件(EVENT)要求信号值发生变化。sACTIVE:若在当前模拟周期内该信号发生事件处理,返回TRUE:否则返回FALSE。信号的活跃(ACTIVE)指信号值的任何变化。sLAST_EVENT:该信号前一个事件发生到现在所经过的时间。sLAST_VALUE:该信号在最近一个事件发生以前的值。sLAST_ACTIVE;从前一个事件处理到现在所经过的时间。例如: 表示一个上升沿时钟clk:clkEVENT AND
19、clk=1; 一种方法NOT clkSTABLE AND clk=1; 另种方法 表示一个下降沿时钟clk:clkEVENTAND clk=0;2.2.4.VHDL 运算符VHDL 为构造计算数值的表达式提供了许多预定义运 算符。预定义运 算符可分四种类型:算术运算符、关系运算符、逻辑运算符与连接运算符。分组算符运算二元运算符+-*/modrem*加减乘除求模求余乘方一元运算符+-abs正号负号求绝对值关系运算符=/=相等不等小于大于小于等于 *大于等于二元逻辑运算andornandnorxor逻辑与逻辑或与非或非异或一元逻辑运算not求补连接&连接 *注:(1)其中 = 操作符也用于表示赋值
20、操作;(2) 连接运算符&用于位的连接。用于一维数组时,右边的内容接在左边之后形成一个新的数组。例如:a 和 b 都是具有两位长度的位矢量,用连接符号连接后 (y = a & b;),y(3) = a(1), y(0)= b(0)。VHDL语句结构分类VHDL的程序结构由三部分构成:库、实体说明和结构定义。2.3.1. 库 (LIBRARY)库是专门存放预编译程序包 (package) 的地方, 这样它们就可以在其它设计中被调用。最常用的资源库为IEEE库,包含有IEEE标准的程序包,其中std_logic_1164是重要的程序包,大部分基于数字系统的程序包均以此程序包中所设定的标准为基础。一
21、般使用程序包中的数据类或子程序时,需要首先声名程序包所在的库(使用LIBERARY语句)和程序包的名称(使用USE语句, USE 语句后跟保留字 ALL, 表示使用库/ 程序包中的所有定义。)例 库内资源使用举例LIBRARY ieee; - IEEE 标准库的标志名USE ieee.std_logic_1164.ALL; - 程序包名USE ieee.std_logic_unsigned.ALL;前两条语句表示打开IEEE标准库中的std_logic_1164程序包中的所有资源。“ieee.std_logic_unsigned” 库允许对 “std_logic” 类型的信号使用某些运算符。V
22、HDL语言描述的对象称为实体(ENTITY),实体可以代表如CPU那样的复杂电路,也可以代表一块电路板、一个芯片或一个门电路。一个基本设计实体(Design Entity)由实体说明(Entity Declaration )和结构体 (Architecture Body)两部分构成。实体说明部分规定了设计单元的公共信息(输入输出端口信号或引脚),而结构体部分定义了设计单元具体的内部特性。2.3.2 实体说 明(entity)实体是设计中最基本的模块,用来定义一个IC引脚规格与基本参数。其结构如下:ENTITY实体名 IS类属参数说明;端口说明;END实体名;实体的通信点是端口 (PORT) ,
23、端口说明是对基本设计实体单元与外部接口的描述,一般书写格式为:PORT ( 端口名,端口名,:模式 数据类型名;端口名,端口名,:模式 数据类型名;端口名,端口名,:模式 数据类型名;);每个端口必须定义:信号名: 端口信号名在实体中必须是唯一的属性: 它包括模式 (MODE): 决定信号的方向;类型 (TYPE): 端口所采用的数据类型。端口模式 (MODE) 有以下几种类型:IN 信号进入实体但并不输出OUT 信号输 出 到实体外 部,但 不会在内部反馈使用INOUT 信号是双向的 (既可以进入实体,也可以离开实体)BUFFER 信号输出到实体外部, 但同时也在实体内部反馈VHDL语言有1
24、0种数据类型,在逻辑电路设计中可以用std_logic说明的位逻辑数据bit,也可以使用 std_logic_vector 说明的位矢量 bit_vector 。在使用时,须在实体说明之前增加两条语句:LIBRARYIEEE;IEEE库USEIEEE.STD_LOGIC_1164.ALL; 调用其中STD_LOGIC_1164程序包中所有的资源 (.ALL)例 实体的表述方法举例如下图所示,D 是 16-bit 输入总线,CLK, Reset, 和 OE 是输入信号,Q 是 16-bit 三态输出总线,AD 是 16-bit 双向总线,INT 是输出信号, 但也在内部使用,AS 是三态输出信号
25、图1. 实体my_design1的外部端口实体 my_design1 的VHDL 表述为:ENTITY my_design1 isPORT (d:IN std_logic_vector (15 downto 0);clk,reset,oe:IN std_logic;q:OUT std_logic_vector (15 downto 0);ad:INOUT std_logic_vector (15 downto 0);int:BUFFER std_logic;as:OUT std_logic);END my_design1;结构体 (Architecture)结构体描述了实体中具体的逻辑功能,格
26、式如下:ARCHITECTURE 结构体名 of 实体名 is定义语句 内部信号,常数,数据类型等的定义;BEGIN并发处理语句;END 结构体名;注:结构体包含的并发描述语句,语句执行的顺序与其出现的次序无关。例 结构体描述方法举例ENTITY logic ISPORT (a,b :IN std_logic;w, x, y:OUT std_logic;z:OUT std_logic_vector (3 downto 0);END logic;ARCHITECTURE behavior of logic isBEGINy = (a AND b);w = (a OR b);x = 1;z = “
27、0101”;END behavior;2.4 顺序语句 (Sequential语句 )顺序描述语句按出现的次序顺序执行,出现在进程(Process)或子程序中。VHDL中的顺序语句有:2.4.1 信号赋值语句格式为: 信号名 = 信号变量表达式赋值符号两边信号量的类型和长度应该一致。2.4.2 变量赋值语句格式为:变量名:= 表达式;变量赋值仅用在进程、函数和过程中。赋值符号也可为任何对象赋初值。Process,Function,Procedure中的语句都是顺序执行的,2.4.3 IF-THEN-ELSE该语句根据一个或一组条件的布尔运算而选择某一特定的执行通道,其格式如下:IF THEN顺
28、序处理语句;ELSIF THEN顺序处理语句;ELSE顺序处理语句;END IF;例 IF-THEN-ELSE 语句举例PROCESS (sel, a, b, c, d)BEGINif (sel = “00”) then step = a;elsif (sel = “01”) thenstep = b;elsif (sel = “10”) thenstep = c;else step 顺序处理语句;END CASE;CASE 和 IS 间的表达式取值满足条件表达式的值时,程序执行由符号=指定的顺序处理语句。例 CASE语句举例library ieee;use ieee.std_logic_11
29、64.all;entity mux isport (a,b,c:in std_logic;output:out std_logic );end mux;ARCHITECTURE archdesign OF muxISSIGNAL option: std_logic_vector(0 TO 1);BEGINdecode: PROCESS (a, b, c, option)BEGINCASE option ISWHEN 00 = output output output output = 0;END CASE;END PROCESS decode;END archdesign;2.4.5 WAIT
30、 语句进程(PROCESS)的执行过程可以由WAIT等待语句控制,WAIT语句有以下4种格式:WAIT : 无限等待;WAIT ON (信号名表):当其中任何一个信号发生变化,激活该进程;WAIT UNTIL (条件表达式):当条件表达式的取值为真时,激活该进程;WAIT FOR (时间表达式): 给出了进程被挂起的最长时间,一旦超过该值,则激活进程。2.5 并行 (Concurrent) 语句并行语句位于进程外部,语句不分先后,同时执行。在此主要讲述常用的 WHEN-ELSE 语句和 WITH-SELECT-WHEN 语句。2.5.1 WHEN-ELSE 语句这种条件型信号赋值语句根据不同的
31、条件,将不同的值赋给信号,其格式如下:信号名=表达式1when 条件1 else 表达式2when 条件2 else 表达式3when 条件3 else 表达式4when 条件4 else 表达式5when 条件5 else 在每个表达式后都跟有“WHEN”指定的条件,满足该条件时,将表达式的只赋给信号,最后一个表达式可以不跟条件,它表明当上述条件都不满足时,将该表达式的值赋给信号。例 用WHEN-ELSE语句描述四选一多路选择器library ieee;use ieee.std_logic_1164.all;entity mux4 is port( a,b,c,d,I,j: IN std_l
32、ogic; x: OUT std_logic);end mux4;architecture archmux of mux4issignal s : std_logic_vector (1 downto 0);begins = I&j;x = a when ( s = “00” ) else b when ( s = “01” ) else c when ( s = “10” ) else d;end archmux;2.5.2 WITH-SELECT-WHEN 语句选择型信号赋值语句用于并行的信号赋值,其格式为:with 表达式 select 信号名=表达式1when 条件1 else 表达式
33、2when 条件2 else 表达式3when 条件3 else 表达式n-1when 条件n-1 else 表达式nwhen 条件n else 注:WITH-SELECT-WHEN 必须指明所有互斥条件例 WITH-WHEN-ELSE语句举例- 四选一多路开关 (mux)library ieee;use ieee.std_logic_1164.all;entity mux isport (a, b, c, d:in std_logic;s:in std_logic_vector(1 downto 0);x:out std_logic );end mux;architecture archmu
34、x of mux isbeginwith s selectx = a when “00”,- x 根据 s 的不同而赋值 b when “01”, c when “10”, d when “11”;end archmux;小结:几种语句的比较语句With-select-whenWhen-elseIf-elseCase-when选择条件一个信号的不同值,互斥多个信号多种组合,不必互斥多个信号多种组合,不必互斥一个信号的不同值,互斥语句属性并行并行顺序顺序用途编码、译码、多路选择器优先编码器,地址译码器优先编码器,地址译码器编码、译码、多路选择器,2.6 结构体的子结构描述一个结构体可以用多个子结
35、构组成, 有利于编程和查错。 VHDL语言可以使用3种子结构描述语句,即BLOCK语句、PROCESS语句和子程序。2.6.1 BLOCK语句该语句组合结构体中的并行描述语句,可增加并行描述语句与其结构的可读性,使结构体层次清晰, 对程序的修改和移植非常有用. 该语句的结构为:块结构名:BLOCKBEGINEND BLOCK块结构名;BLOCK语句中描述的各个语句可并发执行, 举例如下:例: 采用BLOCK语句描述二选一电路ENTITY mux IS PORT ( d0,d1: IN BIT;Sel: IN BIT; Q: OUT BIT );END mux;ARCHITECTURE conn
36、ect OF mux IS SIGNAL tmp1, tmp2, tmp3: BIT;BEGINcale:BLOCKBEGIN tmp1 = d0 AND sel;tmp2 = d1 AND ( NOT sel) ;tmp3 = tmp1 OR tmp2;q = tmp3;END BLOCK cale;END connect;其中, cale:为块结构名, SIGNAL 为信号说明语句的关键字.2.6.2 进程 (PROCESS)语句进程 (PROCESS)用于描述顺序(sequential)事件并且包含在结构体中。顺序描述语句按语句出现的次序顺序执行。进程语句的结构为: 进程名 :PROCE
37、SS( 敏感信号1,敏感信号2, )BEGINEND PROCESS;进程语句包括三部分 :敏感表 (Sensitivity list) :当敏感表中 的某个信号变化时进程被激活进程 (PROCESS) :对行为的描述结束语句 (END) :描述进程的结束进程启动后,PROCESS中的语句将由上到下逐句执行一遍,执行到最后一个语句后,返回到开始语句,等待敏感信号的出现,因此,只要PROCESS中指定的敏感信号变化一次,该进程就执行一次。注:一个结构体可以包含多个进程语句;当进程中使用了WAIT语句时,进程不允许带有敏感信号。例 简单的进程实例:mux: PROCESS(a, b, s)- 敏感
38、表BEGINif ( s = 0 ) thenx = a; else- 定义一段进程x = b; end if;END PROCESS mux;这里进程mux 对于信号 a, b, s敏感,无论何时,信号 a, b或s发生变化, 进程中的语句将被重新赋值计算。2.6.3 子程序在VHDL中子程序由一系列说明和语句组成,可调用其他子程序,其本身也可以嵌套子程序。子程序有过程 (PROCEDURE) 和函数 (FUNCTION) 两种类型。函数只能用以计算数值, 而不能用以改变与函数形参相关的对象的值。因此,函数的参量只能是方式为 IN 的信号与常量,而过程的参量可以为 IN,OUT,INOUT
39、方式。过程能返回多个变量, 函数只能有一个返回值.1. 过程语句 ( Procedure )结构如下:PROCEDURE 过程名(参数1:参数2:) IS 定义语句;(变量等定义)BEGIN顺序处理语句;(过程处理语句)END 过程名注:过程中的输入/输出参数均应列在紧跟过程名的括号中。例 过程举例:ENTITY PROC IS PORT ( A: IN BIT_VECTOR (0 TO 2);M: OUT BIT_VECTOR (0 TO 2);END PROC;ARCHITECTURE EXAMPLE OF PROC ISPROCEDURE SIMPLE ( W,X,Y: IN BIT;
40、Z: OUT BIT ) ISBEGIN Z=(W AND X) OR Y;END SIMPLE;PROCESS (A)BEGINSIMPLE (A(0),A(1),A(2),M(0);SIMPLE (A(2),A(1),A(0),M(1);SIMPLE (A(1),A(2),A(0),M(2);END PROCESS;END EXAMPLE;2. 函数语句 ( Function )结构如下:FUNCTION 函数名(参数1:参数2:)RETURN 数据类型名 IS定义语句;BEGIN顺序处理语句;RETURN 返回变量名;END 函数名;注:函数语句括号内的所有参数都是输入参数或输入信号,函
41、数必须以RETURN语句结束,并且返回一个值。例 函数举例:- 此函数返回两数中的较小数FUNCTION Min( x,y : INTEGER) RETURN INTEGER ISBEGINIF x RETURN 1;WHEN 1 = RETURN 0;WHEN z = RETURN z;END CASE;END Invert;END Logic;2.7 用VHDL描述基本逻辑电路2.7.1 描述组合电路1. 用VHDL语言描述一个如图所示的三态门。doutdinen图3 三态门程序如下: LIBRARY IEEE; USE IEEESTD_LOGIC_1164.ALL; ENTITY tri
42、_gate IS PORT(din,en : IN STD_LOGIC; Dout :OUT STD_LOGIC); END tri_gate;ARCHITECTURE example OF tri_gate IS BEGIN PROCESS (din,en) BEGIN IF en=l THEN dout = din;ELSE dout =Z;END IF; END PROCESS;END example;2. 用VHDL语言描述如图所示的电路:cabm图4 逻辑电路ENTITY combine IS PORT(a,b,c:IN BIT; m:OUT BIT);END combine; AR
43、CHITECTURE example OF combine IS PROCESS(a, b, c) VARIABLE n: BIT; BEGIN IF a=l THEN n:= b;ELSE n:= C;END IF; m = n; END PROCESS; END example;注:用进程描述组合电路时,将输入信号a、b和c都写到敏感列表中,保证每个输入信号的变化均启动该进程,引起输出信号发生变化;否则未列入敏感列表的信号变化不启动该进程,这意味着该进程描述的电路引入了锁存器。设计时序电路D 型锁存器描述一个时钟信号为clk,数据输入信号为data,输出信号为q的锁存器。时钟信号clk为高
44、电平时,输出信号q随数据信号data变化而变化;为低电平时,输出信号保持不变,电路处于锁存状态。程序如下:entity latch isport(data,clk:in bit;q:out bit);end latch;architecture behave Of latch iSbeginprocess(clk,data)beginif(clk= 1)thenq=data;end if;end process;end behave;上升沿触发的D型触发器带有异步复位(reset,高电平有效)、异步置位(set,高电平有效)功能和上升沿触发的D型触发器。 程序如下: library ieee;
45、 use ieeestd_logic_1164all; entity dff is port(d,clk,reset,set:in std_logic; q:out std_logic); end dff; architecture async_set_reset of dff is BEGIN setreset:process(clk,reset,set) beginif reset= l then q= 0;elsif set= l then q= 1;elsif rising_edge(clk) then q= d;end if; end process setreset; end as
46、ync_set_reset;程序中rising_edge(clk)表示如果输入信号clk的上升沿来到时,将输入信号d赋给输出信号q。上升沿rising_edge和下降沿fallin_edge函数包含在标准库ieeestd_logic_1164a11中,用于描述上升沿和下降沿有效的事件。J_K型触发器带有复位(-clr,低电平有效)置位(-set,低电平有效)功能和上升沿触发的J-K型触发器的程序如下;LIBRARY IEEE; USE IEEESTD_LOGIC _1164ALL; ENTITY jkff ISPORT (set,clr,clk,j,k :IN STD_LOGIC;q,qb :
47、OUT STD_LOGIC); END jkff ; ARCHITECTURE rtl OF jkff IS SIGNAL q_s, qb_s: STD_LOGIC; BEGIN PROCESS( set,clr,clk,j,k) BEGIN IF ( set =0) THEN q_s = l; qb_s =0;-置位; ELSIF ( clr =0) THEN q_s = 0; qb_s = 1;-复位; ELSIF (clk EVENT AND clk=1) THENIF (j =0) AND ( k =1) THEN q_s = 0; qb_s =1;ELSIF (j =1) AND (
48、 k =0) THEN q_s = 1; qb_s =0;ELSIF (j=1) AND ( k=1) THEN q_s = NOT q_s; qb_s = NOT qb_s;END IF; END IF;q = q_s;qb = qb_s;END PROCESS; END rtl;4. 计数器用VHDL描述一个具有清零和计数允许功能的十进制计数器,输入信号为clk,清零控制信号为clr(低电平有效),计数允许控制信号为en(高电平有效)。程序如下: library ieee; use ieeestd _logic_1164all; entity counter0 is port( clk,c
49、lr,en:in std_logic; count:out integer range 0 to 15); end; architecture counter0_arch of counter0 is begin process(clk,clr)variable countl;inteqer range 0 to 15; beginif(clr=0)thencountl:=0; elsif rising_edge(clk)thenif(en=l) thenif countl=9 thencountl:=0; elsecountl:= countl+1; end if; end if; end
50、if;count=countl;end process; end counter0 _arch;5. 寄存器 (Register) 三种描述寄存器的方法1.PROCESS (clk,d)BEGINIF (clkevent and clk=1) THEN - clk 的上升沿q = d;END IF;END PROCESS;2.PROCESS (clk,d)BEGINIF RISING_EDGE (clk) THEN q = d;END IF;END PROCESS;3.PROCESS- 没有敏感表BEGINWAIT UNTIL clkevent AND clk = 1; - 必须是第一条q 在
51、 ispDesignEXPERT System Project Navigator主窗口中,按File=New Project 菜单建立一个新的工程文件,此时会弹出如下图所示的 对话框,在该对话框中的 Project Type 栏中,选择 VHDL 类型,然后,将 该工程文件存盘为 demo.syn。step2- 在 ispDesignEXPERT System Project Navigator 主 窗 口 中,选 择 Source=New 菜 单。 在 弹 出 的 New Source 对 话 框 中, 选 择 VHDL Module 类 型。此 时, 软 件 会 产 生 一 个 如 下
52、图 所 示 的 New VHDL Source 对 话 框:在 对 话 框 的 各 栏 中, 分 别 填 入 如 上 图 所 示 的 信 息。 按 OK 钮 后, 进 入 文 本 编 辑 器 - Text Editor 编 辑 VHDL 文 件。Step3-在 Text Editor中输入如下用VHDL描述的二十进制计数器的程序,存盘返回到ispDesignEXPERT System Project Navigator 项目引导器窗口,输入的源程序文件demo.vhd显示在Source in Project中。二十进制计数器程序与说明如下:library ieee;use ieee.std_l
53、ogic_1164.all;use ieee.std_logic_unsigned.all;entity demo isport(clk,clr,en: in std_logic; A,B,C,D,E: out std_logic);end demo;architecture demo_arch of demo issignal count: std_logic_vector(4 downto 0);begin A=count(0); B=count(1); C=count(2); D=count(3); E=count(4); process(clk,clr) Begin if(clr=0)
54、 then 清零(clr)信号有效时, count=00000;计数器清零 elsif rising_edge(clk) then 时钟信号的上升沿触发 if(en=1) then if(count=10011) then 计数到十进制的19时,再来 count=00000;一个计数时钟时,计数器从零开始计数 else count 选中Source in Project源 程 序 区 中 的 ispLSI1016-80LJ44, 在主窗口右侧选择Compile Design命令,编译文件demo.vhd后生成熔丝图文件(*.jed)。一般来讲,第一次输入的VHDL源程序时都可能存在语法和其他输
55、入方面的错误,此时可选择菜单 Tools=Synplicity Synplify Synthesis,出现如下窗口。选 Add调入demo.vhd,然后对demo.vhd文件进行编译、综合。 若 整 个 编 译、 综 合 过 程 无 错 误, 该 窗 口 在 综 合 过 程 结 束 时 会 自 动 关 闭。 若 在 此 过 程 中 出 错, 双 击 上 述 Synplify 窗 口 中 Source Files 栏 中 的 demo.vhd 文 件 进 行 修 改 并 存 盘, 然 后 按 RUN 钮 重 新 编 译。Step5- 编译和综合各步骤通过后,要形成可以将程序下载到实验板上的*.j
56、ed文件,为此,在文本编辑软件中按照程序编写一个引脚锁定文件(*.prn),将程序中的输入/输出信号与实验板上的ispLSI1016芯片的具体管脚一一对应。下面是demo中的二十进制计数器的引脚锁定文件demo.prn:In/out信号引脚属性芯片引脚号ClkIn11ClrIn14EnIn24AOut15BOut16COut17DOut18Eout19此后,打开编译设计文件的Compile Design的Compile Properties对话框,在Pin文本框中输入引脚锁定文件Demo.prn,然后单击“确定”按钮,完成引脚锁定功能。step6- 返回到ispDesignEXPERT Sys
57、tem Project Navigator 项目引导器窗口,选中Source in Project源 程 序 区 中 的 ispLSI1016-80LJ44, 在主窗口右侧选择Compile Design命令,编译文件demo.vhd后生成用于下载的熔丝图文件demo.jed。下载熔丝图文件为了下载熔丝图文件到实验板的ispLSI1016-80PLCC44芯片中,执行如下操作:检查实验板的编程接口电缆是否已连接到计算机的并行接口处,如未连好,文件存盘后关闭计算机,将接口电缆连接好后开机;在ispDesignEXPERT System Project Navigator 左侧的Source in
58、 Project窗口中,选中系统可编程逻辑器件ispLSI1016-80LJ44;在右侧的窗口中,双击系统可编程逻辑器件的ISP Daisy Chain Download(莲花链式下载)命令,进入程序下载操作;双击LSC ISP Daisy Chain Download 系统中的SCAN按钮开始扫描操作,查找用户实验板上的ispLSI器件,如果计算机的并行接口和编程接口电缆连接以与编程接口电缆和用户电路板的连接无误,则程序将显示用户电路板的ispLSI集成电路的型号,然后提示Scan Board: successful。在Browse窗口中找到需要下载的.jed文件,并选择PV(Program
59、 & Verify)选项;按Ctrl+R组合键执行下载操作,下载结束后,实验板上的5个发光二极管将开始计数显示。第四章 设计示例本章通过一个具有一定应用价值的实例,详细介绍了用VHDL语言从输入设计到编程可编程芯片的各个步骤,该实例设计已在ispDesignEXPERT开发系统中完成,并在TDS-1型在系统可编程逻辑集成电路实验板上得到了验证,关于TDS-1型在系统可编程逻辑集成电路实验板的电路原理可参见该系统的使用说明书。设计示例:用VHDL编写程序实现数字频率计的控制4个十进制计数器在单位时间内计数、停止计数和清零等逻辑功能。如下图所示,xclk为待测的输入信号,clk为8HZ标准信号,作
60、为产生1秒信号的输入信号。D0-A0为个位十进制计数器的BCD码输出信号,D3-A3为千位十进制计数器的BCD码输出信号,为实验板上的LED数码管驱动电路提供输入信号。D0-A0D1-A1D2-A2D3-A3Xclkclk图7 4位数字频率计该程序由5个进程组成,其中进程P1-P4分别描述4个十进制计数器,进程P5产生计数器的清零信号clr和计数允许信号 en,源程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity fre
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年商业用水服务协议3篇
- 《金融市场构成》课件
- 钢管脚手架安装与拆除专项施工方案
- 2024年金融业务合作合同下载3篇
- 高中教学德育计划总结
- 脑血管病支架植入术后护理
- 护理人员制度
- 甲状腺癌护理体会
- 2024年商铺租赁权的转让2篇
- 《土壤背景值》课件
- 枯死松树清理服务投标方案(完整技术标)
- 输血科运用PDCA循环缩短急诊发血时间品管圈成果汇报
- 7 《溜索》公开课一等奖创新教学设计
- 《信息技术与学科教学融合》心得体会(2篇)
- MOOC 线性代数-北京航空航天大学 中国大学慕课答案
- MOOC 人像摄影-中国传媒大学 中国大学慕课答案
- 宗教场所食品安全培训
- 2024届新高考物理冲刺复习:“正则动量”解决带电粒子在磁场中的运动问题
- 国开电大行政管理专科《监督学》期末考试总题库2024版
- 全国仿真职业技能竞赛考试题库及答案
- 人教鄂教版版五年级上册科学期末测试题
评论
0/150
提交评论