第5章VHDL设计进阶.ppt
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VHDL 设计 进阶
- 资源描述:
-
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第5章 VHDL设计进阶,第5章 VHDL设计进阶,5.1,VHDL语言要素,5.2,VHDL顺序语句,5.3,VHDL并行语句,5.4,子程序,5.5,库、程序包及其配置,5.6,VHDL描述风格,5.7,单元电路的设计举例,5.8,VHDL与原理图混合设计举例,第5章 VHDL设计进阶,数字,的表达可以是,整数文字,、,实数文字,、,以数制基数表示的文字,和,物理量文字,。,字符,是用单引号引起来的ASCII字符,可以是数值,也可以是符号或字母,如:R,A,*,0。而,字符串,则是一维的字符数组,须放在双引号中,。,5.1 VHDL语言要素,1、,VHDL文字规则,标识符,是VHDL语言中各种成分的名称,这些成分包括常量、变量、信号、端口、子程序或参数等。定义标识符需要遵循以下规则:,l,有效的字符:包括26个大小写英文字母,数字09以及下划线“_”。,l,任何标识符必须以英文字母开头。,l,必须是单一下划线“_”,且其前后都必须有英文字母或数字。,l,标识符中的英文字母不分大小写。,l,允许包含图形符号(如回车符、换行符等),也允许包含空格符。,l,VHDL的保留字不能用于作为标识符使用。,下标名,用于指示数组型变量或信号的某一元素,而,下标段名,则用于指示数组型变量或信号的某一段元素,其语句格式如下:,数组类型信号名或变量名(表达式lTO/DOWNTO 表达式2);,下面是下标名及下标段名使用示例:,SIGNAL a,b,c:BIT_VECTOR(0 TO 7);,SIGNAL m:INTEGER RANGE 0 TO 3;,SIGNAL y,z:BIT;,y=a(m);-m是不可计算型下标表示,z=b(3);-3是可计算型下标表示,c(0 TO 3)a(4 TO 7);-以段的方式进行赋值,c(4 TO 7)=a(0 TO 3);-以段的方式进行赋值,常量的定义形式如下:,CONSTANT 常量名:数据类型:=表达式;,例如:,CONSTANT fbt:STD_LOGIC_VECTOR:=“010110”;-标准位矢类型,CONSTANT vcc:REAL:=5.0;-实数类型,CONSTANT dely:TIME:=25ns;-时间类型,常量定义语句所允许的设计单元有实体、结构体、程序包、块、进程和子程序。,2、VHDL数据对象,(1)常量(CONSTANT),定义变量的语法格式如下:,VARIABLE 变量名:数据类型:=初始值;,例如:,VARIABLE a:INTEGER RANGE 0 TO 15;,VARIABLE b,c:INTEGER:=2;,VARIABLE d :STD_LOGIC;,变量赋值的一般表达式如下:,目标变量名:=表达式;,变量作为局部量,其适用范围仅限于定义了变量的进程或子程序的顺序语句中,(2)变量(VARIABLE),(6)信号赋值和变量赋值分别使用不同的赋值符号“=”和“:=”,信号类型和变量类型可以完全一致,也允许两者之间相互赋值,但要保证两者的类型相同。,(4)信号与变量的区别,(1)信号赋值至少有延时,而变量赋值没有延时。,(2)信号除当前值外有许多相关的信息,而变量只有当前值。,(3)进程对信号敏感而对变量不敏感。,(4)信号可以是多个进程的全局信号;而变量只在定义它们的顺序域可见(共享变量除外)。,(5)信号是硬件中连线的抽象描述,它们的功能是保存变化的数据和连接子元件,信号在元件的端口连接元件。变量在硬件中没有类似的对应关系,它们用于硬件特性的高层次建模所需要的计算中。,(4)用户自定义数据类型,:,枚举类型,,,整数与实数类型,,,数组类型,,,记录类型,3、VHDL数据类型,四大类:标量、复合、存取、文件类型,每类分为两种。,(1)VHDL的预定义数据类型,:,布尔(BOOLEAN)数据类型,,位(BIT)数据类型,,,位矢量(BIT_VECTOR)数据类型,,,字符(CHARACTER)数据类型,,,整数(INTEGER)数据类型,,,自然数(NATURAL)和正整数(POSITIVE)数据类型,,,实数(REAL)数据类型,,,字符串(STRING)数据类型,,,时间(TIME)数据类型,(2)IEEE预定义标准逻辑位与矢量,:,标准逻辑位 STD_LOGIC数据类型,,,标准逻辑矢量STD_LOGIC_VECTOR数据类型,(3)其他预定义标准数据类型,:,无符号数据类型(UNSIGNED TYPE),,,有符号数据类型(SIGNED TYPE),。,在VHDL语言中的类型标记转换法是直接使用类型名进行数据类型的转换,这与高级语言中的强制类型转换类似。其语句格式如下:,数据类型标志符(表达式);,下面几个语句说明了标记类型转换的例子。,VARIABLE a:INTEGER;,VARIABLE b:REAL;,a:=INTEGER(b);,b:=REAL(a);,(常数转换法),数据类型限定(P115),类型标记转换法,SRL,逻辑右移,BIT或布尔型一维数组,SLA,算术左移,BIT或布尔型一维数组,SRA,算术右移,BIT或布尔型一维数组,ROL,逻辑循环左移,BIT或布尔型一维数组,ROR,逻辑循环右移,BIT或布尔型一维数组,*,乘方,整数,ABS,取绝对值,整数,+,正,整数,-,负,整数,关系操作符,=,等于,任何数据类型,/=,不等于,任何数据类型,大于,枚举与整数类型及对应的一维数组,=,大于等于,枚举与整数类型及对应的一维数组,表53VHDL操作符优先级,运算符,优先级,NOT,ABS,*,最高优先级,最低优先级,*,/,MOD,REM,+(正号),-(负号),+,-,&,SLL,SLA,SRL,SRA,ROL,ROR,=,/=,=,AND,OR,NAND,NOR,XOR,XNOR,例,5-2:逻辑运算VHDL描述(p118),例5-3:四位二进制数比较程序1(p118),例5-4:四位二进制数比较程序2(p119),例5-5:整数加法运算电路(p119),重载操作符:重新定义(p120),变量赋值语句和信号赋值语句的语法格式如下:,变量赋值目标:=赋值源;,信号赋值目标=赋值源;,5.2 VHDL顺序语句,1、,赋值语句,信号和变量的赋值,六类基本顺序语句:赋值语句、转向控制语句、等待语句、子程序调用语句、返回语句、空操作语句。,例5-6:,SIGNAL s1,s2:STD_LOGIC;,SIGNAL svec:STD_LOGIC_VECTOR(0 TO 3);,PROCESS(s1,s2),VARIABLE v1,v2:STD_LOGIC;,BEGIN,v1:=1;,-立即将变量v1置位为1,v2:=1;,-立即将变量v2置位为1,s1=1;,-信号s1被赋值为1,s2=1;,-由于在本进程中,这里的s2不是最后一个赋值语句故不作任何赋值操作,svec(0)=v1;,-将变量v1在上面的赋值1,赋给svec(0),svec(1)=v2;,-将变量v2在上面的赋值1,赋给svec(1),svec(2)=s1;,-将信号s1在上面的赋值1,赋给svec(2),svec(3)=s2;,-将最下面的赋予s2的值0,赋给svec(3),v1:=0;,-将变量v1置入新值0,v2:=0;,-将变量v2置入新值0,s2:=0;,-由于这是信号s2最后一次赋值,赋值有效,此0将-上面准备赋入的1覆盖掉,END PROCESS;,IF语句是一种条件语句,它根据语句中所设置的一种或多种条件,有选择地执行指定的顺序语句,常见的IF语句有以下种形式。,(1),IF 条件 THEN,语句,END IF;,(2),IF 条件 THEN,语句,ELSE,语句,END IF;,(3),IF 条件THEN,语句,ELSIF 条件THEN,语句,ELSE,语句,END IF;,2、,转向控制语句(五种),(1)IF语句,例59,LIBRARY IEEE;,USE IEEE.STD_LOGIC_1164.ALL;,ENTITY mux4 IS,PORT(,a,b,c,d:IN STD_LOGIC_VECTOR(3 DOWNTO 0);,s:IN STD_LOGIC_VECTOR(1 DOWNTO 0);,X:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);,END mux4;,ARCHITECTURE behave OF mux4 IS,BEGIN,Mux4:PROCESS(a,b,c,d),BEGIN,IF s=00 THEN,-第3种IF语句,实现多选1功能,X=a;,ELSIF s=01 THEN,X=b;,ELSIF s=10 THEN,X=c;,ELSE,X 语句A;,WHEN 值2=语句B;,.,WHEN OTHERS=语句C;,END CASE,(2)CASE语句,(4)CASE语句执行中必须选中,且只能选中所列条件语句中的一条。,CASE语句使用中应注意以下几点,:,(1)WHEN条件句中的选择值或标识符所代表的值必须在表达式的取值范围内。,(2)除非所有条件句中的选择值能完整覆盖CASE语句中表达式的取值,否则最后一个条件句中的选择必须用关键词OTHERS表示以上已列的所有条件句中未能列出的其它可能的取值。,(3)CASE语句中的选择值只能出现一次,不允许有相同选择值的条件语句出现。,LOOP语句就是循环语句,它用于实现重复的操作,由FOR循环或WHILE循环组成。FOR语句的执行根据控制值的规定数目重复;WHILE语句将连续执行操作,直到控制逻辑条件判断为TRUE。下面给出FOR循环语句和WHILE循环语句的一般形式。,(a)FOR 循环,FOR循环语句的一般形式为:,循环标号:FOR 循环变量 IN 循环次数范围 LOOP,顺序处理语句,END LOOP循环标号;,FOR循环语句中的循环变量的值在每次循环中都将发生变化,而IN后面的循环次数范围则表示循环变量在循环过程中依次取值的范围。,(3)LOOP语句,【例5-11】-8位奇偶校验电路,LIBRARY IEEE;,USE IEEE.STD_LOGIC_1164.ALL;,ENTITY p_check IS,PORT(a:IN STD_LOGIC_VECTOR(7 DOWNTO 0);,y:OUT STD_LOGIC);,END p_check;,ARCHITECTURE behave OF p_check IS,SIGNAL tmp:STD_LOGIC;,BEGIN,PROCESS(a),BEGIN,tmp=0;,FOR n IN 0 TO 7 LOOP-FOR循环语句,tmp=tmp XOR a(n);,END LOOP;,y=tmp;,END PROCESS;,END behave,;,【例5-12】,-8位奇偶校验电路,LIBRARY IEEE;,USE IEEE.STD_LOGIC_1164.ALL;,ENTITY p_check2 IS,PORT(a:IN STD_LOGIC_VECTOR(7 DOWNTO 0);,y:OUT STD_LOGIC);,END p_check2;,ARCHITECTURE behave OF p_check2 IS,SIGNAL tmp:STD_LOGIC;,BEGIN,PROCESS(a),VARIABLE i:INTEGER:=0;,BEGIN,tmp=0;,WHILE i8 LOOP-WHILE循环,tmp=tmp XOR a(i);,i:=i+1;,END LOOP;,y=tmp;,END PROCESS;,END behave;,EXIT语句与NEXT语句具有十分相似的语句格式和跳转功能,它们都是LOOP语句的内部循环控制语句。EXIT的语句格式也有三种:,(1),EXIT;,(2),EXIT LOOP 标号;,(3),EXIT LOOP标号WHEN条件表达式;,(4)NEXT语句,有时候由于某种情况需要跳出循环,而去执行另外的操作,这就需要采用跳出循环的操作。VHDL语言提供了两种跳出循环的操作,一种是NEXT语句,另一种是EXIT语句。NEXT语句主要用于在LOOP语句执行中有条件的或无条件的转向控制。它的语句格式有以下三种:,(1)NEXT;,(2)NEXT LOOP标号;,(3)NEXT LOOP标号 WHEN 条件表达式;,(5)EXIT语句,(),多条件WAIT语句,即上述条件中有多个同时出现,此时只要多个条件中有一个成立,则终止挂起。,3、WAIT语句,WAIT语句的格式如下:,WAITON 信号表UNTIL 条件表达式FOR 时间表达式;,WAIT语句有以下几种形式。,(),单独的WAIT,未设置停止挂起的条件,表示永远挂起。,(),WAIT ON信号表,即敏感信号等待语句,当敏感信号变化时,结束挂起。,例如:WAIT ON a,b;,(),WAIT UNTIL条件表达式,即条件等待语句,当条件表达式中所含的信号发生了变化,并且条件表达式为真时,进程才能脱离挂起状态,继续执行此语句后面的语句。,例如:WAIT UNTIL(x*10)实参表达式,,形参名=实参表达式);,一个过程的调用有三个步骤:,将,IN,和,INOUT,模式的实参值赋给欲调用的过程中与它们对应的形参;,执行这个过程;,将过程中,IN,和,INOUT,模式的形参值返回给对应的实参。,(2),函数调用,返回语句只能用于子程序中,并用来结束当前子程序的执行。其语句有两种格式:,(1)RETURN;,(2)RETURN表达式;,第一种语句格式只能用于过程,它只是结束过程,并不返回任何值;第二种语句格式只能用于函数,并且,必须返回一个值。,5、返回语句,空操作语句不完成任何操作,它唯一的功能就是使程序执行下一个语句。NULL常用于CASE语句中,利用NULL来表示所余的不用的条件下的操作行为,以满足CASE语句对条件值全部列举的要求。,空操作语句格式如下:,NULL;,6、NULL语句,7、其它语句,并行语句在结构体中的使用格式如下:,ARCHITECTURE 结构体名 OF 实体名 IS,说明语句,BEGIN,并行语句;,END ARCHITECTURE 结构体名;,结构体中的并行语句主要有:进程语句、并行信号赋值语句、块语句、元件例化语句、生成语句、并行过程调用语句等,5.3,VHDL并行语句,PROCESS语句格式,PROCESS语句的表达格式如下:,进程标号:PROCESS(敏感信号参数表)IS,进程说明部分,BEGIN,顺序描述语句,END PROCESS进程标号,;,1、进程语句,(4)进程是重要的建模工具。进程结构不但为综合器所支持,而且进程的建模方式将直接影响仿真和综合结果。,进程的设计需要注意以下几方面的问题:,(1)虽然同一结构体中的进程之间是并行运行的,但同一进程中的逻辑描述语句则是顺序运行的,因而在进程中只能设放置顺序语句。,(2)进程的激活必须由敏感信号表中定义的任一敏感信号的变化来启动,否则必须有一显式的WAIT语句来激活。,(3)结构体中多个进程之所以能并行同步运行,一个很重要的原因是进程之间的通信是通过传递信号和共享变量值来实现的。,【例5-22】-进程的应用,ENTITY mul IS,PORT(a,b,c,selx,sely:IN BIT;,data_out:OUT BIT);,END mul;,ARCHITECTURE ex OF mul IS,SIGNAL temp:BIT;,BEGIN,p_a:PROCESS(a,b,selx),BEGIN,IF(SELX=0)THEN temp=a;,ELSE temp=b;,END IF;,END PROCESS p_a;,p_b:PROCESS(temp,c,sely),BEGIN,IF(sely=0)THEN data_out=temp;,ELSE data_out=c;,END IF;,END PROCESS p_b;,END ex;,作为另一种并行赋值语句,条件信号赋值语句的表达方式如下:,赋值目标=表达式1 WHEN 赋值条件1 ELSE,表达式2 WHEN赋值条件2 ELSE,.,表达式n;,2、,并行信号赋值语句,(1),简单信号赋值语句,简单信号赋值语句是VHDL并行语句结构的最基本的单元,它的语句格式如下:,赋值目标=表达式;,(2),条件信号赋值语句,【例5-24】-条件信号赋值,ENTITY mux IS,PORT(a,b,c:IN BIT;,p1,p2:IN BIT;,z:OUT BIT);,END mux;,ARCHITECTURE behave OF mux IS,BEGIN,z=a WHEN p1=1 ELSE,b WHEN p2=1 ELSE,c;,END;,选择信号赋值语句的语句格式如下:,WITH 选择表达式SELECT,赋值目标信号=表达式1 WHEN 选择值1,表达式2 WHEN 选择值2,.,表达式n WHEN 选择值n,;,(3),选择信号赋值语句,【例5-25】-选择信号赋值,LIBRARY IEEE;,USE IEEE.STD_LOGIC_1164.ALL;,USE IEEE.STD_LOGIC_UNSIGNED.ALL;,ENTITY decoder IS,PORT(a,b,c:IN STD_LOGIC;,data1,data2:IN STD_LOGIC;,dataout:OUT STD_LOGIC);,END decoder;,ARCHITECTURE concunt OF decoder IS,SIGNAL instruction:STD_LOGIC_VECTOR(2 DOWNTO 0);,BEGIN,instruction=c,WITH instruction SELECT,dataout=data1 AND data2 WHEN 000,data1 OR data2 WHEN 001,data1 NAND data2 WHEN 010,data1 NOR data2 WHEN 011,data1 XOR data2 WHEN 100,data1 XNOR data2 WHEN 101,Z WHEN OTHERS;,END concunt;,块标号:BLOCK(块保护表达式),说明语句,BEGIN,并行语句,END BLOCK 块标号;,利用BLOCK语句可以将结构体中的并行语句划分多个并列方式BLOCK,每一个BLOCK都像一个独立的设计实体,具有自己的类属参数说明和界面端口,以及与外部环境的衔接描述。,3、块语句结构(BLOCK,),【例5-26】-块的应用,ARCHITECTURE behave OF cpu IS,SIGNAL ibus,dbus;tw32;,BEGIN,alu:BLOCK,SIGNAL qbus;tw32;,BEGIN,-ALU 行为描述,END BLOCK alu;,reg8:BLOCK,SIGNAL zbus;tw32;,BEGIN,reg1:BLOCK,SIGNAL qbus;tw32;,BEGIN,-REG行为描述,END BLOCK reg1;,-其他REG行为描述语句,END BLOCK reg8;,END behave;,4、并行过程调用语句,过程标号:过程名(关联参量名);,【例5-27】-并行过程的调用,LIBRARY IEEE;,USE IEEE.STD_LOGIC_1164.ALL;,USE IEEE.STD_LOGIC_UNSIGNED.ALL;,ENTITY mft IS,PORT(a,b,c:IN STD_LOGIC;,q:OUT STD_LOGIC);,END mft;,ARCHITECTURE behave OF mft IS,PROCEDURE max(ina,inb:IN STD_LOGIC;,SIGNAL ouc:OUT STD_LOGIC)IS,VARIABLE temp:STD_LOGIC,;,BEGIN,IF(inainb)THEN,temp:=inb;,ELSE,temp:=ina;,END IF;,ouc=temp;,end max;,SIGNAL temp1,temp2:STD_LOGIC;,BEGIN,max(a,b,temp1);,max(temp1,c,temp2);,q连接端口名,.);,第一部分语句是元件定义语句,相当于对一个现成的设计实体进行封装,使其只留出对外的接口界面。元件例化的第二部分语句即为元件例化语句,其中的例化名是必须存在的,PORT MAP是端口映射的意思,其中的端口名是在元件定义语句中的端口名表中已定义好的元件端口的名字,连接端口名则是当前系统与准备接入的元件对应端口相连的通信端口,相当于插座上各插针的引脚名。,5、元件例化语句,【例5-28】-元件例化语句,ENTITY shifter IS,PORT(din,clk:IN BIT;,dout:OUT BIT);,END shifter;,ARCHITECTURE a OF shifter IS,COMPONENT dff,PORT(d,clk:IN BIT;,q:OUT BIT);,END COMPONENT;,SIGNAL d:BIT_VECTOR(0 TO 4);,BEGIN,d(0)d(2),clk=clk,q=d(3);,-名字关联方式,U3:dff PORT MAP(d=d(3),clk=clk,q=d(4);,dout=d(4);,END a;,(1)标号:FOR 循环变量 IN取值范围 GENERATE,说明,BEGIN,并行语句,END GENERATE 标号;,(2)标号:IF 条件 GENERATE,说明,BEGIN,并行语句,END GENERATE 标号;,6、生成语句,【例5-29】-1位锁存器,LIBRARY IEEE;,USE IEEE.STD_LOGIC_1164.ALL;,ENTITY latch IS,PORT(d:IN STD_LOGIC;,ena:IN STD_LOGIC;,q:OUT STD_LOGIC);,END ENTITY latch;,ARCHITECTURE one OF latch IS,SIGNAL sig_save STD_LOGIC;,BEGIN,PROCESS(d,ena),BEGIN,IF ena=1 THEN sig_save=d;,END IF;,q=sig_save;,END PROCESS;,END one;,【例5-30】-顶层文件,LIBRARY IEEE;,USE IEEE.STD_LOGIC_1164.ALL;,ENTITY SN74373 IS,END ENTITY SN74373;,ARCHITECTURE two OF SN74373 IS,BEGIN,END ARCHITECTURE two,ARCHITECTURE one OF SN74373 IS,BEGIN,Gelatch:FOR inum IN 1 to 8 GENERATE,Latchx:latch PORT MAP(d(inum),g,sig_mid(inum);,END GENERATE;,END ARCHITECTURE one;,【例5-31】-D触发器,LIBRARY IEEE;,USE IEEE.STD_LOGIC_1164.ALL;,ENTITY d-ff IS,PORT(clk,d:IN STD_LOGIC;,q:OUT STD_LOGIC);,END d_ff;,ARCHITECTURE behave OF d_ff IS,SIGNAL q_in:STD_LOGIC;,BEGIN,q=q_in;,PROCESS(clk),BEGIN,IF(clkEVENT AND clk=1)THEN,q_in=d;,END IF;,END PROCESS;,END behave;,【例5-32】-4位移位寄存器,LIBRARY IEEE;,USE IEEE.STD_LOGIC_1164.ALL;,ENTITY shift_reg IS,PORT(d1:IN STD_LOGIC;,clk:IN STD_LOGIC;,d0:OUT STD_LOGIC);,END shift;,ARCHITECTURE behave OF shift_reg IS,COMPONENT d_ff,PORT(d:IN STD_LOGIC;,clk:IN STD_LOGIC;,q:OUT STD_LOGIC);,END COMPONENT;,SIGNAL q:STD_LOGIC_VECTOR(3 DOWNTO 1);,BEGIN,l:FOR i IN 0 TO 3 GENERATE,m:IF(i=0)GENERATE,dffx:d_ff PORT MAP(d1,cp,q(i+1);,END GENERATE m;,n:,o:,END GENERATE l;,END behave;,子程序是一个VHDL程序模块,它是利用顺序语句来定义和完成算法的,应用它能更有效地完成重复性的设计工作。,子程序有两种类型,即过程(PROCEDURE)和函数(FUNCTION)。,5.4 子程序,一般地,函数定义由两部分组成,即函数首和函数体。,FUNCTION 函数名(参数表)RETURN 数据类型;-函数首,FUNCTION 函数名(参数表)RETURN 数据类型IS -函数体开始,说明部分;,BEGIN,顺序语句;,END FUNCTION 函数名;,1,、,函数(FUNCTION),【例5-33】-函数的应用,LIBRARY IEEE;,USE IEEE.STD_LOGIC_1164.ALL;,ENTITY func IS,PORT(a:IN STD_LOGIC_VECTOR(0 TO 2);,m:OUT STD_LOGIC_VECTOR(0 TO 2);,END func;,ARCHITECTURE demo OF func IS,FUNCTION sam(x,y,z:STD_LOGIC)RETURN STD_LOGIC IS,BEGIN,RETURN(x AND y)OR z;,END FUNCTION sam;,BEGIN,PROCESS(a),END PROCESS;,END ARCHITECTURE demo;,2、重载函数(OVERLOADED FUNCTION),VHDL允许以相同的函数名定义不同的函数,即重载函数。,【例5-34】,LIBRARY IEEE;,USE IEEE.STD_LOGIC_1164.ALL;,function“+”(1:STD_LOGIC_VECTOR;r:INTEGER)RETURN STD_LOGIC_VECTOR;,function“+”,function“+”,function SHR,LIBRARY IEEE;,function maximum(1,r:INTEGER)RETURN INTEGER IS,BEGIN,IF,END IF;,END;,【例5-35】-重载函数使用,LIBRARY IEEE;,USE IEEE.STD_LOGIC_1164.ALL;,USE IEEE.STD_LOGIC_UNSIGNED.ALL,ENTITY CNT4 IS,END cnt4;,ARCHITECTURE one OF cnt4 IS,BEGIN,PROCESS(clk),BEGIN,IF,q=15,THEN,qv1;,END LOOP q1;,ASSERT,REPORT,SEVERITY ERROR;,END PROCEDURE comp;,两个或两个以上有相同的过程名和互不相同的参数量及数据类型的过程为重载过程,对于重载过程,也是靠参数类型来辨别究竟调用哪一个过程。,4、重载过程,PROCEDURE calcu(v1,v2:IN REAL;,SIGNAL out1:INOUT INTEGER);,PROCEDURE calcu(v1,v2:IN REAL;,SIGNAL out1:INOUT REAL);,calcu(20.15,1.42,sign1);,calcu(23,320,sign2);,(1)IEEE库,(2)STD库,(3)WORK库,(4)VITAL库,(5)用户定义库,库的用法,:USE库名程序包名项目名;,USE库名程序包名ALL;,5.5 库、程序包及其配置,1、库(LIBRARY),程序包由两部分组成:程序包首和程序包体,程序包首为程序包定义接口,声明包中的类型、元件、函数和子程序。程序包体规定程序包的实际功能,存放说明中的函数和子程序,其方式与结构体语句模块方式相同。,定义程序包首的一般语句结构如下:,PACKAGE 程序包名IS -程序包首,程序包首说明部分,END 程序包名;,定义程序包体的一般语句结构如下:,PACKAGE BODY 程序包名IS -程序包体,程序包体说明部分以及包体内容,END 程序包名;,、程序包(PACKAGE),常用的预定义的程序包有4种。,STD_LOGIC_1164,程序包,STD_LOGIC_ARITH,程序包,STD_LOGIC_UNSIGNED,和,STD_LOGIC_SIGNED,程序包,STANDARD,和,TEXTIO,程序包,【例5-38】,PACKAGE pacl IS,TYPE ;,SUBTYPE ;,CONSTANT ;,SIGNAL ;,COMPONENT byte_adder,PORT,END COMPONENT;,FUNCTION,END pacl;,LIBRARY WORK;,USE WORK.pacl.ALL;,ENTITY,ARCHITECTURE,配置语句的一般格式如下:,CONFIGURATION 配置名OF实体名IS,配置说明,END 配置名;,配置主要为顶层设计实体指定结构体,该配置的书写格式如下:,CONFIGURATION 配置名OF实体名IS,FOR 选配结构体名,END FOR;,END 配置名;,3、,配置(CONFIGURATION),【例5-39】,LIBRARY IEEE;,USE IEEE.STD_LOGIC_1164.ALL;,ENTITY nand1 IS,END ENTITY nand1;,ARCHITECTURE one OF nand1 IS,END ARCHITECTURE one;,ARCHITECTURE two OF nand1 IS,END ARCHITECTURE two;,CONFIGURATION second OF nand1 IS,FOR two,END FOR;,END second;,CONFIGURATION first OF nand1 IS,FOR one,END FOR;,END first;,【例5-40】,LIBRARY IEEE;,USE IEEE.STD_LOGIC_1164.ALL;,ENTITY rs1 IS,END rs1;,ARCHITECTURE rsf OF rs1 IS,COMPONENT nand1,END COMPONENT,BEGIN,u1:nand1 PORT MAP();,u2:nand1 PORT MAP();,END ARCHITECTURE rfs;,CONFIGURATION sel OF rs1 IS,FOR rsf,FOR u1,u2:nand1 USE CONFIGURATION WORK.first;,END FOR,END FOR;,END sel;,行为描述只表示输入与输出间转换的行为,它不包含任何结构信息。行为描述主要使用函数、过程和进程语句,以算法形式描述数据的变换和传送。,5.6 VHDL描述风格,1、行为描述,【例5-41】-1位全加器行为描述,LIBRARY IEEE;,USE IEEE.STD_LOGIC_1164.ALL;,ENTITY onebitadder IS,PORT(x,y,cin:IN STD_LOGIC;,sum,count:OUT STD_LOGIC);,END onebitadder;,ARCHITECTURE behave OF onebitadder IS,BEGIN,PROCESS(x,y,cin),BEGIN,END PROCESS;,END behave;,数据流描述方式,也称RTL描述方式,主要使用并行的信号赋值语句,既显式地表示了该设计单元的行为,又隐含了该设计单元的结构。,2、,数据流描述,【例5-42】-1位全加器数据流描述,LIBRARY IEEE;,USE IEEE.STD_LOGIC_1164.ALL;,ENTITY onebitadder1 IS,PORT(x,y,cin:IN BIT;,sum,count:OUT BIT);,END onebitadder1;,ARCHITECTURE dataflow OF onebitadder1 IS,BEGIN,sum=x XOR y XOR cin;,count=(x AND y)OR(x AND cin)OR(y AND cin);,END dataflow;,所谓结构描述是描述该设计单元的硬件结构,即该硬件是如何构成的。其主要使用元件例化语句及配置语句来描述元件的类型及元件的互连关系。在层次设计中,高层次的设计模块调用低层次的设计模块,或者直接用门电路设计单元来构成一个复杂的逻辑电路的描述方法。,3、结构描述,【例5-43】-1位全加器结构描述,LIBRARY IEEE;,USE IEEE.STD_LOGIC_1164.ALL;,ENTITY onebitadder2 IS,PORT(x,y,cin:IN BIT;,sum,count:OUT BIT);,END onebitadder2;,ARCHITECTURE structure OF onebitadder2 IS,COMPONENT xor3,COMPONENT and2,COMPONENT or3,SINGAL s1,s2,s3:BIT;,BEGIN,G1:,G2:,G3:,G4:,G5:,END structure;,(1)基本门电路,【例5-44】-二输入与门,LIBRARY IEEE;,USE IEEE.STD_LOGIC_1164.ALL;,ENTITY andgate IS,PORT(a,b:IN STD_LOGIC;-a,b为输入端口,c:OUT STD_LOGIC);-c为输出端口,END andgate;,ARCHITECTURE and_2 OF andgate IS,BEGIN,c=a AND b;,END and_2;,5.7 常用单元的设计举例,1、组合逻辑电路设计,图5-3 与门工作时序,(2)8-3线优先编码器,【例5-45】,LIBRARY IEEE;,USE IEEE.STD_LOGIC_1164.ALL;,ENTITY encoder IS,PORT(a,b,c,d,e,f,g,h:IN STD_LOGIC;,out0,out1,out2:OUT STD_LOGIC);,END encoder;,方法1 使用条件赋值语句,ARCHITECTURE behave1 OF encoder IS,SIGNAL outvec:STD_LOGIC_VECTOR(2 DOWNTO 0);,BEGIN,outvec(2 downto 0)=111WHEN h=1 ELSE-条件赋值语句,110 WHEN g=1 ELSE,101 WHEN f=1 ELSE,100 WHEN e=1 ELSE,011 WHEN d=1 ELSE,010 WHEN c=1 ELSE,001 WHEN b=1 ELSE,000 WHEN a=1 ELSE,000;,展开阅读全文

咨信网声明:本文档由用户上传并分享,仅供学习交流、研究之用,未经授权,严禁复制、发行、汇编、翻译或网络传播等,侵权必究。
咨信网小贴示:
1、浏览或下载可查看了解,请点击【咨信网告知】。
2、下载文件中如有侵权或不适当内容,将立即纠正。
3、如果因为网速或其他原因下载失败请重新下载,重复下载[60天内]不扣币。
4、开具发票登录电脑端申请,请点击【索取发票】。
咨信网客服组:【微信客服】
1、浏览或下载可查看了解,请点击【咨信网告知】。
2、下载文件中如有侵权或不适当内容,将立即纠正。
3、如果因为网速或其他原因下载失败请重新下载,重复下载[60天内]不扣币。
4、开具发票登录电脑端申请,请点击【索取发票】。
咨信网客服组:【微信客服】


第5章VHDL设计进阶.ppt
















自信AI助手














微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/14656802.html