vhdl硬件描述语言vhdl语言程序的基本结构课件

上传人:痛*** 文档编号:192494148 上传时间:2023-03-07 格式:PPT 页数:56 大小:578KB
返回 下载 相关 举报
vhdl硬件描述语言vhdl语言程序的基本结构课件_第1页
第1页 / 共56页
vhdl硬件描述语言vhdl语言程序的基本结构课件_第2页
第2页 / 共56页
vhdl硬件描述语言vhdl语言程序的基本结构课件_第3页
第3页 / 共56页
点击查看更多>>
资源描述
VHDL语言程序的五个组成部分语言程序的五个组成部分库说明库说明包集合说明包集合说明实体说明实体说明构造体描述构造体描述配置语句配置语句库存放已编译的实体、构造体、包集合、和配置。相当于书库。包集合存放各设计模块能共享的数据类型、常数和子程序。相当于书架。实体用于说明所设计的系统的外部接口信号。构造体用于描述系统内部的结构和行为。配置用于从库中选取所需单元来组成系统设计的不同版本。基 本单元设计的基本单元设计的基本单元实体说明实体说明构造体构造体ENTITY mux ISGENERIC(m:TIME:=1ns);PORT(d0,d1,sel:IN BIT;q:OUT BIT);END ENTITY mux;ARCHITECTURE connect OF mux ISSIGNAL tmp:BIT;BEGIN cale:PROCESS(d0,d1,sel)IS VARIABLE tmp1,tmp2,tmp3:BIT;BEGIN tmp1:=d0 AND sel;tmp2:=d1 AND(NOT sel);tmp3:=tmp1 OR tmp2;tmp=tmp3;q=tmp AFTER m;END PROCESS cale;END ARCHITECTURE connect;下面的程序是二选一电路的下面的程序是二选一电路的VHDL描述,我们可以把它看成是一个设计描述,我们可以把它看成是一个设计的基本单元。的基本单元。实体说明实体说明构造体构造体 实体说明是二选一器实体说明是二选一器件外部引脚的定义件外部引脚的定义 构造体描述了二构造体描述了二选一器件的逻辑电路和选一器件的逻辑电路和逻辑关系逻辑关系 任何一个基本设计单元的实体说明都具有如下的结构:任何一个基本设计单元的实体说明都具有如下的结构:ENTITY 实体名 IS类属参数说明;端口说明;END ENTITY实体名;一个基本设计单元的实体说明以“ENTITTY 实体名实体名 IS”开始至“END ENTITTY实体实体名名”结束。这里大写字母表示实体说明的框架,即每个实体说明都应该这样书写,是不可缺少和省略的部分。实际上,对对VHDL而言,大写或小写都而言,大写或小写都一视同仁,不加区分一视同仁,不加区分。这里仅仅是为了阅读方便而加以区分的。ENTITY mux ISGENERIC(m:TIME:=1ns);PORT(d0,d1,sel:IN BIT;q:OUT BIT);END mux;ARCHITECTURE connect OF mux ISSIGNAL tmp:BIT;BEGIN cale:PROCESS(d0,d1,sel)VARIABLE tmp1,tmp2,tmp3:BIT;BEGIN tmp1:=d0 AND sel;tmp2:=d1 AND(NOT sel);tmp3:=tmp1 OR tmp2;tmp=tmp3;q=tmp AFTER m;END PROCESS;END ENTITY connect;该语句指定了构造体内该语句指定了构造体内m的值为的值为1ns。在本例中,在本例中,GENERIC利用类属参数为利用类属参数为tmp建立一个延迟值。建立一个延迟值。类属说明必须放在端口说明之前,用于指定参数。通过该参数可改变内类属说明必须放在端口说明之前,用于指定参数。通过该参数可改变内部电路结构和规模。部电路结构和规模。PORT(端口名,端口名:方向 数据类型名;端口名,端口名:方向 数据类型名);ENTITY mux ISGENERIC(m:TIME:=1ns);PORT(d0,d1,sel:IN BIT;q:OUT BIT);END ENTITY mux;ARCHITECTURE connect OF mux ISSIGNAL tmp:BIT;BEGIN cale:PROCESS(d0,d1,sel)IS VARIABLE tmp1,tmp2,tmp3:BIT;BEGIN tmp1:=d0 AND sel;tmp2:=d1 AND(NOT sel);tmp3:=tmp1 OR tmp2;tmp=tmp3;q=tmp AFTER m;END PROCESS cale;END ARCHITECTURE connect;此例中的外部引脚此例中的外部引脚为为d0,d1,sel,q。方向定义方向定义含义含义IN输入输入OUT输出(构造体内部不能再使用)输出(构造体内部不能再使用)INOUT双向双向BUFFER输出(构造体内部可再使用)输出(构造体内部可再使用)端口方向说明端口方向说明 在(a)中,锁存器的输出端口被说明为“OUT”,而在(b)中,锁存器的输出被说明为“BUFFER”。从图中可以看到,如果构造体内部要使用该信号,那么锁存器的输出端必须说明为“BUFFER”,而不能用“OUT”说明。,所以BIT数据类型是位逻辑数据类型,其取值只能是两个逻辑值(“1”和“0”)中的一个。例如,某一数据总线输出端口,具有8位的总线宽度。那么这样的总线端口的数据类型可以被说明成BIT_VECTOR。总线端口上的值由8位二进制位的值所确定。PORT(d0,d1,sel:IN BIT;q:OUT BIT;bus:OUT BIT_VECTOR(7 DOWNTO 0);该例中d0,d1,sel,q都是BIT数据类型,而bus是BIT_VECTOR类型,(7 DOWNTO 0)表示该bus端口是一个8位端口,由B7B0 8位构成。位矢量长度为8位。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mu IS PORT(d0,d1,sel:IN STD_LOGIC;q:OUT STD_LOGIC;bus:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END ENTITY mu;该 例 中 B I T 类 型 用 S T D _ L O G I C 说 明,而 b u s 则 用STD_LOGIC_VECTOR(7 DOWNTO 0)说明。在用在用STD_LOGIC和和STD_LOGIC_VECTOR说明时,在实体说明以前说明时,在实体说明以前必须增加例中所示的两个语句必须增加例中所示的两个语句,以便在对VHDL语言程序编译时,从指定库的包集合中寻找数据类型的定义。构造体是一个基本设计单元的实体,它具体地指具体地指明了该基本设计单元的行为、元件及内部的连接关系,明了该基本设计单元的行为、元件及内部的连接关系,也就是说它定义了设计单元具体的功能也就是说它定义了设计单元具体的功能。构造体对其基本设计单元的输入输出关系可以用3种方式进行描述,即行为描述(基本设计单元的数学模型描述)行为描述(基本设计单元的数学模型描述)、寄存器传输描述(数据流描述)寄存器传输描述(数据流描述)和结构描述(逻辑元结构描述(逻辑元件连接描述件连接描述)。不同的描述方式,只体现在描述语句上,而构造体的结构是完全一样的。由于构造体构造体是对实体功能的具体描述,因此它一一定要跟在实体的后面定要跟在实体的后面。通常,先编译实体之后才能对构造体进行编译。如果实体需要重新编译,那么相应构造体也应重新进行编译。实体与构造体的关系:实体与构造体的关系:设计实体构造体1构造体2构造体3构造体n。一个设计实体可有多个构造体,代表实体的多种实现方式。各个构造体的地位相同。ARCHITECTURE 构造体名 OF 实体名 IS定义语句 内部信号,常数,数据类型,函数等的定义;BEGIN并行处理语句;END ARCHITECTURE 构造体名;一个构造体从一个构造体从“ARCHITECTURE 构造体名构造体名 OF 实体名实体名 IS”开始,至开始,至“END ARCHITECTURE 构造体构造体名名”结束。下面对构造体的有关内容和书写方法作一说结束。下面对构造体的有关内容和书写方法作一说明。明。构造体的名称是对本构造体的命名,它是该构造体的唯一名称。OF后面紧跟的实体名表明了该构造体所对应的是哪一个实体。用IS来结束构造体的命名。构造体的名称可以由设计者自由命名。但是在大多数的文献和资料中,通常把构造体的名称命名为behavioral(行为),dataflow(数据流)或者structural(结构)。如前所述,这3个名称实际上是3种构造体描述方式的名称。当设计者用某一种描述方式来描述构造体时,该构造体的名称就命名为那一个名称。这样,使得阅读VHDL语言程序的人能直接了解设计者所采用的描述方式。例如,使用结构描述方式来描述二选一电路,那么二选一电路的构造体就可以这样命名:ARCHITECTURE structural OF mux IS 定义语句位于ARCHITECTURE和BEGIN之间,用于对构造体内部所使用的信号、常数、数据类型和函数等进行定义。例如:ARCHITECTURE behav OF mux IS SIGNAL nes1:BIT;BEGIN END ARCHITECTURE behav;信号定义和端口说明的语句一样,应有信号名和信号定义和端口说明的语句一样,应有信号名和数据类型的说明。因它是内部连接用的信号,故没有数据类型的说明。因它是内部连接用的信号,故没有也不需要有方向说明。也不需要有方向说明。并行处理语句处于语句BEGIN和END之间,这些语句具体地描述了构造体的行为及其连接关系。例如,二选一的数据流方式描述可以写为:ENTITY mux IS PORT(d0,d1:IN BIT;sel:IN BIT;q:OUT BIT);END mux;ARCHITECTURE dataflow OF mux IS SIGNAL s1,s2:BIT;BEGIN s1=d0 AND sel;s2=NOT sel AND d1;q=s1 OR s2;END ARCHITECTURE dataflow;并行处理语句并行处理语句 在构造体中的语句都是在构造体中的语句都是可以并行执行的,也就是说,可以并行执行的,也就是说,语句的执行不以书写的语句语句的执行不以书写的语句顺序为执行顺序。顺序为执行顺序。在规模较大的电路设计中,全部电路都用唯一的一个模块来描述是非常不方便的。为此,电路设计者总希望将整个电路分成若干个相对比较独立的模块来进行电路的描述。这样,一个构造体可以用几个一个构造体可以用几个子结构,即相对比较独立的几个模块来构成。子结构,即相对比较独立的几个模块来构成。VHDL语言可以有以下3种形式的子结构描述语句:*BLOCK语句结构语句结构 *PROCESS语句结构语句结构 *SUBPROGRAMS结构结构采用BLOCK语句描述局部电路的书写格式如下所示:块结构名:块结构名:BLOCK BEGINEND BLOCK 块结构名;块结构名;采用BLOCK语句来描述二选一电路如下:ENTITY mux ISPORT(d0,d1,sel:IN BIT;q:OUT BIT);END mux;ARCHITECTURE connect OF mux IS SIGNAL tmp1,tmp2,tmp3:BIT;BEGIN cale:BLOCK BEGIN tmp1=d0 AND sel;tmp2=d1 AND(NOT sel);tmp3=tmp1 OR tmp2;q=tmp3;END BLOCK cale;END connect;该程序的构造体中该程序的构造体中只有一个只有一个BLOCK块,块,如果电路较复杂时如果电路较复杂时就 可 以 由 几 个就 可 以 由 几 个BLOCK块组成。块组成。VHDL语言中电路的构造体对应整个电原理图,而构造体可以由多个BLOCK块构成,每一个BLOCK块对应一张子原理图。这样电原理图的分割关系和VHDL语言程序中用BLOCK分割构造体的关系是一一对应的。在用其它高级语言编程时,在用其它高级语言编程时,总希望程序模块小一点,以利总希望程序模块小一点,以利于编程和查错,也利于实现积于编程和查错,也利于实现积木化结构。同理,在木化结构。同理,在VHDL语语言中采用言中采用BLOCK块对编程、块对编程、查错、仿真及再利用都会带来查错、仿真及再利用都会带来很大的好处。很大的好处。在对程序进行仿真时,BLOCK语句中所描述的各个语句是可以并行执行的,它和书写顺序无关。在VHDL语言中将这样可以并行执行的语句称为并发语句(Concurrent Statement)。当然在构造体内直接书写的语句也是并发的。在VHDL语言中也存在只能顺序执行的语句,这一点将在后面再介绍。在实际电路设计中,往往会碰到这样情况,当某一种条件得到满足时,BLOCK语句才可以被执行;而条件不满足时该BLOCK语句将不能执行。这就是卫 式卫 式 BLOCK,它 可 以 实 现,它 可 以 实 现BLOCK的执行控制的执行控制。BLOCK 卫式布尔表达式卫式布尔表达式 用BLOCK语句来描述一个D锁存器构。该锁存器具有一个数据输入端d,时钟输入端clk,输出端q和反相输出端qb。众所周知,只有clk有效时(clk=“1”),输出端q和qb会随D端输入数据变化而变化。ENTITY latch IS PORT(d,clk:IN BIT;q,qb:OUT BIT);END latch;ARCHITECTURE latch_guard OF latch ISBEGIN G1:BLOCK(clk=1)BEGIN q=GUARDED d AFTER 5ns;qb=GUARDED NOT(d)AFTER 7ns;END BLOCK G1;END latch_guard;在在BLOCK块中的两块中的两个信号传送语句都写个信号传送语句都写有 前 卫 关 键 词有 前 卫 关 键 词GUARDED,这表明,这表明只有只有卫式布尔表达式卫式布尔表达式为真时,这两个语句为真时,这两个语句才被执行。才被执行。与BLOCK语句一样,某一个功能独立的电路,在设计时也可以用一个PROCESS语句结构来描述。采用PROCESS语句描述电路结构的书写格式如下所示:进程名:PROCESS(信号1,信号2,)ISBEGINEND PROCESS;进程名可以有也可以省略。PROCESS语句从PROCESS开始至END PROCESS结束。执行PROCESS语句时,通常带有若干个信号量。这些信号量将在PROCESS结构的语句中被使用。ENTITY mux ISPORT(d0,d1,sel:IN BIT;q:OUT BIT);END mux;ARCHITECTURE connect OF mux ISBEGIN cale:PROCESS(d0,d1,sel)IS VARIABLE tmp1,tmp2,tmp3:BIT;BEGIN tmp1:=d0 AND sel;tmp2:=d1 AND(NOT sel);tmp3:=tmp1 OR tmp2;qb)THEN tmp:=a;ELSE tmp:=b;END IF;RETURN tmp;END max;函数语句可以在构造体的语句中直接调用:函数语句可以在构造体的语句中直接调用:ENTITY peakdetect IS PORT(data:IN STD_LOGIC_VECTOR(5 DOWNTO 0);clk,set:IN STD_LOGIC;dataout:OUT STD_LOGIC_VECTOR(5 DOWNTO 0);END peakdetect;ARCHITECTURE rtl OF peakdetect IS SIGNAL peak:STD_LOGIC_VECTOR(5 DOWNTO0);BEGIN dataout=peak;PROCESS(clk)BEGIN IF(clkEVENT AND clk=1)THEN IF(set=1)THEN peak=data;ELSE peak=max(data,peak);END IF;END IF;END PROCESS;END rtl;该 程 序 调 用 上 例 中 的max(a,b)函数,data和peak的值拷贝给a、b参数,函数的返回值被赋予peak。返回值可以赋予信号或变量,在本例中被赋予信号peak。前面详细叙述了子程序中过程、函数的结构和使用方法。为了能重复使用这些过程和函数,这些程序通常组织在包集合、库中。它们与包集合和库具有这样的关系,库(Library)是经编译后的数据的集合,它存放包集合定义、实体定义、构造体定义和配置定义。在VHDL语言中,库的说明总是放在设计单元的最前面:LIBRARY 库名;库名;这样,在设计单元内的语句就可以使用库中的数据。由此可见,库的好处就在于使设计者可以共享已经编译过的设计结果。在IEEE库中有一个“”的包集合,它是IEEE正式认可的。现在有些公司,如S Y N O P S Y S 公 司 也 提 供 一 些 包 集 合“STD_LOGIC_ARITH”、“STD_LOGIC_UNSIGNED”,尽管它们没有得到IEEE的承认,但是仍汇集在IEEE库中。由于它是VHDL的 标 准 配 置,因 此 设 计 者 如 要 调 用“STANDARD”中的数据可以不按标准格式说明。在VHDL中,为了进行门级仿真,各公司可提供面向ASIC的逻辑门库。在该库中存放着与逻辑门一一对应的实体。WORK库是现行作业库。设计者所描述的VHDL语句不需要任何说明,将都存放在WORK库中。在使用该库时无需进行任何说明。用户为自身设计需要所开发的共用包集合和实体等,也可以汇集在一起定义成一个库,这就是用户定义库或称用户库。在使用时同样要首先说明库名。前面提到的5类库除WORK库和STD库之外,其它3类库在使用前都首先要作说明,第一个语句是“LIBRARY 库名”,表明使用什么库。另外还要说明设计者要使用的是库中哪一个包集合以及包集合中的项目名(如过程名、函数名等)。这样所以,般在使用库时首先要用两条语句对库进行说明。例如:上 述 表 明,在 该 V H D L 语 言 程 序 中 要 使 用 I E E E 库 中STD_LOGIC_1164包集合的所有项目。这里,项目名为ALL,表示包集合的所有项目都要用。库说明语句的作用范围从一个实体说明开始到它所属的构造体、配置为止。库说明语句的作用范围从一个实体说明开始到它所属的构造体、配置为止。当一个源程序中出现两个以上的实体时,两条作为使用库的说明语句应在每个实体当一个源程序中出现两个以上的实体时,两条作为使用库的说明语句应在每个实体说明语句前重复书写。例如:说明语句前重复书写。例如:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY and1 ISEND and1;ARCHITECTURE rtl OF and1 ISEND rtl;CONFIGURATION s1 OF and1 ISEND s1;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY or1 ISCONFIGURATION s2 OF or1 ISEND s2;库使用说明库使用说明 包集合(Package)说明像C语言的include语句一样,用来单纯地罗列所要用到的信号定义、常数定义、数据类型、元件语句、函数定义和过程定义等,它是一个可编译的设计单元,也是库结构中的一个层次。例如:该 语 句 表 示 在 V H D L 程 序 中 要 使 用 名 为STD_LOGIC_1164的包集合中的所有定义或说明项。包集合标题包集合体 一个包集合由两大部分组成:包集合标题(Header)和包集合体。包集合体(Package Body)是一个可选项,也就是说,包集合可以只由包集合标题构成。一般包集合标题列出所有项的名称,而包集合体具体给出各项的细节。P46【例3-12】包集合也可以只有一个包集合标题说明,因为在包集合标题中包集合也可以只有一个包集合标题说明,因为在包集合标题中也允许使用数据赋值和有实质性的操作语句。例如:也允许使用数据赋值和有实质性的操作语句。例如:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;PACKAGE upac IS CONSTANT k:INTEGER:=4;TYPE instruction IS(add,sub,adc,inc,srf,slf);SUBTYPE cpu_bus IS STD_LOGIC_VECTOR(k-1 DOWNTO 0);END upac;上述的包集合中,用户自定义了上述的包集合中,用户自定义了CPU的指令这一数据类型和的指令这一数据类型和cpu_bus为一个为一个4位的位矢量。由于它是用户自己定义的,因此编位的位矢量。由于它是用户自己定义的,因此编译以后就会自动地加到译以后就会自动地加到WORK库中,如要使用该包集合,则可用如库中,如要使用该包集合,则可用如下格式调用:下格式调用:USE WORK.upac.instruction;配置(Configuration)语句描述层与层之间的连接关系以及实体与结构之间的连接关系。设计者可以利用这种配置语句来选择不同的构造体,使其与要设计的实体相对应。在仿真某一个实体时,可以利用配置来选择不同的构造体,进行性能对比试验以得到性能最佳的构造体。设计实体构造体构造体1构造体2构造体3构造体n。一个设计实体的多种实现方式配置:从某个实体的多种结构体描述方式中选择 特定的一个。CONFIGURATION 配置名 OF 实体名 IS FOR 选配构造体名 END FOR;END 配置名;构造体描述8为计数器构造体描述16为计数器8位计数器构造体的配置16位计数器构造体的配置P48 例【3-14】
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 成人自考


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

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


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