EDA技术及应用VHDL设计初步.pptx
教学目的通过简单、完整而典型的VHDL设计示例,初步了解用VHDL表达和设计电路的方法。第1页/共57页4.1 多路选择器的VHDL描述1.2选1多路选择器的示意图和真值表absyax0axb1babys01当s=0时,y=a当s=1时,y=b第2页/共57页4.1 多路选择器的VHDL描述2.2选1多路选择器实现原理图形输入法001y=a0a110y=bb0第3页/共57页4.1 多路选择器的VHDL描述2.2选1多路选择器实现VHDL文本输入法1实体结构体实体名称端口名称流动方向数据类型结构体名功能描述第4页/共57页4.1 多路选择器的VHDL描述2.2选1多路选择器实现VHDL文本输入法2实体结构体第5页/共57页4.1 多路选择器的VHDL描述2.2选1多路选择器实现VHDL文本输入法3实体结构体第6页/共57页4.1 多路选择器的VHDL描述3.相关语句结构和语法实体表达结构ENTITY、IS、PORT、END都是描述实体的关键词,不分大写小写,但是为了便于阅读,一般在设计中将关键词使用大写,自定义使用小写。第7页/共57页4.1 多路选择器的VHDL描述3.相关语句结构和语法实体名称实体名表达的是该设计电路的器件名,通常根据相应电路的功能来确定。不能用数字或中文、不能与工具库中已定义的元件名、不能数字开头。第8页/共57页4.1 多路选择器的VHDL描述3.相关语句结构和语法实体名称举例mux4174LS04 and2adder4bnot4输入与门第9页/共57页4.1 多路选择器的VHDL描述3.相关语句结构和语法端口语句和名称端口以PORT();来引导端口模式有:IN、OUT、INOUT、BUFFER数据类型有:BOOLEAN、BIT、INTEGER、CHAR型等第10页/共57页4.1 多路选择器的VHDL描述3.相关语句结构和语法结构体表达结构ARCHITECTURE、OF、IS、BEGIN、END都是描述结构体的关键词。功能描述语句:并行语句,顺序语句并行语句:WHEN_ELSE,逻辑操作赋值顺序语句:IF_THEN_ELSE功能描述语句第11页/共57页4.1 多路选择器的VHDL描述3.相关语句结构和语法文件名称使用VHDL语句编写:后缀是.vhd使用Verilog HDL语句编写:后缀是.v使用原理图输入设计:后缀是.gdf文件名称建议和实体名称相同第12页/共57页4.1 多路选择器的VHDL描述4.思考y=ab+c_思考1:画出真值表a b c yxx 1 10 x 0 01 b 0 b_第13页/共57页4.1 多路选择器的VHDL描述4.思考y=ab+c_思考2:使用原理图方式实现上式功能第14页/共57页4.1 多路选择器的VHDL描述4.思考y=ab+c_思考3:使用VHDL实现上式功能第15页/共57页4.1 多路选择器的VHDL描述5.赋值符号Y=(a AND(NOT s)or(b AND s)赋值符号第16页/共57页4.1 多路选择器的VHDL描述6.各种表达式的比较-布尔逻辑表达式y=(a AND(NOT s)OR(b AND s)第17页/共57页4.1 多路选择器的VHDL描述6.各种表达式的比较-条件赋值表达式y=a WHEN s1=0 ELSE b;赋值目标=表达式 WHEN 赋值条件 ELSE 表达式 WHEN 赋值条件 ELSE 表达式 WHEN 赋值条件 ELSE 表达式;第18页/共57页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;第19页/共57页4.1 多路选择器的VHDL描述8.小结4.1 节中主要通过多路选择器的实现过程,学习了VHDL描述的基本语言结构,以及组合逻辑电路的功能描述方法布尔逻辑表达式WHEN_ELSE条件表达式IF_THEN_ELSE表达式第20页/共57页4.2 寄存器描述及其VHDL语言1.教学目的通过D触发器的VHDL实现过程,学习时序电路的VHDL描述方法。第21页/共57页4.2 寄存器描述及其VHDL语言2.D触发器的功能描述当CP=0时,触发器不工作,处于维持状态。当CP=1时,它的功能如下:当D=0时,次态=0,当D=1时,次态=1。第22页/共57页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 ISSIGNAL q1:STD_LOGIC;BEGIN PROCESS(clk,q1)BEGINIF CLKEVENT AND CLK=1 THEN q1=d;END IF;END PROCESS;q=q1;END bhv;引用库数据类型内部节点时钟条件第23页/共57页4.2 寄存器描述及其VHDL语言4.VHDL实现引用库LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;LIBRARY 设计库名称;USE 设计库.程序包名.ALL;数据类型、函数等放在设计库中和程序包中。因为使用了STD_LOGIC的数据类型,而该数据类型放置在设计库IEEE的STD_LOGIC_1164程序包中,所以在使用前需要先申明。第24页/共57页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,-)第25页/共57页4.2 寄存器描述及其VHDL语言4.VHDL实现信号定义(内部节点)SIGNALq1:STD_LOGIC;不必定义端口模式(如IN、OUT)目的是为了设计更大的时序电路qq1X1PORT(clk:IN STD_LOGIC;d:IN STD_LOGIC;q:OUT STD_LOGIC);q=q1;第26页/共57页4.2 寄存器描述及其VHDL语言4.VHDL实现时钟表达式IF clkEVENT AND clk=1检测时钟信号的上升沿表示clk信号有变化,并且变化后为1第27页/共57页4.2 寄存器描述及其VHDL语言4.VHDL实现存储功能的产生不完整的条件语句实现存储功能元件如果是完整的条件语句,则只能构成逻辑电路IF clkEVENT AND clk=1THEN q1=d;END IF;第28页/共57页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;第29页/共57页4.2 寄存器描述及其VHDL语言6.同步时序电路和异步时序电路移位寄存器二进制计数器只需一个时钟进程需两个时钟进程第30页/共57页4.2 寄存器描述及其VHDL语言6.同步时序电路和异步时序电路PROCESS(clk)BEGIN*END PROCESS;PROCESS(q)BEGIN*END PROCESS;第31页/共57页4.3 1位二进制全加器的VHDL描述1.半加器功能描述全加器可由两个半加器和一个或门构成半加器是最简单的加法器,把2个1位二进制数相加,不考虑低位的进位,产生一个2位和,和的低位叫半加和,高位叫半加进位半加器由一个与门,一个或门和一个异或门构成第32页/共57页4.3 1位二进制全加器的VHDL描述2.半加器真值表及电路图abco so0000010110011110co=a AND bso=a XOR b第33页/共57页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;第34页/共57页4.3 1位二进制全加器的VHDL描述3.半加器VHDL描述方法真值表表达方式abco so0000010110011110第35页/共57页4.3 1位二进制全加器的VHDL描述4.全加器图形输入法考虑低位进位的情况下,2个输入和第36页/共57页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;第37页/共57页4.3 1位二进制全加器的VHDL描述5.全加器VHDL描述顶层设计通过顶层调用底层元件,实现全加器def第38页/共57页4.3 1位二进制全加器的VHDL描述6.新学内容总结a.标准逻辑矢量数据类型b.并置操作符c.CASE语句d.顶层描述及例化语句第39页/共57页4.3 1位二进制全加器的VHDL描述6.新学内容总结标准逻辑矢量数据类型STD_LOGIC_VECTOR 标准一维数组,数组中每一位的数据类型都是STD_LOGICSTD_LOGIC 标准位类型定义方法:A:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)B:OUT STD_LOGIC_VECTOR(1 TO 5)赋值方法:A=“01010101”;A(7 DOWNTO 4)=“0101”;第40页/共57页4.3 1位二进制全加器的VHDL描述6.新学内容总结并置操作符并置操作符&的作用:将操作数或者数组合并成新的数组操作符 举例 功能=c,IF(s=0)THEN比较操作符&abc=a&b并置操作符 使用方法:0&1&a&d(1)定义信号注释操作符 第41页/共57页4.3 1位二进制全加器的VHDL描述6.新学内容总结CASE语句利用CASE语句可以直接表达电路的逻辑真值表,有效直观功能表达语句 功能cain,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);1.例化名相当于电子电路里的标号2.元件名即调用的元件实体的名称,相对于器件名称3.PORT MAP表示端口映射,端口到外部引脚或引线的连接关系4.两个例化元件之间不能直接连接5.=是连接符号例化名:元件名 PORT MAP(端口名=X,端口名=Y,)第45页/共57页4.3 1位二进制全加器的VHDL描述7.思考 习题4-2 思考 习题4-3 思考 习题4-4第46页/共57页4.4 计数器设计1.计数器的VHDL描述BUFFERINTEGERq=q+1第47页/共57页4.4 计数器设计1.计数器的VHDL描述BUFFERBUFFERINOUTINOUT元件等效于在结构体BEGIN之前定义了一个信号,供反馈使用第48页/共57页4.4 计数器设计1.计数器的VHDL描述INTEGERINTEGERBITSTD_LOGICSTD_LOGIC_VECTOR1.INTEGER类型可用32位有符号的二进制数表示,取值范围:-2147483647+21474836472.INTEGER必须有RANGE限定范围,否则无法综合3.VHDL规定加、减等算术符对应的操作数的数据类型只能是INTEGER型(除非重载算术操作符)4.NATURAL、POSITIVE是INTEGER的子类型5.在语句中INTEGER类型表达式不加 第49页/共57页4.4 计数器设计1.计数器的VHDL描述运算符重载第50页/共57页4.4 作业1.端口模式有那些?各有什么区别?2.习题4-2第51页/共57页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 clk,q=qL,c=s1);u2:cnt4 PORT MAP(clk=s1,q=qH,c=cout);END a;第53页/共57页4.5 作业1.设计一位十进制计数器,即计数范围09要求:有进位输出2.使用第一题中的一位十进制计数器,设计3位十进制计数器,即计数范围000999 要求:有进位输出采用顶层设计的方法,调用习题1的设计。第54页/共57页4.5 作业1.设计一位十进制计数器,即技术范围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 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;第56页/共57页感谢您的欣赏!第57页/共57页