《VHDL程序设计基础》PPT课件.ppt

上传人:za****8 文档编号:16088116 上传时间:2020-09-18 格式:PPT 页数:59 大小:327KB
返回 下载 相关 举报
《VHDL程序设计基础》PPT课件.ppt_第1页
第1页 / 共59页
《VHDL程序设计基础》PPT课件.ppt_第2页
第2页 / 共59页
《VHDL程序设计基础》PPT课件.ppt_第3页
第3页 / 共59页
点击查看更多>>
资源描述
1,第4章 VHDL程序设计基础,主要内容:1、层次化设计方法 2、库 3、程序包 4、文件输入输出程序包 5、元件库 6、元件的配置 7、块的配置 8、参数指定 9、子程序调用和重载 10、子程序变量 重点内容: 程序包、元件库和元件、块的配置,2,4.1 层次化设计方法,一、层次化设计,层次化设计是指在一个大型设计任务中,将目标层层分解,在各个层次上分别设计的方法。,1、高层次设计,在整个设计任务上进行行为描述的设计方法没,称为高层次设计。,2、底层次设计,从事某一模块、某一元件行为设计称为底层设计。,第4章 VHDL程序设计基础,3,1、在一个设计组中,各个设计者可独立地以不同的设计文件设计不同的模块元件。 2、各个模块可以被其他设计者共享,或备以后使用。 3、层次设计可使系统设计模块化,便于移植,复用。 4、层次设计可使系统设计周期更短,更易实现,二、层次化设计的特点,第4章 VHDL程序设计基础,4,4.2 库,一、库的概念及语法,1、什么是库,库是用来存储和放置可编译的设计单元的地方通过目录可查询、调用。库中的设计单元可以用做其他VHDL描述的资源。,2、库的使用方法,在每个设计项目的开头声明选用的库名,用USE子句声明选中的逻辑单元。,3、库子句的语法形式,LIBRARY 库名;,4、USE子句的语法形式,USE 库名.逻辑替名;,第4章 VHDL程序设计基础,5,二、库的分类,VHDL中存在的库大体可以分为5种:IEEE库、STD库、WORK 库、面向ASIC库和用户自定义库。其中STD库和WORK库是设计库,其他3种都是资源库。,1、IEEE库,是目前使用频率最高和应用最广泛的资源库。主要包括std_logic_1164、numeric_bit、numeric_std、math_complex、math_real。其中std_logic_1164程序包是程序设计者最常用的程序包,主要定义了一些常用的数据类型和函数,其中数据类型主要包括std_ulogic,std_ logic,std_ulogic_vector,std_logic_vector.,第4章 VHDL程序设计基础,6,LIBRARY IEEE; USE ieee.std_logic_1164.all; ENTITY and2 IS PORT(a,b :IN std_logic; c:OUT std_logic); END and2,LIBRARY IEEE; USE ieee.std_logic_1164.std_logic; ENTITY and2 IS PORT(a,b :IN std_logic; c:OUT std_logic); END and2,LIBRARY IEEE; ENTITY and2 IS PORT(a,b :IN ieee.std_logic_1164.std_logic; c:OUT ieee.std_logic_1164.std_logic); END and2,第4章 VHDL程序设计基础,7,2、STD库,STD是VHDL的标准库,包含两个预定义的程序包standard和textio。Standard程序包中定义了bit,bit_vector,character和time等数据类型;而textio程序包主要包含了对文件进行读写操作的过程和函数。,由于standard程序包符合VHDL标准,因此在使用它的时候不需要在程序的开头部分对它进行说明;而在使用textio程序包必须在程序的开始部分进行说明。 LIBRARAY STD; USE std.textio.all;,第4章 VHDL程序设计基础,8,3、WORK库,是VHDL的标准设计库,设计人员所编写的VHDL程序,不管是已经仿真成功的,还是正在设计的临时程序都可以存放在WORK库中。在设计过程中,WORK库经常用来保存一些共用的调用元件和模块,通过引用该WORK库来直接使用其中的元件和模块。,由于WORK库是VHDL的标准设计库,因此在使用WORK库时不需要进行说明。,第4章 VHDL程序设计基础,9,4、面向ASIC的库,在VHDL中,为了能够进行门级仿真,各个公司提供了面向ASIC设计的逻辑门库,库中存放了大量同各种逻辑门相对应的各种实体单元的VHDL库。,vital库是一个比较应用广泛的资源库,主要包括vital_timing和vatal_primitives两个程序包。其中vital_timing是一个时序程序包,它含有与ASIC单元中时间行为有关的各种数据类型定义、常数、属性和过程等;vital_primitives是一个基本元件程序包,它提供了一系列子程序,用来描述数字电路建模中各种常见的电路模块行为。,第4章 VHDL程序设计基础,10,5、用户自定义的库,在VHDL的实际应用中,用户为自身设计需要所开发的共用程序包和实体等也可以汇集在一起定义成一个库,这种库就是用户自定义库或称用户库。用户自定义库是一种资源库,因此在使用时需要在程序的开始部分进行说明。,第4章 VHDL程序设计基础,11,4.3 程序包,一、程序包的概念及语法,1、什么是程序包,程序包是一种使包体中的元件、函数、类型说明,对其他设计单元是“可见”、可调用的设计单元。,2、程序包的任务,使不同的设计项目可以共享一个相同的单元,而这个单元封装在两个不同的设计实体中。,3、程序包的组成,由程序包说明和程序包体组成。程序包说明为程序包定义接口,声明包中的数据类型、元件、函数,其方式与实体定义模块接口非常相似。程序包体规定程序的实际功能,存放说明中的函数和元件,其方式与结构体语句方法相同。,第4章 VHDL程序设计基础,12,4、程序包的一般格式,PACKAGE 程序包名 IS END PACKAGE 程序包名; PACKAGE BODY 程序包名 IS END PACKAGE BODY 程序包名;,5、程序包说明与程序包体的关系,程序包体并非必须,只有在程序包中要说明子程序或者函数时,程序包体才是必须的。程序包说明可以独立定义和使用。,第4章 VHDL程序设计基础,13,第4章 VHDL程序设计基础,14,二、常用的程序包,1、STD库的程序包,STANDARD程序包定义了若干类型、子类型和函数。用户不能修改该程序包。能自动与所有模型连接,程序包中的函数是共用的。,2、TEXTIO程序包,3、std_logic_1164程序包,定义了一些常用函数和数据类型。访问包中的函数,需要使用LIBRARY子句和USE子句,使程序包中的函数成为“可见”。,第4章 VHDL程序设计基础,15,4、numeric_std程序包,定义了用于综合的数值类型和算术运算。其中数值类型有unsigned和signed两种。 程序包中含有unsigned和signed类型的算术运算对所有项目的设计单元都是重载、可调用的,使用前要使其成为“可见”。 程序包中含有类型转换函数、时钟检测函数和其他的实用函数。,程序包的调用格式: LIBRARY IEEE; USE IEEE.numeric_std.all;,第4章 VHDL程序设计基础,16,4.4 文件输入/输出程序包,该程序包主要定义了与文本文件操作有关的数据类型和子程序。在textio程序包中,定义了line类型、text类型、side类型、操作宽度width子类型、文件input、文件output、readline过程、对应于不同数据类型的read过程、writeline过程和对应于不同数据类型的write。该程序包是不可见的。,一、TEXTIO程序包的语法,程序包提供了读、写一行的过程及检查文件结束的函数。,1、从指定文件中读一行,READLINE(文件变量,行变量);,2、从一行中读一个数据,READ(行变量,数据变量);,第4章 VHDL程序设计基础,17,3、写一行到输出文件,WRITELINE(文件变量,行变量);,4、写一个数据到行变量,WRITE(行变量,数据变量);,5、文件结束检查,ENDFILE(文件变量),二、TEXTIO程序包中的过程函数,三、TEXTIO程序包的调用,LIBRARY IEEE; USE STD.TEXTIO.ALL;,第4章 VHDL程序设计基础,18,4.5 元件库,一、构造元件,结构体调用元件时,通过参数传递来指定元件的规模和参数的有关特性,因此元件设计要参数化,要带有参数入口。 元件设计完成后,就可以建立元件库。放入库中的元件即可用LIBRARY和USE子句调用了。,二、程序打包,三、构建元件库,四、元件的调用,1、COMPONENT语句的格式,第4章 VHDL程序设计基础,19,COMPONENT 元件名 GENERIC 说明 PORT 说明 END COMPONENT;,GENERIC通常用于该元件的可变参数的代入或赋值,完成外层设计,向内层设计传递参数的任务。,2、COMPONENT调用语句,标号名:元件名 PORT MAP(信号,);,标号名加在元件名前面。下一层元件的端口信号与实际连接的信号用PORT MAP的映射关系联系起来。这种映射分为位置映射法和名称映射法两类。,第4章 VHDL程序设计基础,20,ENTITY mux2 IS PORT(d0,d1,sel: IN bit; Q:OUT bit); END mux2; ARCHITECURE struct OF mux2 IS COMPONENT and2 PORT(a,b :IN bit; c:OUT bit); END COMPONENT; COMPONENT or2 PORT(a,b :IN bit; c: OUT bit); END COMPONENT; COMPONENT inv,第4章 VHDL程序设计基础,21,PORT(a: IN bit; c: OUT bit); END COMPONENT; SIGNAL aa,ab,nsel:bit; BEGIN U1:inv PORT MAP(sel,nsel); U2:and2 PORT MAP(nsel,dl,ab); U3:and2 PORT MAP(d0,sel,aa); U4:or2 PORT MAT(aa,ab,q); END struct;,第4章 VHDL程序设计基础,22,一、默认连接和默认配置,配置就是把元件安装到设计单元的实体中,为设计实体中某一结构所安装的元件指定参数值(即GENERIC功能)。,4.6 元件的配置,配置语句用于描述层与层之间的连接关系和实体与结构体之间的连接关系,在实体与结构体之间的连接关系配置说明中,设计者利用配置语句为实体选择不同的结构体。,1、默认连接,是将元件与工作库中和该元件同名的实体相连接,因为下面两个句子一开始就已经隐含在每一个设计单元中。 LIBRARY work,std; USE std standard.ALL;,第4章 VHDL程序设计基础,23,2、默认配置格式,CONFIGURATION 配置名 OF 实体名 IS FOR 选配构造体名 END FOR; END 配置名; 注意:只能用来选择不含有任何块语句和元件的结构体。,二、元件配置,为了避免混淆,需要给出所说明元件属于哪一个设计库里的哪一个设计实体,以及设计实体所对应的是哪一个结构体。,1、低级的配置,第4章 VHDL程序设计基础,24,CONFIGURATION 配置名 OF 实体名 IS FOR 选配结构体名 FOR 元件调用标号名:元件名 USE CONFIGURATION 库名.元件配置名; END FOR; FOR 元件调用标号名:元件名 USE CONFIGURATION 库名.元件配置名; END FOR; END FOR END 配置名;,例题:全加器的实现LIBRARY IEEE;USE IEEE.sti_logic_1164.all;ENTITY full_adder IS PORT(a,b,Cin :IN std_logic; Co,S: OUT std_logic);END full_adder;,第4章 VHDL程序设计基础,25,ARCHITECTURE structure OF full_adder IS COMPONENT or2 PORT(a,b:IN std_logic; c: OUT std_logic); END COMPONENT; COMPONENT and2 PORT(a,b:IN std_logic; c: OUT std_logic); END COMPONENT; COMPONENT xor2 PORT(a,b:IN std_logic; c: OUT std_logic); END COMPONENT; SIGNAL tmp1,tmp2,tmp3,:std_logic; BEGIN U1:xor2 PORT MAP(a,b,tmp1);,第4章 VHDL程序设计基础,26,U2:and2 PORT MAP(tmp1,Cin,tmp2); U3:xor2 PORT MAP(tmp1,Cin,S); U4:and2 PORT MAP(a,b.tmp3); U5:or2 PORT MAP(tmp2,tmp3,Co); END sturcture; CONFIGURATION full_adder_cfg OF full_adder IS FOR structure FOR U1,U3:xor2 USE CONFIGURATION work.xor2_cfg; END FOR FOR U2,U4:and2 USE CONFIGURATION work.and2_cfg; END FOR FOR U5:or2 USE CONFIGURATION work.or2_cfg; END FOR END FOR,第4章 VHDL程序设计基础,27,2、实体-结构体对的配置,CONFIGURATION 配置名 OF 实体名 IS FOR 选配结构体名 FOR 元件调用标号名:元件名 USE ENTITY 库名.实体名(结构体名); END FOR; FOR 元件调用标号名:元件名 USE ENTITY 库名.实体名(结构体名); END FOR; END FOR END 配置名;,就是在配置的过程中为每一个元件直接指定实体的结构体,而不是指定该实体的低级配置。,第4章 VHDL程序设计基础,28,CONFIGURATION full_adder_cfg OF full_adder IS FOR stucture FOR U1,U3:xor2 USE ENTITY work.xor2(xor2_arc); END FOR; FOR U2,U4:and2 USE ENTITY work.and2(and2_arc); END FOR; FOR U5:or2 USE ENTITY work.or2(or2_arc); END FOR; END FOR; END full_adder_cfg;,第4章 VHDL程序设计基础,29,4.7 块的配置,要指明元件所在的块,块配置在结构体和元件之间分出另一层次。若对某个含有块语句的结构体进行文件配置时,必须指明是哪一个块的配置。,与元件配置相同,块配置也有两种不同的形式:低级的配置形式和实体-结构体对的配置形式。,第4章 VHDL程序设计基础,30,CONFIGURATION 配置名 OF 实体名 IS FOR 选配结构体名 FOR 块名 FOR 元件调用标号名:元件名 USE CONFIGURATION 库名.元件配置名; END FOR; END FOR FOR 块名 FOR 元件调用标号名:元件名 USE CONFIGURATION 库名.元件配置名; END FOR; END FOR; END FOR; END 配置名;,第4章 VHDL程序设计基础,31,CONFIGURATION 配置名 OF 实体名 IS FOR 选配结构体名 FOR 块名 FOR 元件调用标号名:元件名 USE ENTITY 库名.实体名(结构体名); END FOR; END FOR ; FOR 块名 FOR 元件调用标号名:元件名 USE ENTITY 库名.实体名(结构体名); END FOR; END FOR; END FOR; END 配置名;,第4章 VHDL程序设计基础,32,BEGIN sum:BLOCK BEGIN U1:xor2 PORT MAP(a,b,tmp1); U2:xor2 PORT MAP(tmp1,Cin,S); END BLOCK sum; carry:BLOCK BEGIN U3:or2 PORT MAP(tmp2,tmp3,Co); middle:BLCOK BEGIN U4:and2 PORT MAP(tmp1,Cin,tmp2); U5:and2 PORT MAP(a,b,tmp3); END BLOCK middle; END BLOCK carry; END structure; CONFIGURATION full_adder_cfg OF full_adder IS,第4章 VHDL程序设计基础,33,FOR structure FOR sum FOR all:xor2 USE CONFIGURATION work.xor2_cfg; END FOR; END FOR; FOR carry FOR U3:or2 USE CONFIGURATION work.or2_cfg; END FOR; FOR middle FOR all:and2 USE CONFIGURATION work.and2_cfg; END FOR; END FOR; END FOR; END FOR; END full_adder_cfg;,第4章 VHDL程序设计基础,34,第4章 VHDL程序设计基础,4.8 结构体的配置,结构体配置也是对结构体中所引用的元件进行配置,但是这种配置与元件配置有很大的区别:元件配置是使用专门的配置语句来完成的,配置语句与元件所在的结构体是分开的;而结构体配置则是放在结构体的说明语句部分,它是一种配置说明不需要与元件所在的结构体分开的配置类型。,for : use configuation .;,for : use entity .;,35,4.9 子程序调用和重载,一、子程序结构,所谓子程序就是在主程序调用它以后能够将处理结果返回主程序的程序模块。在VHDL中子程序有两种类型:过程和函数。,1、过程,PROCEDURE (参数表) IS 过程说明; BEGIN END PROCEDURE ;,第4章 VHDL程序设计基础,36,过程说明部分主要包括变量说明、常量说明和类型说明,用来对过程中要用到的变量、常量和类型进行说明,并且这些说明只在该过程内有效。过程中不允许定义信号。 过程语句部分是由顺序语句组成的,过程的调用实际上就是启动了对过程中的顺序语句的执行。,2、过程调用,指过程作为子程序被主程序调用。过程调用时主程序先要对过程进行初始化,所谓初始化就是先将初始值传递给过程的输入参数。过程启动后,过程中的输出值被传递到主程序中相应的变量或者信号中。对同一个过程的所有调用来说,过程的行为描述是相同的,只是传递给过程的参数或者过程执行后输出返回给主程序的参数不同。,第4章 VHDL程序设计基础,37,LIBRARY IEEE; USE IEEE.std_logic_1164.all; ENTITY conversion IS PORT(input :IN std_logic-vector(7 DOWNTO 0); con_flag: OUT boolean; output : INOUT integer); END conversion; ARCHITECTURE behave OF conversion IS PROCEDURE vector_to_int (a: IN std_logic_vector; x_flag :OUT boolean; q: INOUT integer) IS BEGIN,第4章 VHDL程序设计基础,38,q:=0; x_flag:=false; FOR i IN aRANGE LOOP q:=q*2; IF (a(i)=1) THEN q:=q+1 ELSIF (a(i)/=0) THEN x_flag:=true; END IF; END LOOP; END vector_to_int; BEGIN PROCESS(input),第4章 VHDL程序设计基础,39,VARIABLE tmp1:boolean; VARIABLE tmp2:integer; BEGIN vector_to_int(input,tmp1,tmp2); con_flag=tmp1; output=tmp2; END PROCESS; END behave;,函数的功能是通过输入的若干参数求得一个返回值来作为函数的输出。同过程一样,函数也包括函数说明部分和函数定义部分,分别用来定义函数的外观和功能。,3、函数,第4章 VHDL程序设计基础,40,FUNCTION (参数表) RETURN IS 函数说明; BEGIN RETURN (表达式); END function (函数名);,函数说明部分主要包括变量说明、常量说明和类型说明,用来对函数中要用到的变量、常量和类型进行说明,并且这些说明只在函数内有效。 函数语句部分由顺序语句组成,主要用来实现该函数的功能。实现函数功能的顺序语句执行完后,函数总要通过RETURN语句返回一个值。,第4章 VHDL程序设计基础,41,FUNCTION max (a:std_logic_vector; b:std_logic_vector) RETURN std_logic_vector IS VARIABLE tmp:std_logic_vector(aRANGE); BEGIN IF (ab) THEN tmp:=a; ELSE tmp:=b; END IF; RETURN(tmp); END max;,第4章 VHDL程序设计基础,42,LIBRARY IEEE; USE IEEE.std_logic_1164.all; USE work.example.max; ENTITY example IS PORT(a,b :IN std_logic_vector(7 DOWNTO 0); clk: IN std_logic; reset: IN std_logic; q:OUT std_logic_vector( 7 DOWNTO 0); END example; ARCHITECTURE rtl OF example IS BEGIN PROCESS (clk) BEGIN,第4章 VHDL程序设计基础,43,IF (clkevent AND clk=1) THEN IF (reset=0) THEN q=“00000000”; ELSE q=max(a,b); END IF; END IF; END PROCESS; END rtl;,第4章 VHDL程序设计基础,44,3、过程与函数的区别,(1) 过程往往用来定义一个算法,而函数往往用来产生一个值。 (2)过程可以具有多个返回值或者不产生返回值,而函数只能有一个返回值。 (3)过程中的形式参数可以有3种不同的方式:IN、OUT、INOUT,而函数中的形式参数只有IN方式。 (4)在过程中允许使用WAIT语句或顺序语句赋值语句,而函数中则不能使用这两种语句。,二、子程序重载,所谓重载就是指同样名称的子程序或者运算符可以用不同的数据类型作为她们的输入参数而被定义多次。,第4章 VHDL程序设计基础,45,1、子程序重载,子程序重载允许设计人员用同一个名字编写两个或两个以上的子程序,但是这些子程序的参数类型、参数数目和返回值可能是不同的。,(1)参数类型的重载,是指被重载的子程序的参数类型是不同的。这时VHDL编译器将会根据子程序调用过程中的实参类型来选择与之相一致的子程序。,LIBRARY IEEE; USE IEEE.std_logic_1164.all; PACKAGE example IS FUNCTION max(i1,i2:std_logic_vector) RETURN std_logic_vector;,第4章 VHDL程序设计基础,46,FUNCTION max(i1,i2:bit_vector)RETURN bit_vector; FUNCTION max(i1,i2:integer) RETURN integer; END example; PACKAGE body example IS FUNCTION max (i1,i2:std_logic_vector)RETURN std_logic_vector IS VARIABLE tmp:std_logic_vector(i1RANGE); BEGIN IF (i1i2) THEN tmp:=i1; ELSE tmp:=i2; END IF; RETURN(tmp); END max,第4章 VHDL程序设计基础,47,FUNCTION max (i1,i2:bit_vector) RETURN bit_vector IS VARIABLE tmp:bit_vector(i1RANGE); BEGIN IF (i1i2) THEN tmp:=i1 ELSE tmp:=i2; END IF RETURN(tmp); END max; FUNCTION max (i1,i2:integer)RETURN integer IS VARIABLE tmp:integer;,第4章 VHDL程序设计基础,48,BEGIN IF(i1i2) THEN tmp:=i1; ELSE tmp:=i2; END IF RETURN(tmp); END max; END example;,第4章 VHDL程序设计基础,49,(2)参数数目的重载,是指相同名字的子程序具有不同数目的参数,参数类型却有可能相同。这时VHDL编译器将会根据子程序调用过程中的参数数目来选择与之相一致的子程序。,LIBRARY IEEE; USE IEEE.std_logic_1164.all; PACKAGE example IS FUNCTION convert(a0,a1:std_logic) RETURN integer; FUNCTION convert(a0,a1,a2:std_logic)RETURN integer; FUNCTION convert(a0,a1,a2,a3:std_logic)RETURN integer; END example; PACKAGE body example IS FUNCTION convert(a0,a1:std_logic)RETURN integer IS VARIABLE result:integer:=0;,第4章 VHDL程序设计基础,50,BEGIN IF (a0=1) THEN result:=result+1; END IF IF (a1=1) THEN result:=result+2; END IF END convert; FUNCTION convert(a0,a1,a2:std_logic)RETRUN integer IS VARIABLE result:integer:=0; BEGIN result:=convert(a0,a1); IF (a2=1) THEN result:=result+4; END IF;,第4章 VHDL程序设计基础,51,RETURN(result); END convert; FUNCTION convert(a0,a1,a2,a3:std_logic)RETURN integer IS VARIABLE resutl:integer:=0; BEGIN result:=convert(a0,a1,a2); IF (a3=1) THEN result:=result+8; END IF RETURN(result); END convert; END example;,第4章 VHDL程序设计基础,52,(3)函数返回类型的重载,是指被重载的同名函数的返回值类型是不同的。这时VHDL编译器将会根据函数调用过程中的函数返回类型来选择与之一致的函数。,LIBRARY IEEE; USE IEEE.std_logic_1167.all; PACKAGE example IS FUNCTION max(i1,i2:std_logic_vector) RETURN std_logic_vector; FUNCTION max(i1,i2:std_logic_vector) RETURN bit_vector; END example;,第4章 VHDL程序设计基础,53,PACKAGE body example IS FUNCTION max (i1,i2:std_logic_vector) RETURN std_logic_vector IS VARIABLE tmp:std_logic_vector(i1RANGE); BEGIN IF(i1i2) THEN tmp:=i1; ELSE tmp:=i2; END IF; RETURN(tmp); END max,第4章 VHDL程序设计基础,54,FUNCTION max (i1,i2:std_logic_vector) RETURN bit_vector IS VARIABLE tmp:std_logic_vector(i1RANGE); BEGIN IF (i1i2) THEN tmp:=i1; ELSE tmp:=i2; END IF RETURN(to_bitvector(tmp); END max END example;,第4章 VHDL程序设计基础,55,三、运算符重载,重载运算符是指功能由用户定义,并且可对各种类型的数据进行运算的运算符。,在IEEE1076标准中,“+”运算符仅被定义为用于标量类型中的整数、浮点数和物理类型的加运算。然而设计人员在设计过程中,往往要对std_logic_vector或者是bit_vector类型的数据进行加运算,因此必须定义一个针对这些类型的函数,这就是运算符的重载。,LIBRARY IEEE; USE IEEE.std_logic_1167.all; USE IEEE.std_logic_unsigned.all; PACKAGE example IS FUNCTION“+”(1:integer;r:integer)RETURN integer;,第4章 VHDL程序设计基础,56,FUNCTION “+”(1:bit_vector;r:bit_vector)RETURN integer; FUNCTION“+”(1:std_logic_vector;r:std_logic_vector) RETURN integer; END example; PACKAGE body example IS FUNCTION vector_to_int (a:IN bit_vector) RETURN integer IS VARIALBE result,tmp:integer:=0; BEGIN FOR i IN a low TO ahigh LOOP tmp:=0; IF (a(i)=1) THEN tmp:=2*(i-alow); END IF,第4章 VHDL程序设计基础,57,result:=result+tmp; END LOOP; RETURN(result); END vector_to_int; FUNCTION “+”(1:integer;r:integer)RETURN integer IS BEGIN RETURN(1+r); END; FUNCTION“+”(1:bit_vector;r:bit_vector) RETURN integer IS BEGIN RETURN(vector_to_int(1)+vector_to_int(r); END;,第4章 VHDL程序设计基础,58,FUNCTION“+”(1:std_logic_vector;r:std_logic_vector) RETURN integer IS BEGIN RETURN (conv_integer(1)+con_integer(r); END; END example;,四、别名(替换名),别名的用途是对已有的对象定义一个替换名。 ALIAS 替换名:子类型表示符 IS 目标名;,第4章 VHDL程序设计基础,59,ALIAS 语句可以在ARCHITECTURE说明部分、ENTITY说明部分、PROCESS说明部分、PACKAGE说明部分、PACKAGE BODY语句而后SUBPROGRAM说明部分。 别名为指令的每个字段提供命名的机制,并且可由别名直接去引用这个字段。,SIGNAL instruction:bit_vector(31 DOWNTO 0); ALAIS opcode:bit_vector(3 DOWNTO 0) IS instruction (31 DOWNTO 28); ALAIS source_reg:bit_vector(4 DOWNTO 0) IS instruction(27 DOWNTO 23); ALAIS targe_reg:bit_vector(4DOWNTO 0) IS instruction (322 DOWNTO 18);,第4章 VHDL程序设计基础,
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!