首页 VHDL

VHDL

举报
开通vip

VHDLnull超高速集成电路硬件描述语言VHDL超高速集成电路硬件描述语言VHDL概述第一节 VHDL语言的基本组成第二节 VHDL数据类型和属性第三节 VHDL的行为描述第四节 VHDL的结构描述小结null★ 设计方法 ◆ 传统的电路系统设计方法:纯硬件逻辑设计(试凑法)存在的问题:  当系统规模增大,设计工作量大,设计周期长;  设计电路的体积大、功耗大、可靠性较低;  交流性较差。 ◆ 现代电路的设计方法:硬件设计+ 软件设计 ...

VHDL
null超高速集成电路硬件描述语言VHDL超高速集成电路硬件描述语言VHDL概述第一节 VHDL语言的基本组成第二节 VHDL数据类型和属性第三节 VHDL的行为描述第四节 VHDL的结构描述小结null★ 设计方法 ◆ 传统的电路系统设计方法:纯硬件逻辑设计(试凑法)存在的问 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 :  当系统规模增大,设计工作量大,设计周期长;  设计电路的体积大、功耗大、可靠性较低;  交流性较差。 ◆ 现代电路的设计方法:硬件设计+ 软件设计 从上至下的设计方法出现Hardware Description Language,HDLnull★ 硬件描述语言 ◆ ABEL ◆ AHDL ◆ Verilog HDL ◆ VHDL   美国国防部在80年代初提出了VHSIC(Very High Speed Integrated Circuit)计划,其目标之一是为下一代集成电路的生产,实现阶段性的工艺极限以及完成10万门级以上的设计,建立一项新的描述方法。1981年提出了一种新的HDL,称之为VHSIC Hardware Description Language,简称为VHDL。 null★ VHDL语言的主要优点 ◆ 是一种多层次的硬件描述语言,覆盖面广,描述能力强。即设计的原始描述可以是非常简练的描述,经过层层细化求精,最终成为可直接付诸生产的电路级或版图参数描述,整个过程都可以在VHDL的环境下进行。 ◆  VHDL 有良好的可读性,即可以被计算机接受,也容易被理解用VHDL 书写的原文件,既是程序,又是文档,既是技术人员之间交换信息的文件,又可作为合同签约者之间的文件。   null◆ VHDL本身的生命期长。因为VHDL的硬件描述与工艺技术无关,不会因工艺变化而使描述过时。与工艺技术有关的参数可通过VHDL提供的属性加以描述,工艺改变时,只需修改相应程序中的属性参数即可。 ◆  支持大规模设计的分解和已有设计的再利用。一个大规模设计不可能一个人独立完成,它将由多人,多项目组来共同完成。VHDL为设计的分解和设计的再利用提供了有力的支持。 ◆  VHDL已成为IEEE承认的一个工业标准,事实上已成为通用硬件描述语言。  ★ VHDL语言的主要优点第一节 VHDL的基本组成第一节 VHDL的基本组成VHDL 语言参数部分——程序包接口部分—设计实体描述部分—结构体一、参数部分——程序包一、参数部分——程序包LIBRARY ieee;USE ieee.std_logic_1164.all;程序包设计者自身设计的程序包 设计中的子程序和公用数据类型的集合。调用数据类型标准程序包的VHDL语言描述 放在VHDL程序的最前面, 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示以后在实体或结构体中要用到数据类型包中的数据类型。二、接口部分—设计实体二、接口部分—设计实体设计实体提供设计模块的公共信息,是VHDL设计电路的最基本部分。VHDL实体的描述方法:ENTITY kxor IS PORT(a1,b1:IN std_logic; c1:OUT std_logic);END kxor; 一个模块中仅有一个设计实体。二、接口部分—设计实体二、接口部分—设计实体ENTITY、IS、PORT、IN、OUT和END为关键字; ENTITY...END之间表示实体内容; kxor表示实体的名称,即电路的符号名; PORT——端口(引脚)信息关键字,描述了信号的流向; IN——输入模式; OUT——输出模式; std_logic表示信号取值的类型为标准逻辑。nullENTITY sel IS   PORT(d0,d1,d2,d3:IN BIT;      s :IN INTEGER RANGE 0 TO 3;   out1 :OUT BIT); END sel;二、接口部分—设计实体再例:三、描述部分—结构体三、描述部分—结构体结构体描述实体硬件的互连关系、数据的传输和变换以及动态行为。 一个实体可以对应多个结构体,每个结构体可以代表该硬件的某一方面特性,例如行为特性,结构特性。ARCHITECTURE kxor_arc OF kxor ISBEGIN   c1 <= (NOT a1 AND b1) OR (a1 AND NOT b1);END kxor_arc;null第二节 VHDL数据类型和属性第二节 VHDL数据类型和属性 VHDL硬件描述语言中涉及到了许多信号,变量和常量,它们用来保持数据。 在VHDL中,保持数据的信号,变量和常量称为目标。 VHDL是一种非常严格的数据类型化语言,规定每个信号,常量或变量和每个表达式有一个唯一的确定数据类型,每个目标和表达式的数据类型静态地被确定。 每一个目标都有一个数据类型来确定目标保持的那一类数据。 在表达式中分配数值给目标时的数据类型不可以被混用。在VHDL中目标有三种:信号、变量和常量。在VHDL中目标有三种:信号、变量和常量。 信号和变量可以赋予一系列的值,而常量一次仅被分配一个值。 信号和变量又有不同,赋予信号的数值要到未来 的某个时刻,信号才接受当前的数值;而赋予变量的 数值,变量立即接受当前的数值。目标的一般形式如下:< 目标种类> < 目标< , 目标...>> : < 目标类型> :=< 表达式> ;第二节 VHDL数据类型和属性目标:是一个或多个代表着目标种类的字符串,多个目 标时用“,”号分开。目标:是一个或多个代表着目标种类的字符串,多个目 标时用“,”号分开。< 目标种类> < 目标< , 目标...>> : < 目标类型> :=< 表达式> ;目标种类:信号(SIGNAL)、变量(VARIABLE)和常量 (CONSTANT)。信号:它表示把元件的端口连接在一起的互连线。 变量:用于对暂时数据的局部存储,变量只在进程和子 程序内部定义。 常量:对某些特定类型数据赋予的一次性数值。表达式:表达式是为了规定目标的初始值,这是缺省部分。目标类型:为了规定目标的特征,VHDL含有很宽范围的数据类型。VHDL除了有基本的数据类型之外,设计者还可以建立自己的数据类型,类型说明部分规定类型名和类型范围,它的一般形式是:VARIABLE a1:INTEGER:=3;TYPE < 类型名> IS < 类型范围> ;TYPE < 类型名> IS < 类型范围> ;标量类型、复合类型、子类型、文件类型和寻址类型。标量类型包括所有的简单类型:如整数、实数等;复合类型包括数组和记录;寻址类型在一般编辑语言中等价为指针;文件类型是设计者定义的文件类型为设计者提供说明的文件对象;子类型主要是对现有类型加以限制。VHDL可用数据类型有五类: 下面举一个VHDL程序加深理解枚举类型的使用。一、 标量数据类型 标量数据类型是基本的数据类型,它包括整数类型、 实数类型、物理类型和枚举类型。 物理类型要提供一个基本单位,然后在这个基本单位 上定义多个或零个次级单位,每个次级单位都是基本单位 的整数倍。 枚举类型在形式上是定义括弧括起来的字符串文字表,一个字符串文字在枚举类型定义中只能出现一次,但允许同样一个字符串文字出现在不同的枚举类型的字符串文字表中,枚举类型的字符串文字表中的文字是由设计者定义的,这些字母可以是单个字母,也可以是一个字符串,例如BREAKFAST, Lunch, a等。 下面举一个VHDL程序加深理解枚举类型的使用。 一个目标的数值有可能经常更换或者说是包含多个值,但一个目标一次只能被一种类型说明。PACKAGE meals_pkg IS TYPE meal IS(breakfast,lunch,dinner); END meals_pkg;PACKAGE meals_pkg IS TYPE meal IS(breakfast,lunch,dinner); END meals_pkg;例1:USE work . meals_pkg . all;ARCHITECTURE meals_arc OF meals IS BEGIN WITH previous_meal SELECT next_meal <= breakfast WHEN dinner, lunch WHEN breakfast, dinner WHEN lunch; END meals_arc;自定义程序包的名字枚举数据类型的名字三个枚举数据ENTITY meals IS PORT(previous_meal:IN meal; next_meal:OUT meal); END meals;调用自定义程序包枚举型数据二、复合数据类型二、复合数据类型 复合类型是由数组类型和记录类型组成,它们的元素是标量类型的元素。数组类型是由相同的标量元素组成,即同构复合类型,数组可以是一维二维或多维。例如TYPE matrix IS ARRAY(row,column) OF std_logic; TYPE r_ma IS ARRAY( 1 TO 10, 1 TO 40) OF std_logic; TYPE word IS ARRAY(15 DOWNTO 0) OF BIT;TYPE column IS RANGE 1 TO 40; TYPE row IS RANGE 1 TO 10;CONSTANT ROM : BIT_VECTOR(0 TO 15); Word(15)…word(0)共16个同数据类型的元素。ARCHITECTURE rom_arc OF rom IS BEGIN PROCESS(cs,x1,x2,x3,x4) VARIABLE n:NATURAL RANGE 0 TO 15; CONSTANT rom0:std_logic_vector(0 TO 15):= “0101010101010101”; CONSTANT rom1:std_logic_vector(0 TO 15):= “0011001100110011”; CONSTANT rom2:std_logic_vector(0 TO 15):= “0000111100001111”; CONSTANT rom3:std_logic_vector(0 TO 15):= “0000000011111111”;ARCHITECTURE rom_arc OF rom IS BEGIN PROCESS(cs,x1,x2,x3,x4) VARIABLE n:NATURAL RANGE 0 TO 15; CONSTANT rom0:std_logic_vector(0 TO 15):= “0101010101010101”; CONSTANT rom1:std_logic_vector(0 TO 15):= “0011001100110011”; CONSTANT rom2:std_logic_vector(0 TO 15):= “0000111100001111”; CONSTANT rom3:std_logic_vector(0 TO 15):= “0000000011111111”;下面举一个VHDL程序说明一维数组实现16×4的ROM。LIBRARY ieee; USE ieee.std_logic_1164.all;ENTITY rom IS PORT(cs,x1,x2,x3,x4:IN std_logic; d0,d1,d2,d3:OUT std_logic); END rom;rom0(0)=0rom0(15)=1 BEGIN IF cs= ‘1’ THEN n:=0; IF x1 = ‘1’ THEN n:= n+1; END IF; IF x2 = ‘1’ THEN n:= n+2; END IF; IF x3 = ‘1’ THEN n:= n+4; END IF; IF x4 = ‘1’ THEN n:= n+8; END IF; d0 <= rom0(n) AFTER 10 ns; d1 <= rom1(n) AFTER 10 ns; d2 <= rom2(n) AFTER 10 ns; d3 <= rom3(n) AFTER 10 ns; ELSE d0 <= ‘Z’ AFTER 10 ns; d1 <= ‘Z’ AFTER 10 ns; d2 <= ‘Z’ AFTER 10 ns; d3 <= ‘Z’ AFTER 10 ns; END IF; END PROCESS; END rom_arc; IF cs= ‘1’ THEN n:=0; IF x1 = ‘1’ THEN n:= n+1; END IF; IF x2 = ‘1’ THEN n:= n+2; END IF; IF x3 = ‘1’ THEN n:= n+4; END IF; IF x4 = ‘1’ THEN n:= n+8; END IF; d0 <= rom0(n) AFTER 10 ns; d1 <= rom1(n) AFTER 10 ns; d2 <= rom2(n) AFTER 10 ns; d3 <= rom3(n) AFTER 10 ns; ELSE d0 <= ‘Z’ AFTER 10 ns; d1 <= ‘Z’ AFTER 10 ns; d2 <= ‘Z’ AFTER 10 ns; d3 <= ‘Z’ AFTER 10 ns; END IF; END PROCESS; END rom_arc; 用计算n来定位地址。 将地址n中的4位数据送到输出d0~d3。 如果芯片不使能,则将高阻送到输出d0~d3。 在结构体说明区(ARCHITECTURE和BEGIN之间)被说明的目标,仅可以在此结构体中引用或在结构体中的任何进程语句中被引用,称此目标为局部信号。 在结构体说明区(ARCHITECTURE和BEGIN之间)被说明的目标,仅可以在此结构体中引用或在结构体中的任何进程语句中被引用,称此目标为局部信号。数据类型的全局化和局部化 前面已经讨论VHDL描述语言的组成是由程序包、实体、结构体(结构体中有进程)、以及子程序而组成,不同的目标可以在指定的组成部分内加以说明。 如果一个目标在实体说明部分被说明,那么在本实体和本实体内部的任何结构体和任何进程中都可以引用这个目标,称为全局信号。标量类型:实体、结构体、进程说明区和程序包和子程序。 复合类型:实体、结构体、进程说明区和程序包和子程序。 文件类型:子程序和进程说明区。 寻址类型:进程语句说明区。标量类型:实体、结构体、进程说明区和程序包和子程序。 复合类型:实体、结构体、进程说明区和程序包和子程序。 文件类型:子程序和进程说明区。 寻址类型:进程语句说明区。VHDL中不同的目标和类型规定在不同的构造中可以被说明。信号:实体、结构体说明区、程序包和子程序。 变量:进程说明区和子程序。 常量:实体、结构体、进程说明区、程序包和子程序。VHDL的属性VHDL的属性TYPE bit1 IS ARRAY(63 DOWNTO 32) OF BIT; VARIABLE left_range,right_range,uprange,lowrange:INTEGER; BEGIN left_range:= bit1’LEFT; --returns 63 right_range:= bit1’RIGHT; --returns 32 uprange:= bit1’HIGH; --returns 63 lowrange:= bit1’LOW; --returns 32TYPE bit1 IS ARRAY(63 DOWNTO 32) OF BIT; VARIABLE left_range,right_range,uprange,lowrange:INTEGER; BEGIN left_range:= bit1’LEFT; --returns 63 right_range:= bit1’RIGHT; --returns 32 uprange:= bit1’HIGH; --returns 63 lowrange:= bit1’LOW; --returns 32 值类属性:值类属性用于返回数组的边界或长度,首先举一例 数组边界的例子说明值类属性。 例8:TYPE bit1 IS ARRAY(0 TO 7) OF BIT; TYPE bit2 IS ARRAY(8 TO 31) OF BIT; VARIABLE len1,len2:INTEGER; BEGIN len1:=bit1’LENGTH; --return 8 len2:=bit2’LENGTH; --return 24TYPE bit1 IS ARRAY(0 TO 7) OF BIT; TYPE bit2 IS ARRAY(8 TO 31) OF BIT; VARIABLE len1,len2:INTEGER; BEGIN len1:=bit1’LENGTH; --return 8 len2:=bit2’LENGTH; --return 24 下面再举一个值类数组属性的例子,让其返回数组范围的总长度。 例: 它可用来检查一个信号的变化,并且变化刚刚发生,既推断出在信号上发生了一个跳变。 它可用来检查一个信号的变化,并且变化刚刚发生,既推断出在信号上发生了一个跳变。 函数信号属性:函数信号属性用来返回有关信 号行为功能的信息,它反映一个信号是否正好有值 的变化或事件的发生,如clk’EVENT,这个属性为 “EVENT”,对检查时钟边沿触发是很有效的。下面举一个例子,说明函数信号属性的用法。IF clk= ‘1’ AND clk’EVENT THEN q <= d; END IF; 上述语句中用到了函数信号属性clk’EVENT,说明如果时钟信号clk为高电平,并且事件刚刚发生,也就是说是时钟上升沿有效,此时q得到d的信号。null第三节 VHDL的行为描述 三个行为即可以是相互独立,成为单一的行为 描述体,又可以相互联系,成为混合描述体,如进 程行为描述行为之间是并行行为,进程行为体的内 部是顺序行为。null一、VHDL的并行行为 在典型的编程语言如C或Pascal中,每个赋值语句按规定的次序,一个接在另一个之后顺序执行,执行的次序由源文件决定。 在VHDL中,结构体的内部没有规定语句的次序,执行的次序仅由对语句中的敏感信号发生的事件决定,且语句是同时执行。结构体中并行赋值语句的一般格式如下:< 对象> <= < 表达式>; 读作对象得到表达式的值,作用是将表达式的信号值分配给对象,即每当表达式的信号值变化时执行该语句。 每个表达式都至少有一个敏感信号,每当敏感信号改变其 值时,就执行这个信号赋值语句。 在所有的并行语句中,两个以上的并行赋值语句在字面上的顺序并不表明它们的执行顺序。 在所有的并行语句中,两个以上的并行赋值语句在字面上的顺序并不表明它们的执行顺序。例如下面的两个结构体在功能上是等价的。ENTITY exe IS PORT(a1,a2:IN BIT; b1,b2:OUT BIT); END exe;ARCHITECTURE exe_arc1 OF exe IS BEGIN b1 <= a1 AND b2; b2 <= NOT a1 OR a2; END exe_arc1;ARCHITECTURE exe_arc2 OF exe IS BEGIN b2 <= NOT a1 OR a2; b1 <= a1 AND b2; END exe_arc2;null 另一种并行信号赋值语句是选择信号赋值语句,它们的每一个赋值语句都需要给出一个表达式,同时给出与该表达式的每个可能值相关联的信号。 选择信号赋值语句的一般形式如下: WITH < 表达式> SELECT < 对象> <= < 信号1> WHEN < 分支1> , < 信号2> WHEN < 分支2> , < 信号n> WHEN < 分支n> ;……null 一个典型的四路数据选择器VHDL程序说明WITH一般 形式的用法。ENTITY sels IS PORT(d0,d1,d2,d3:IN BIT; s :IN INTEGER RANGE 0 TO 3; out1 :OUT BIT); END sels;ARCHITECTURE sels_arc OF sels IS BEGIN WITH s SELECT out1 <= d0 WHEN 0, d1 WHEN 1, d2 WHEN 2, d3 WHEN 3; END sels_arc; 仍以四路数据选择器为例,讨论另一个较为复杂的并行信号赋值语句的例子,以便更详细地说明并行概念,下面是四输入数据选择器的第二个VHDL程序。 例: 仍以四路数据选择器为例,讨论另一个较为复杂的并行信号赋值语句的例子,以便更详细地说明并行概念,下面是四输入数据选择器的第二个VHDL程序。 例: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 mux4_arc OF mux4 IS SIGNAL sel :INTEGER ; BEGIN Q <= I0 AFTER 10 ns WHEN sel= 0 ELSE I1 AFTER 10 ns WHEN sel= 1 ELSE I2 AFTER 10 ns WHEN sel= 2 ELSE I3 AFTER 10 ns ; sel <= 0 WHEN A= ‘0’ AND B= ‘0’ ELSE 1 WHEN A= ‘1’ AND B= ‘0’ ELSE 2 WHEN A= ‘0’ AND B= ‘1’ ELSE 3 ; END mux4_arc;null二、VHDL的进程行为 VHDL除了并行行为之外,还有顺序行为。顺序行为执行 的顺序是一个接在另一个之后严格执行。顺序行为的语句存在于VHDL程序中的进程行为之中。而进程行为之间是并行行为语句。进程行为语句的一般形式如下:< 进程标号> :PROCESS < 敏感信号表> < 进程说明区> BEGIN < 语句部分> WAIT ON < 敏感信号表> ; WAIT UNTIL < 条件表达式> ; WAIT FOR < 时间表达式> ; END PROCESS;null 进程行为的说明区定义该进程所需要的局部数据环境、它 包括子程序说明、属性说明和变量说明等。在这里只给出变量说明的一个例子,变量说明的一般形式为 VARIABLE < 定义变量表> :< 类型说明:= 初始值> ;下面进程说明区中说明了变量count,进程也可对变量赋值。 PROCESS VARIABLE count:INTEGER:= 0; BEGIN count:= count+1; WAIT FOR 1000 ns; END PROCESS;null 整个实体模块中的每个进程行为语句,可以在任何时候被 激活,所有被激活的进程是并行执行的。 下面举一个三八通用译码器程序的例子,说明进程语句如何工作。LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_arith.all; ENTITY decoder IS PORT(sel : IN UNSIGNED(2 DOWNTO 0); dout : OUT UNSIGNED(7 DOWNTO 0)); END decoder;ARCHITECTURE decoder_arc OF decoder IS SIGNAL sel1 :INTEGER; BEGIN PROCESS(sel) BEGINsel1 <= CONV_INTEGER(sel); CASE sel1 IS WHEN 0 => dout <= (‘0’,’0’,’0’,’0’,’0’,’0’,’0’,’1’) AFTER 5 ns;null WHEN 1 => dout <= (‘0’,’0’,’0’,’0’,’0’,’0’,’1’,’0’) AFTER 5 ns; WHEN 2 => dout <= (‘0’,’0’,’0’,’0’,’0’,’1’,’0’,’0’) AFTER 5 ns; WHEN 3 => dout <= (‘0’,’0’,’0’,’0’,’1’,’0’,’0’,’0’) AFTER 5 ns; WHEN 4 => dout <= (‘0’,’0’,’0’,’1’,’0’,’0’,’0’,’0’) AFTER 5 ns; WHEN 5 => dout <= (‘0’,’0’,’1’,’0’,’0’,’0’,’0’,’0’) AFTER 5 ns; WHEN 6 => dout <= (‘0’,’1’,’0’,’0’,’0’,’0’,’0’,’0’) AFTER 5 ns; WHEN OTHERS => dout <= (‘1’,’0’,’0’,’0’,’0’,’0’,’0’,’0’) AFTER 5 ns; END CASE; END PROCESS; END decoder_arc; 此例不像上例那样等待时间到1000ns以后再激活进程,而 是只要sel的值一发生改变就激活进程,从第一句执行直到满足 条件后再被挂起。PROCESS(sel)null下例是另一种激活进程的方式:ENTITY reg IS PORT(d,clk:IN BIT; q1,q2:OUT BIT); END reg; ARCHITECTURE reg_arc OF reg IS BEGIN PROCESS BEGIN WAIT UNTIL clk= ‘1’; q1 <= d; END PROCESS; PROCESS BEGIN WAIT UNTIL clk= ‘0’; q2 <= d; END PROCESS; END reg_arc; 进程行为语句之间是并行关系,进程行为语句内部是顺序关系。 VHDL的每个结构体中可以有多个进程行为语句。它的关键之处是:null三、VHDL的顺序行为顺序行为语句可分为两大类:条件控制类,循环控制类。 在这两类中选出六种 IF、CASE、FOR、WHILE..LOOP、 EXIT和ASSERT进行讨论 IF < 条件> THEN < 语句> ; ELSIF < 条件> THEN < 语句> ; ELSIF < 条件> THEN < 语句> ; ELSE < 语句> ; END IF;1. IF语句IF语句的一般形式为:ARCHITECTURE alarm_arc OF alarm IS BEGINARCHITECTURE alarm_arc OF alarm IS BEGIN下面举例说明IF条件语句的用法。 例: 用VHDL设计一家用告警系统的控制逻辑,它有来自传感 器的三个输入信号smoke、door、water和准备传输到告警设备 的三个输出触发信号fire_alarm、burg_alarm、water_alarm以 及使能信号en和alarm_en。VHDL程序描述如下:LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY alarm IS PORT(smoke,door,water:IN std_logic; en,alarm_en :IN std_logic; fire_alarm,burg_alarm,water_alarm:OUT std_logic); END alarm;nullPROCESS(smoke,door,water,en,alarm_en) BEGIN IF ((smoke= ‘1’) AND (en= ‘0’)) THEN fire_alarm <= ‘1’; ELSE fire_alarm <= ‘0’; END IF;IF ((door= ‘1’) AND ((en= ‘0’) AND (alarm_en= ‘0’))) THEN burg_alarm <= ‘1’; ELSE burg_alarm <= ‘0’; END IF;IF ((water= ‘1’) AND (en= ‘0’)) THEN water_alarm <= ‘1’; ELSE water_alarm <= ‘0’; END IF; END PROCESS; END alarm_arc;null2. CASE 语句CASE语句的一般形式:CASE < 表达式> IS WHEN < 值> => < 语句> ; WHEN < 值> | < 值> => < 语句> ; WHEN < 离散范围> => < 语句> ; WHEN OTHERS => < 语句> ; END CASE; CASE语句是VHDL提供的另一种形式的控制语句,每当 单个表达式的值在多个起作用的项中选择时,用此语句是较合 适的,它根据所给表达式的值或域,选择“=>”后面的执行语句。null用CASE语句应该注意三个问题: (1) 关键字WHEN的数量不作限制,但不容许两个语句用一个值; (2)所有WHEN后面的值在CASE语句中合起来的值是值域中的全部;(3)WHEN语句的次序可以任意排定。信号可被看作两个元件之间数据传输的通路。信号可被看作两个元件之间数据传输的通路。第四节 VHDL的结构描述实体主要描述元件、端口与信号。元件是硬件的描述,即门、芯片或者电路板。端口是元件与外界的连接点,数据通过端口进入或流出元件。而信号则是作为硬件连线的一种抽象描述,它即能保持变化 的数据,又可以连接各个子元件。下面举例说明“调用元件语句”的用法。下面举例说明“调用元件语句”的用法。 对一个硬件的结构进行描述,就是要描述它由哪些 子元件组成,以及各个子元件之间的互连关系。 结构描述比行为描述更加具体化,即结构描述与硬 件之间的关系要比行为描述与硬件之间的关系更明显。前面讨论, 行为描述的基本单元是进程语句。 结构描述的基本单元则是“调用元件语句”。null首先用VHDL的行为描述设计半减器:ENTITY halfsub IS PORT(A,B:IN BIT; T,C:OUT BIT); END halfsub; PROCESS(A,B) BEGIN T<= A XOR B AFTER 10 ns; C <= (NOT A) AND B AFTER 10 ns; END PROCESS; 一定记住输入、输出端口的顺序。null下面再将或门的VHDL程序描述如下:ARCHITECTURE orgate_arc OF orgate IS BEGIN O1<= A1 OR B1; END orgate_arc; 下面将两个半减器,一个或门的端口,通过定义一 些中间信号将其连接起来形成VHDL的结构描述。ENTITY orgate IS PORT(A1,B1:IN BIT; O1:OUT BIT); END orgate; 一定记住输入、输出端口的顺序。null在下面举的全减器例子里可以看到定义了中间信号 temp_T,temp_c1和temp_c2ENTITY fullsub IS PORT(I1,I2,C_IN:IN BIT; FT,C_OUT:OUT BIT); END fullsub;ARCHITECTURE fullsub_arc OF fullsub IS SIGNAL temp_T,temp_c1,temp_c2:BIT; COMPONENT halfsub PORT(A,B:IN BIT; T,C:OUT BIT); END COMPONENT;COMPONENT orgate PORT(A1,B1:IN BIT; O1:OUT BIT); END COMPONENT; 在说明区定义中间变量。 在说明区说明调用的半加器。一定记住顺序。 三个输入,两个输出。null 图中虚线框各元件之间 的连线命名。temp_T将第一 个半减器的差位输出连到第 二个半减器的输入端。信号 temp_c1将第一个半减器的借 位输出连至“或”门的一个输入 端,信号temp_c2将第二个半 减器的借位输出连至“或”门的 另一个输入端。 用三个元件调用语句定义这三个连接关系。BEGIN U0:halfsub PORT MAP(I1,I2,temp_T,temp_c1);U1:halfsub PORT MAP(temp_T,C_IN,FT,temp_c2);U2:orgate PORT MAP(temp_c1,temp_c2,C_OUT);END fullsub_arc; 减数、被减数。 低位借位与和位。null小 结1. VHDL语言把一个任意复杂度的电路模块视作一个单元。一个单元又可分为接口(实体)部分和描述体(结构)部分。2. VHDL的目标有三种:信号、变量和常量。信号是连接实体的主要机制,并且用信号在实体之间传送信息;变量位于进程和子程序中,主要用于局部计算结果的暂存;常量是一种数据类型的特殊值。3. VHDL的行为描述主要描述该单元的功能,即该硬件能做些什么。4. 结构描述是描述该设计单元的硬件结构,即该硬件是如何构成的。
本文档为【VHDL】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_121947
暂无简介~
格式:ppt
大小:313KB
软件:PowerPoint
页数:0
分类:
上传时间:2010-09-03
浏览量:45