EDA技术及应用第四章VHDL设计初步.ppt
EDA技术及应用,主讲:牛军浩,第四章 VHDL设计初步,4.1 多路选择器的VHDL描述4.2 寄存器描述及其VHDL语言现象4.3 1位二进制全加器的VHDL描述4.4 计数器设计4.5 一般加法计数器设计,教学目的,通过简单、完整而典型的VHDL设计示例,初步了解用VHDL表达和设计电路的方法。,4.1 多路选择器的VHDL描述,2选1多路选择器的示意图和真值表,a,b,y,s,0,1,当s=0时,y=a当s=1时,y=b,4.1 多路选择器的VHDL描述,2.2选1多路选择器实现原理图形输入法,0,0,1,y=a,0,a,1,1,0,y=b,b,0,4.1 多路选择器的VHDL描述,2.2选1多路选择器实现VHDL文本输入法1,实体,结构体,实体名称,端口名称,流动方向,数据类型,结构体名,功能描述,4.1 多路选择器的VHDL描述,2.2选1多路选择器实现VHDL文本输入法2,实体,结构体,4.1 多路选择器的VHDL描述,2.2选1多路选择器实现VHDL文本输入法3,实体,结构体,4.1 多路选择器的VHDL描述,3.相关语句结构和语法实体表达结构,ENTITY、IS、PORT、END都是描述实体的关键词,不分大写小写,但是为了便于阅读,一般在设计中将关键词使用大写,自定义使用小写。,4.1 多路选择器的VHDL描述,3.相关语句结构和语法实体名称,实体名表达的是该设计电路的器件名,通常根据相应电路的功能来确定。不能用数字或中文、不能与工具库中已定义的元件名、不能数字开头。,4.1 多路选择器的VHDL描述,3.相关语句结构和语法实体名称举例,mux4174LS04 and2adder4bnot4输入与门,4.1 多路选择器的VHDL描述,3.相关语句结构和语法端口语句和名称,端口以PORT();来引导端口模式有:IN、OUT、INOUT、BUFFER数据类型有:BOOLEAN、BIT、INTEGER、CHAR型等,4.1 多路选择器的VHDL描述,3.相关语句结构和语法结构体表达结构,ARCHITECTURE、OF、IS、BEGIN、END都是描述结构体的关键词。功能描述语句:并行语句,顺序语句并行语句:WHEN_ELSE,逻辑操作赋值顺序语句:IF_THEN_ELSE,功能描述语句,4.1 多路选择器的VHDL描述,3.相关语句结构和语法文件名称,使用VHDL语句编写:后缀是.vhd使用Verilog HDL语句编写:后缀是.v使用原理图输入设计:后缀是.gdf,文件名称建议和实体名称相同,4.1 多路选择器的VHDL描述,4.思考,y=ab+c,_,思考1:画出真值表,_,4.1 多路选择器的VHDL描述,4.思考,y=ab+c,_,思考2:使用原理图方式实现上式功能,4.1 多路选择器的VHDL描述,4.思考,y=ab+c,_,思考3:使用VHDL实现上式功能,4.1 多路选择器的VHDL描述,5.赋值符号,Y=(a AND(NOT s)or(b AND s),赋值符号,4.1 多路选择器的VHDL描述,6.各种表达式的比较-布尔逻辑表达式,y=(a AND(NOT s)OR(b AND s),4.1 多路选择器的VHDL描述,6.各种表达式的比较-条件赋值表达式,y=a WHEN s1=0 ELSE b;,赋值目标=表达式 WHEN 赋值条件 ELSE 表达式 WHEN 赋值条件 ELSE 表达式 WHEN 赋值条件 ELSE 表达式;,4.1 多路选择器的VHDL描述,7.各种表达式的比较-IF_THEN_ELSE表达,IF(s=0)THEN y=a;ELSE y=b;END IF;,IF 条件表达式 THEN 赋值语句;ELSIF 条件表达式 THEN 赋值语句;ELSIF 条件表达式 THEN 赋值语句;ELSE 条件表达式;END IF;,4.1 多路选择器的VHDL描述,8.小结,4.1 节中主要通过多路选择器的实现过程,学习了VHDL描述的基本语言结构,以及组合逻辑电路的功能描述方法布尔逻辑表达式WHEN_ELSE条件表达式IF_THEN_ELSE表达式,4.2 寄存器描述及其VHDL语言,1.教学目的,通过D触发器的VHDL实现过程,学习时序电路的VHDL描述方法。,4.2 寄存器描述及其VHDL语言,2.D触发器的功能描述,当CP=0时,触发器不工作,处于维持状态。当CP=1时,它的功能如下:当D=0时,次态=0,当D=1时,次态=1。,4.2 寄存器描述及其VHDL语言,3.VHDL实现,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY dff1 ISPORT(clk:IN STD_LOGIC;d:IN STD_LOGIC;q:OUT STD_LOGIC);END dff1;ARCHITECTURE bhv OF dff1 ISSIGNALq1:STD_LOGIC;BEGIN PROCESS(clk,q1)BEGINIF CLKEVENT AND CLK=1 THEN q1=d;END IF;END PROCESS;q=q1;END bhv;,引用库,数据类型,内部节点,时钟条件,4.2 寄存器描述及其VHDL语言,4.VHDL实现引用库,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;,LIBRARY 设计库名称;USE 设计库.程序包名.ALL;,数据类型、函数等放在设计库中和程序包中。,因为使用了STD_LOGIC的数据类型,而该数据类型放置在设计库IEEE的STD_LOGIC_1164程序包中,所以在使用前需要先申明。,4.2 寄存器描述及其VHDL语言,4.VHDL实现数据类型,PORT(clk:IN STD_LOGIC;d:IN STD_LOGIC;q:OUT STD_LOGIC);,BIT的定义:TYPE BIT IS(0,1);,STD_LOGIC的定义:TYPE STD_LOGIC IS(U,X,0,1,Z,W,L,H,-),4.2 寄存器描述及其VHDL语言,4.VHDL实现信号定义(内部节点),SIGNALq1:STD_LOGIC;,不必定义端口模式(如IN、OUT)目的是为了设计更大的时序电路,q,q1,X1,PORT(clk:IN STD_LOGIC;d:IN STD_LOGIC;q:OUT STD_LOGIC);,q=q1;,4.2 寄存器描述及其VHDL语言,4.VHDL实现时钟表达式,IF clkEVENT AND clk=1,检测时钟信号的上升沿表示clk信号有变化,并且变化后为1,4.2 寄存器描述及其VHDL语言,4.VHDL实现存储功能的产生,不完整的条件语句实现存储功能元件如果是完整的条件语句,则只能构成逻辑电路,IF clkEVENT AND clk=1THEN q1=d;END IF;,4.2 寄存器描述及其VHDL语言,5.实现时序电路的不同描述,IF(clkEVENT)AND(clk=1)AND(clkLAST_VALUE=0),IF(clk=1)AND(clkLAST_VALUE=0),IF rising_edge(clk)-STD_LOGIC_1164定义,Wait until clk=1;,4.2 寄存器描述及其VHDL语言,6.同步时序电路和异步时序电路,移位寄存器,二进制计数器,只需一个时钟进程,需两个时钟进程,4.2 寄存器描述及其VHDL语言,6.同步时序电路和异步时序电路,PROCESS(clk)BEGIN*END PROCESS;PROCESS(q)BEGIN*END PROCESS;,4.3 1位二进制全加器的VHDL描述,1.半加器功能描述,全加器可由两个半加器和一个或门构成半加器是最简单的加法器,把2个1位二进制数相加,不考虑低位的进位,产生一个2位和,和的低位叫半加和,高位叫半加进位半加器由一个与门,一个或门和一个异或门构成,4.3 1位二进制全加器的VHDL描述,2.半加器真值表及电路图,co=a AND b,so=a XOR b,4.3 1位二进制全加器的VHDL描述,3.半加器VHDL描述方法布尔表达式,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY h_adder IS PORT(a,b:IN STD_LOGIC;co,so:OUT STD_LOGIC);END h_adder;ARCHITECTURE a OF h_adder ISBEGINco=a AND b;so=a XOR b;END a;,4.3 1位二进制全加器的VHDL描述,3.半加器VHDL描述方法真值表表达方式,4.3 1位二进制全加器的VHDL描述,4.全加器图形输入法,考虑低位进位的情况下,2个输入和,4.3 1位二进制全加器的VHDL描述,5.全加器VHDL描述或门,通过顶层调用底层元件,实现全加器,下面使用VHDL描述实现或门逻辑。,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY or2aIS PORT(a,b:IN STD_LOGIC;c:OUT STD_LOGIC);END or2a;ARCHITECTURE a OF or2aISBEGIN c=a or b;END a;,4.3 1位二进制全加器的VHDL描述,5.全加器VHDL描述顶层设计,通过顶层调用底层元件,实现全加器,d,e,f,4.3 1位二进制全加器的VHDL描述,6.新学内容总结,a.标准逻辑矢量数据类型,b.并置操作符,c.CASE语句,d.顶层描述及例化语句,4.3 1位二进制全加器的VHDL描述,6.新学内容总结标准逻辑矢量数据类型,STD_LOGIC_VECTOR 标准一维数组,数组中每一位的数据类型都是STD_LOGIC,STD_LOGIC 标准位类型,定义方法:A:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)B:OUT STD_LOGIC_VECTOR(1 TO 5),赋值方法:A=“01010101”;A(7 DOWNTO 4)=“0101”;,4.3 1位二进制全加器的VHDL描述,6.新学内容总结并置操作符,并置操作符&的作用:将操作数或者数组合并成新的数组,操作符 举例 功能,=,c=a AND b,赋值操作符,=,IF(s=0)THEN,比较操作符,&,abc=a&b,并置操作符,使用方法:0&1&a&d(1),定义信号,注释操作符,4.3 1位二进制全加器的VHDL描述,6.新学内容总结CASE语句,利用CASE语句可以直接表达电路的逻辑真值表,有效直观,功能表达语句 功能,c=a AND b,布尔表达方式,IF_THEN_ELSE,IF条件语句,WHEN _ELSE,WHEN条件语句,CASE语句,CASE语句,4.3 1位二进制全加器的VHDL描述,6.新学内容总结顶层设计,定义顶层设计端口,申明调用元件,定义内部信号,使用端口映射语句连接元件,4.3 1位二进制全加器的VHDL描述,6.新学内容总结COMPONENT,COMPONENT h_adder2 PORT(a,b:IN STD_LOGIC;co,so:OUT STD_LOGIC);END COMPONENT;,将现成的设计实体定义为一个元件,做出调用申明端口名表需要列出元件对外通信的各端口名,命名方式与实体中的PORT()一致(端口名可重新定义)。元件申明语句放置在ARCHITECTURE和BEGIN之间,COMPONENT 元件名 PORT(端口名表);END COMPONENT;,4.3 1位二进制全加器的VHDL描述,6.新学内容总结PORT MAP,u1:h_adder2 PORT MAP(a=ain,b=bin,co=d,so=e);u2:h_adder2 PORT MAP(a=e,b=cin,co=f,so=sum);u3:or2a PORT MAP(a=d,b=f,c=cout);,例化名相当于电子电路里的标号元件名即调用的元件实体的名称,相对于器件名称PORT MAP表示端口映射,端口到外部引脚或引线的连接关系两个例化元件之间不能直接连接=是连接符号,例化名:元件名 PORT MAP(端口名=X,端口名=Y,),4.3 1位二进制全加器的VHDL描述,7.思考 习题4-2,思考 习题4-3,思考 习题4-4,4.4 计数器设计,1.计数器的VHDL描述,BUFFER,INTEGER,q=q+1,4.4 计数器设计,1.计数器的VHDL描述BUFFER,BUFFER,IN,OUT,INOUT,元件,等效于在结构体BEGIN之前定义了一个信号,供反馈使用,4.4 计数器设计,1.计数器的VHDL描述INTEGER,INTEGER,BIT,STD_LOGIC,STD_LOGIC_VECTOR,INTEGER类型可用32位有符号的二进制数表示,取值范围:-2147483647+2147483647INTEGER必须有RANGE限定范围,否则无法综合VHDL规定加、减等算术符对应的操作数的数据类型只能是INTEGER型(除非重载算术操作符)NATURAL、POSITIVE是INTEGER的子类型在语句中INTEGER类型表达式不加,4.4 计数器设计,1.计数器的VHDL描述运算符重载,4.4 作业,1.端口模式有那些?各有什么区别?,2.习题4-2,4.5 4位2进制计数器设计,1.带进位计数器的VHDL描述,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY cnt4 IS PORT(clk:IN STD_LOGIC;q:BUFFER INTEGER RANGE 15 DOWNTO 0;c:OUT STD_LOGIC);END cnt4;ARCHITECTURE a OF cnt4 ISBEGINPROCESS(clk)BEGINIF(clkEVENT AND(clk=1)THEN IF(q 15)THEN q=q+1;c=0;ELSE q=0;c=1;END IF;END IF;END PROCESS;END a;,4.5 4位2进制计数器设计,2.4位构成8位计数器的VHDL描述,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY cnt2d IS PORT(clk:IN STD_LOGIC;qH:BUFFER INTEGER RANGE 9 DOWNTO 0;qL:BUFFER INTEGER RANGE 9 DOWNTO 0;cout:OUT STD_LOGIC);END cnt2d;ARCHITECTURE a OF cnt2d IS COMPONENT cnt4 PORT(clk:IN STD_LOGIC;q:BUFFER INTEGER RANGE 9 DOWNTO 0;c:OUT STD_LOGIC);END COMPONENT;SIGNAL s1:STD_LOGIC;BEGINu1:cnt4 PORT MAP(clk=clk,q=qL,c=s1);u2:cnt4 PORT MAP(clk=s1,q=qH,c=cout);END a;,4.5 作业,设计一位十进制计数器,即计数范围09要求:有进位输出,2.使用第一题中的一位十进制计数器,设计3位十进制计数器,即计数范围000999 要求:有进位输出采用顶层设计的方法,调用习题1的设计。,4.5 作业,设计一位十进制计数器,即技术范围09要求:有进位输出,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY cntten IS PORT(clk:IN STD_LOGIC;q:BUFFER INTEGER RANGE 9 DOWNTO 0;c:OUT STD_LOGIC);END cntten;ARCHITECTURE a OF cntten ISBEGINPROCESS(clk)BEGINIF(clkEVENT AND(clk=1)THEN IF(q 9)THEN q=q+1;c=0;ELSE q=0;c=1;END IF;END IF;END PROCESS;END a;,4.5 4位2进制计数器设计,2.使用第一题中的一位十进制计数器,设计3位十进制计数器,即技术范围000999 要求:有进位输出采用顶层设计的方法,调用习题1的设计。,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY cnt3ten IS PORT(clk:IN STD_LOGIC;qV:BUFFER INTEGER RANGE 9 DOWNTO 0;qH:BUFFER INTEGER RANGE 9 DOWNTO 0;qL:BUFFER INTEGER RANGE 9 DOWNTO 0;cout:OUT STD_LOGIC);END cnt3ten;ARCHITECTURE a OF cnt3ten IS COMPONENT cntten PORT(clk:IN STD_LOGIC;q:BUFFER INTEGER RANGE 9 DOWNTO 0;c:OUT STD_LOGIC);END COMPONENT;SIGNAL s1,s2:STD_LOGIC;BEGIN u1:cntten PORT MAP(clk=clk,q=qL,c=s1);u2:cntten PORT MAP(clk=s1,q=qH,c=s2);u3:cntten PORT MAP(clk=s2,q=qV,c=cout);END a;,