VHDL语言构造体的描述方式.ppt
第4章VHDL语言构造体的描述方式,4.1 构造体的行为描述方式 4.2 构造体的寄存器传输(RTL)描述方式 4.3 构造体的结构描述方式 习题,VHDL的结构体具体描述整个设计实体的逻辑功能,对于所希望的电路功能行为,可以在结构体中用不同的语句类型和描述方式来表达,即对于相同的逻辑行为,可以有不同的语句表达方式。对硬件系统进行描述,可以采用3种描述方式,即行为描述方式、寄存器传输(或数据流)描述方式和结构化的描述方式。这3种描述方式从不同的角度对硬件系统进行行为和功能的描述。在当前情况下,采用后两种描述方式的VHDL语言程序可以进行逻辑综合,而采用行为描述的VHDL语言程序,大部分只用于系统仿真,少数的也可以进行逻辑综合。在实际应用中,为了能兼顾整个设计的功能、资源、性能几方面的因素,通常混合使用这三种描述方式。,4.1 构造体的行为描述方式,所谓行为描述可以有两个含义 从VHDL仿真的角度看,凡是可以在VHDL仿真器上进行仿真测试的,且可含有任何不可综合语句的系统描述模型都可以称为行为描述模型。从具体的描述方法上看,VHDL的结构体只描述了所希望电路的功能或者说电路行为,而没有直接指明或涉及实现这些行为的硬件结构,包括硬件特征、连线方式、逻辑行为方式,则称为行为风格的描述或行为描述模型。,4.1 构造体的行为描述方式,行为描述方式是对系统数学模型的描述,其抽象程度比寄存器传输描述方式和结构化描述方式的更高。在行为描述方式的程序中大量采用算术运算、关系运算、惯性延时、传输延时等难于进行逻辑综合和不能进行逻辑综合的VHDL语句。采用行为描述方式的VHDL语言程序主要用于系统数学模型的仿真或者系统工作原理的仿真。,4.1.1 代人语句,代入语句是VHDL语言中进行行为描述的最基本的语句。格式为:信号量=敏感信号量表达式;例如:a=b;z=a NOR(b NAND c);,具有延时时间的代入语句如下所示:a=b AFTER 5 ns;该语句表示,当b发生新的变化5ns以后才被代入到信号a。门电路都存在固有延时,既当输入端发生变化以后,门电路的输出端的新的输出总要比输入端的变化延时若干时间,例如延时5ns。门电路的这种输出特性就可以用具有延时时间的代入语句来描述。,例41ENTITY and2 1SPORT(a,b:IN BIT;c:OUT BIT);END and2;ARCHITECTURE and2_behav OF and2 1SBEGIN C=a AND b AFTER 5 ns;END and2_behav;,例42,LIBRARY IEEE;USE IEEESTD_LOGIC_1164ALL;USE IEEESTD_LOGIC_UNSIGNEDALL;ENTITY mux4 1S PORT(i0,i1,i2,i3,a,b:IN STD_LOGIC;q:OUT STDLOGIC);END mux4;ARCHITECTURE behav OF mux4 1S SIGNAL sel:INTEGER;BEGIN WITH sel SELECT q i0 AFTER 10 ns WHEN 0,i1 AFTER 10 ns WHEN 1,i2 AFTER 10 ns WHEN 2,i3 AFTER 10 ns WHEN 3,XAFTER 10 ns WHEN OTHERS;sel 0 WHEN a0AND b0 ELSE 1 WHEN a1AND b0 ELSE 2 WHEN a0AND b1 ELSE 3 WHEN a1AND b1 ELSE 4;END behav;,4.1.2 延时语句,VHDL语言中存在两种延时类型:惯性延时 传输延时 这两种延时常用于VHDL语言的行为描述方式。,4.1.2 延时语句,1惯性延时 在VHDL语言中,惯性延时是缺省的,即在语句中如果不作特别说明,产生的延时一定是惯性延时。这是因为大多数器件在行为仿真时都会呈现这种惯性延时。,惯性延时有一个重要的特点,即当一个系统或器件,它的输入信号变化周期小于系统或器件的惯性(或惯性延时)时,其输出将保持不变。,几乎所有器件都存在惯性延时,因此,硬件电路的设计人员为了逼真地仿真硬件电路的实际工作情况,在代入语句中总要加上惯性延时时间的说明。例如:b a AFTER 10 ns;惯性延时说明只在行为仿真时有意义,逻辑综合时将被忽略,或者在逻辑综合前必须去掉延时说明。,4.1.2 延时语句,2传输延时 在VHDL语言中,传输延时必须在语句中明确说明。“TRANSPORT”是专门用于说明传输延时的前置词。传输延时用于描述总线延时、连接线的延时及ASIC芯片中的路径延时。具有传输延时的代入语句如下所示:b=TRANSPORT a AFTER 20 ns;,第一个图分析:当一个系统或器件,它的输入信号变化周期小于系统或器件的惯性(或惯性延时)时,其输出将保持不变。第二个图分析:当有10ns的脉冲波形输入时,经20ns传输延时以后,在输出端产生10ns的脉冲波形。也就是说,输出端的信号除延时规定时间外,将完全复现输入端的输入波形,而不管输入波形的形状和宽窄如何。,4.2 构造体的寄存器传输(RTL)描述方式,采用行为描述方式的VHDL语言程序,在一般情况下只能用于行为层次的仿真,而不能进行逻辑综合。对于用行为描述方式的VHDL语言程序只有改写为 RTL描述方式才能进行逻辑综合,也就是说RTL描述方式才是真正可以进行逻辑综合的描述方式。RTL描述方式也称为数据流描述方式。,4.2.1 RTL描述方式的特点,RTL描述方式,是一种明确规定寄存器描述的方法。由于受逻辑综合的限制,在采用RTL描述方式时,所使用的VHDL语言的语句有一定限制,其限制情况如附录A所示。在RTL描述方式中要么采用寄存器硬件的一一对应的直接描述,要么采用寄存器之间的功能描述。,例4-7LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGEND.ALL;ENTITY mux2 IS PORT(input:IN STD_LOGIC_VECTOR(1 DOWNTO 0);sel:IN STD_LOGIC;y:OUT STD_LOGIC);END mux2;ARCHITECTURE rtl OF mux2 ISBEGIN y=input(0)WHEN sel1 ELSE input(1);END rtl;,例4-8 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGEND.ALL;ENTITY mux2 IS PORT(d0,dl,sel:IN STD_LOGIC;q:OUT STD_LOGIC);END mux2;ARCHITECTURE rtl OF mux2 IS SIGNAL aa,ab:STD_LOGIC;BEGIN aa=d0 AND sel;ab=d1 AND(NOT sel);y=aa OR ab;END rtl;,对于例47,是将二选一电路看成一个黑框,编程者无需了解二选一内部的细节,只要知道外部特性和功能就可以进行正确的描述。而对于48,编程者就必须了解二选一电路是怎样构成的,内部采用了哪些门电路。所以从编程效率及编程难度来看,应该选择47这样的编程方法,来编写RTL描述方式的程序。,4.2.2 使用RTL描述方式应注意的几个问题,1“X”状态的传递 在目前的RTL设计中要对所设计的程序进行仿真检验,而且在逻辑电路综合以后还有必要对综合的结果进行仿真。之所以要进行二次仿真,这是因为在仿真过程中存在“X”传递的影响。它可以使得RTL仿真和门级电路仿真产生不一致的结果。,所谓“X”状态的传递,实质上是不确定信号状态的传递,它将使逻辑电路产生不确定的结果,不确定“状态”在RTL仿真时是允许出现的,但是在逻辑综合后的门级电路仿真中是不允许出现的。例49 PROCESS(sel)BEGIN IF(sel=1)THEN y=0;ELSE y=1;END IF;END PROCESS;,例410 PROCESS(sel)BEGIN IF(sel0)THEN y=1;ELSE y=0;END IF;END PROCESS;,PROCESS(sel)BEGIN IF(sel=1)THEN y=0;ELSIF(sel=0)THEN y=1;ELSE y=X;END IF;END PROCESS;,在上例中ELSE项以前,将sel所有的可能取值都作了明确的约束,当selX时,其输出y也将变为“X”,就不会出现不合理的结果。在逻辑综合时,ELSE项是被忽略的,这样RTL仿真结果就和逻辑综合的仿真结果是一样的。,2寄存器RTL描述的限制,由RTL描述所生成的逻辑电路中,一般来说寄存器的个数和位置与RTL描述的情况是一致的。但是,寄存器RTL描述不是任意的,而是有一定限制的。,1)禁止在一个进程中存在两个寄 存器描述,例4-11 PROCESS(clk1,clk2)BEGIN IF(clk1EVENT AND clk11)THEN y=a;END IF;IF(clk2EVENT AND clk21)THEN z=b;END IF;END PROCESS;,2)禁止使用IF语句中的ELSE项,例4-12 PROCESS(clk)BEGIN IF(clkEVENT AND clk=1)THEN y=a;ELSE 禁止使用 y=b;END IF;END PROCESS;,3)寄存器描述中必须代入信号值,例4-13 PROCESS(clk)VARIABLE tmp:STD_LOGIC;BEGIN IF(clkEVENT AND clk1)THEN tmp:=a;END IF;y=tmp;END PROCESS;,3关联性强的信号应放在一个进程中,在设计“与”及“或”这样部件时,如果在原理图上是并行放置的,那么通常进程和部件是一一对应的。但是,在许多较复杂的电路中,它有多个输入和输出,有些信号互相的关联度很高,而有些信号互相的关联度就很低,在这种情况下,为了在逻辑综合以后,使其电路的面积和速度指标更高,通常将关联度高的信号放在一个进程中,将电路分成几个进程来描述。,例4-14LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY exl IS PORT(a,b,c,zin,yin:IN STD_LOGIC;dout,eout,fout,gout:OUT STD_LOGIC);END exl;ARCHITECTURE rtl OF exl IS BEGIN PROCESS(a,b,c,zin,yin)BEGIN IF(a1 AND b0)THEN dout=1;eout=zin;fout=0;gout=0;ELSIF(a=0 AND b=0)THEN,dout=0;eout=yin;fout=0;gout=0;ELSIF(a=0 AND b1)THEN dout=0;eout=yin;fout=1;gout=0;ELSIF(c=1)THEN dout=1;eout=zin;fout=1;gout=1;ELSE,dout=1;eout=zin;out=1;gout=0;END IF;END PROCESS;END rtl;,例4-15LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ex2 IS PORT(a,b,c,zin,yin:IN STD_LOGIC;dout,eout,fout,gout:OUT STD_LOGIC);END ex2;ARCHITECTURE rtl OF ex2 ISBEGIN PR0CESS(a,zin,yin)BEGIN IF(a1)THEN dout=1;eout=zin;ELSE dout=0;,eout=yin;END IF;END PROCESS;PROCESS(b)BEGIN IF(b1)THEN fout=1;ELSE fout=0;END IF;END PROCESS,PROCESS(a,b,c)BEGIN IF(a=1 AND b=1 AND c=1)THEN gout=1;ELSE gout0;END IF;END PROCESS;END rtl;,4.3 构造体的结构描述方式,所谓构造体的结构描述方式,就是在多层次的设计中,高层次的设计模块调用低层次的设计模块,或者直接用门电路设计单元来构成一个复杂的逻辑电路的描述方法。,4.3.1 组件定义与组件映象 结构描述方式最能提高设计效率,它可以将已有的设计成果,方便地用到新的设计中去。例如,某一个逻辑电路是由AND门、OR门和XOR门构成的,而AND门、OR门和XOR门的逻辑电路都已有现成的设计单元。那么,用这些现成的设计单元(AND的ENTITY、OR的ENTITY和XOR的ENTITY)经适当连接就可以构成新的设计电路的ENTITY。这样的描述,其结构非常清晰,且能做到与电原理图中所画的器件一一对应。当然,如要用结构描述方式,则要求设计人员有较多的硬件设计知识。,a(1),a(0),b,VHDL语言提供了组件定义(COMPONENT)、组件映象(PORT(GENERIC)MAP)来解决程序模块重复使用的问题。在构造体的结构描述中,COMPONENT语句是基本的描述语句。该语句指定了本构造体中所调用的是哪一个现成的逻辑描述模块。COMPONENT 语法格式:COMPONENT 组件名称 GENERIC 说明;PORT(信号A:端口模式 数据类型;信号B:端口模式 数据类型;-);END COMPONENT;,ENTITY andn ISGENERIC(n:INTEGER);PORT(a:IN STD_LOGIC_VECTOR(n-1 DOWNTO 0);b:OUT STD_LOGIC);END andn;COMPONENT andnGENERIC(n:INTEGER);PORT(a:IN STD_LOGIC_VECTOR(n-1 DOWNTO 0);b:OUT STD_LOGIC);END COMPONENT;,组件映象语句是结构化描述中不可缺少的一个基本语句。该语句将现成元件的端口信号映射成高层次设计电路中的信号。组件映象语句的书写格式为:标号名:元件名 GENERIC MAP()PORT MAP(信号,);标号名加在元件名的前面,在该构造体的说明中该标号名一定是惟一的。下层元件的端口信号与实际连接的信号用PORT MAP的映射关系联系起来。映射方法有两种:一种是位置映射;一种是名称映射。,a(1),a(0),b,ENTITY andn ISGENERIC(n:INTEGER);PORT(a:IN STD_LOGIC_VECTOR(n-1 DOWNTO 0);b:OUT STD_LOGIC);END andn;COMPONENT andnGENERIC(n:INTEGER);PORT(a:IN STD_LOGIC_VECTOR(n-1 DOWNTO 0);b:OUT STD_LOGIC);END COMPONENT;,1位置映射方法,所谓位置映射方法就是在下一层中元件端口说明中的信号书写顺序位置和PORT MAP()中指定的实际信号书写顺序位置一一对应。在设计的引用中与门U2的信号对应关系描述为:U2:andn GENERIC MAP(2)PORT MAP(nsel,d1,ab);也就是说在图4-8中,U2的n=2,nsel对应a(1),d1对应a(0),ab对应b。,2名称映射方法,所谓名称映射就是使用“”符号将已经存于库中的现成模块的各端口名称赋予高层次设计中模块的信号名。例如:U2:andn GENERIC MAP(n=2)PORT MAP(a(1)=nsel,a(0)=d1,b=ab);,4.3.2 构造体结构描述的基本框架,例4-16 ENTITY mux2 IS PORT(d0,d1,sel:IN BIT;q:OUT BIT);END mux2;ARCHITECTURE 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 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 MAP(aa,ab,q);END struct;,这种结构描述方式,较方便地能进行多层次的结构设计。例如,某系统由若干块插件板组成,每个插件块又由若干块专用的ASIC电路组成,各专用的ASIC电路又由若干个已生成的基本单元电路组成。这样3个层次构成的系统可以用3个层次的结构来描述。1.ASIC级结构描述 假设该系统中的ASIC电路的基本结构是由与、或和非门3种基本逻辑电路构成的。那ASIC级的结构描述如例4-17所示。,例4-17 asicl:BLOCK PORT();COMPONENT and2.END COMPONENT;COMPONENT or2.END COMPONENT;COMPONENT inv.END COMPONENT;,SIGNAL.;FOR ul:and2 USE ENTITY WORK.and2;FOR u2:or2 USE ENTITY WORK.or2;BEGIN u1:and2 PORT MAP();u2:or2 PORT MAP();:END BLOCK asicl;:,在例4-17中对,ASIC芯片的结构作了描述,不同的ASIC芯片是由不同个数和连接关系的与门、或门和非门构成的。对这些ASIC芯片进行逻辑综合就可以得到现成的ASIC芯片。如在其它的逻辑电路中要使用这些ASIC芯片,即可在库中调用。2插件板级结构描述 每种插件板是由若干块不同的ASIC芯片构成的,如要描述插件板的逻辑电路,则仍可采用结构描述方式来进行描述,如例4-18所示。,例418 ENTITY printed_board1 IS PORT(.);ARCHITECTURE board1 OF printed_board1 IS signal.;BEGIN asic1:BLOCK:END BLOCK asic1;:asic5:BLOCK:END BLOCK asic5;,:END board1;:ENTITY printed_boardm IS PORT();END printed_boardmARCHITECTURE boardm OF printed_boardm IS:END boardm;,在例4-18中描述了m块插件板的每一块是由哪些ASIC芯片组成的,且其连接关系是什么。这样就得到了插件板级的逻辑电路的结构描述。3.系统级的结构描述 若一个系统是由m块插件板连接而成的,通过插件板级描述,认为它们是可以供系统设计逻辑电路时能任意调用的已设计好的模块。此时,系统级的结构描述实例如例3-19所示,例4-19ENTITY system IS PORT(.);:END system;ARCHITECTURE struct OF system IS COMPONENT printed_boardl PORT();END COMPONENT;:COMPONENT printed_boardm PORT(.);END COMPONENT;,FOR B_1:printed_boald1 USE ENTITY WORK.printed_board1;:FOR B_m:printed_boardm USE ENTITY WORK.printed_boardm;SIGNAL;BEGIN B_1:printed_board1 插件板1 PORT MAP();:B_m:printed_boardm 插件板m PORT MAP(.);END struct;,习题与思考题4.1 完成一个D触发器的设计 4.2 利用构造体的结构化描述方式完成一个4位的移位寄存器的设计。提示信息:4位移位寄存器可以由4个1位的移位寄存器(D触发器)级联而成。,D,CP,Q,D,CP,Q,D,CP,Q,D,CP,Q,DIN,CLK,Q3,Q0,Q1,Q2,