EDA技术实用教程:第四章《vhdl设计初步》课件

上传人:san****019 文档编号:16507348 上传时间:2020-10-04 格式:PPT 页数:76 大小:578.50KB
返回 下载 相关 举报
EDA技术实用教程:第四章《vhdl设计初步》课件_第1页
第1页 / 共76页
EDA技术实用教程:第四章《vhdl设计初步》课件_第2页
第2页 / 共76页
EDA技术实用教程:第四章《vhdl设计初步》课件_第3页
第3页 / 共76页
点击查看更多>>
资源描述
EDA技术实用教程,VHDL设计初步,第4章,Very high speed integrated Hardware Description Language (VHDL) 是IEEE、工业标准硬件描述语言 用语言的方式而非图形等方式描述硬件电路 容易修改 容易保存 特别适合于设计的电路有: 复杂组合逻辑电路,如: 译码器、编码器、加减法器、多路选择器、地址译码器. 状态机 等等.,是什么是VHDL?,VHDL 描述 输入端口 输出端口 电路的行为和功能 VHDL有过两个标准: IEEE Std 1076-1987 (called VHDL 1987) IEEE Std 1076-1993 (called VHDL 1993),VHDL的功能和标准,简单组合电路的VHDL描述,多路选择器,多路选择器的VHDL描述,2选1多路选择器,a,b,s,y,mux21,图 mux21a功能时序波形,多路选择器功能示意波形,【例】 ENTITY mux21a IS PORT( a, b : IN BIT ; s : IN BIT; y : OUT BIT ) ; END ENTITY mux21a ; ARCHITECTURE one OF mux21a IS BEGIN y = a WHEN s = 0 ELSE b ; END ARCHITECTURE one ;,实体,结构体,2选1多路选择器的VHDL描述,实体,实体(ENTITY),ENTITY mux21a IS PORT( a, b : IN BIT ; s : IN BIT; y : OUT BIT ) ; END ENTITY mux21a ; , 实体名, PORT语句和端口信号名, 端口类型,IN,OUT,INOUT,BUFFER, 数据类型:BIT,实体 相关VHDL语法,【例】 ENTITY e_name IS PORT ( p_name : port_m data_type; . p_namei : port_mi data_type ); END ENTITY e_name; 或: ENTITY e_name IS PORT ( p_name : port_m data_type; . p_namei : port_mi data_type ); END e_name;,实体表达,结构体(ARCHITECTURE), ARCHITECTURE one OF mux21a IS BEGIN y = a WHEN s = 0 ELSE b ; END ARCHITECTURE one ;,【例】 ARCHITECTURE arch_name OF e_name IS (说明语句) BEGIN (功能描述语句) END ARCHITECTURE arch_name ; 或: ARCHITECTURE arch_name OF e_name IS (说明语句) BEGIN (功能描述语句) END arch_name ;,结构体表达,信号传输(赋值)符号和数据比较符号,信号传输(赋值)符号: ,WHEN_ELSE条件信号赋值语句,赋值目标 = 表达式 WHEN 赋值条件 ELSE 表达式 WHEN 赋值条件 ELSE . 表达式 ;,y = a WHEN s = 0 ELSE b ;,【例】 ENTITY mux21a IS PORT ( a, b : IN BIT; s : IN BIT; y : OUT BIT ); END ENTITY mux21a; ARCHITECTURE one OF mux21a IS SIGNAL d,e : BIT; BEGIN d = a AND (NOT S) ; e = b AND s ; y = d OR e ; END ARCHITECTURE one ;,【例】 . . . ARCHITECTURE one OF mux21a IS BEGIN y = (a AND (NOT s) OR (b AND s) ; END ARCHITECTURE one;,2选1多路选择器的VHDL描述(其它),逻辑操作符,VHDL的逻辑操作符直接用文字来表示: 如: AND 与 OR 或 NOT 非 XOR 异或 ,【例】 ENTITY mux21a IS PORT ( a, b, s: IN BIT; y : OUT BIT ); END ENTITY mux21a; ARCHITECTURE one OF mux21a IS BEGIN PROCESS (a,b,s) BEGIN IF s = 0 THEN y = a ; ELSE y = b ; END IF; END PROCESS; END ARCHITECTURE one ;,2选1多路选择器的VHDL描述(其它),IF_THEN条件语句,IF s = 0 THEN y = a ; ELSE y = b ; END IF;,PROCESS进程语句,在下一节详细讲述,请课后预习,数据类型,信号赋值符,条件比较符,实体,结构体,端口定义,端口模式,逻辑操作符,IF条件语句,WHEN条件语句,VHDL设计的基本概念和语句小节,Graphic is what you draw is what you get “ tell me what hardware you want and I will give it to you” VHDL is what you write is what functional you get “ tell me how your circuit should behave and the VHDL compiler will give you the hardware that does the job” but the designer can not control how the circuit implement,原理图输入与 VHDL文本输入设计的区别,Easy to Modify It is more powerful than Graphic VHDL is a portable language because is device independent the same code can be applied to Device manufactured by Company A or Company B,Why using VHDL instead of Graphic,VHDL: “tell me how your circuit should behave and I will give you hardware that does the job” ABEL, PALASM, AHDL: “tell me what hardware you want and I will give it to you”,VHDL Synthesis vs. other HDLs Synthesis,寄存器描述及其VHDL语言现象,D触发器,【例】 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF1 IS PORT (CLK : IN STD_LOGIC ; D : IN STD_LOGIC ; Q : OUT STD_LOGIC ); END DFF1; ARCHITECTURE bhv OF DFF1 IS BEGIN PROCESS (CLK) BEGIN IF CLKEVENT AND CLK = 1 THEN Q = D ; END IF; END PROCESS ; END bhv;,D触发器,D触发器的VHDL描述,设计库(LIBRARY),格式: LIBRARY IEEE标准库: LIBRARY IEEE 默认加载的设计库 STD标准库 WORK工作库(当前设计),程序包的使用(USE),格式: LIBRARY ; USE .ALL; IEEE标准库中的STD_LOGIC_1164: 含STD_LOGIC及STD_LOGIC_VECTOR的定义 IEEE 1164,STD_LOGIC,BIT数据类型的定义: TYPE BIT IS (0,1); STD_LOGIC数据类型: (U,X,0,1,Z,W,L,H,-) 九值逻辑,STD_LOGIC所定义的9种数据的含义是: U表示未初始化的; X表示强未知的; 0表示强逻辑0; 1表示强逻辑1; Z表示高阻态; W 表示弱未知的; L表示弱逻辑0; H表示弱逻辑1; -表示忽略。,STD_LOGIC的综合器支持,对于STD_LOGIC类型,综合器只支持 X(或-),0,1,Z,上升沿检测,CLKEVENT AND CLK = 1 信号属性EVENT EVENT 函数 RISING_EDGE(CLK),比较用5种不同语句的D触发器VHDL程序,Entity test1 is port (clk, d : in bit; q : out bit); end test1; architecture body of test1 is signal q1 : bit ; begin process (clk) begin,if clk=1 AND clklast_value=0 then q1 = d; end if; end process; q = q1 ; end test1_body;,LIBRARY IEEE; USE IEEE.std_logic_1164.all; Entity test1 is port (clk, d : in bit; q : out bit); end test1; architecture body of test1 is begin,process (clk,d) begin if rising_edge(clk) then q = d; end process; end if; end test1_body;,Entity test1 is port (clk : in bit; d : in bit; q : out bit); end test1; architecture body of test1 is signal q1 : bit ; begin,process (clk) begin if (clk = 1) then q1 = d; end if; end process; q = q1 ; end body;,Entity test1 is port (clk : in bit; d : in bit; q : out bit); end test1; architecture body of test1 is begin,process begin wait until (clkevent and clk=1); q = d; end process; end body;,Entity test1 is port (clk, d : in bit; q : out bit); end test1; architecture body of test1 is signal q1 : bit ; begin process (clk) begin if clk=1 AND clklast_value=0 then q1 = d; end if; end process; q = q1 ; end test1_body;,LIBRARY IEEE; USE IEEE.std_logic_1164.all; Entity test1 is port (clk, d : in bit; q : out bit); end test1; architecture body of test1 is begin process (clk,d) begin if rising_edge(clk) then q = d; end if; end process; end test1_body;,They are all the same,DFF,Entity test1 is port (clk : in bit; d : in bit; q : out bit); end test1; architecture body of test1 is begin process begin wait until (clkevent and clk=1); q = d; end process; end body;,Entity test1 is port (clk : in bit; d : in bit; q : out bit); end test1; architecture body of test1 is signal q1 : bit ; begin process (clk) begin if (clk = 1) then q1 = d; end if; end process; q = q1 ; end body;,5种不同语句的D触发器VHDL程序,信号(SIGNAL),连线 wire 寄存器输出 register,进程(PROCESS),敏感信号 进程体 顺序语句 并行语句,How Many Registers?,ENTITY reg1 IS PORT ( d: in BIT; clk: in BIT; q: out BIT); END reg1; ARCHITECTURE reg1 OF reg1 IS SIGNAL a, b : BIT; BEGIN,PROCESS (clk) BEGIN IF clk=1 AND clkevent THEN a = d; b = a; q = b; END IF; END PROCESS; END reg1;,寄存器有多少个?,综合后示意:,【例】 ENTITY COMP_BAD IS PORT( a1 : IN BIT; b1 : IN BIT; q1 : OUT BIT ); END ; ARCHITECTURE one OF COMP_BAD IS BEGIN PROCESS (a1,b1) BEGIN IF a1 b1 THEN q1 = 1 ; ELSIF a1 b1 THEN q1 = 0 ;- 未提及当a1=b1时,q1作何操作 END IF; END PROCESS ; END ;,不完整条件语句与时序电路,图 例3-11的电路图,综合结果:,【例】 ENTITY COMP_GOOD IS PORT(a1 : IN BIT; b1 : IN BIT; q1 : OUT BIT ); END ; ARCHITECTURE one OF COMP_GOOD IS BEGIN PROCESS (a1,b1) BEGIN IF a1 b1 THEN q1 = 1 ; ELSE q1 = 0 ; END IF; END PROCESS ; END,图 例3-12的电路图,完整条件语句,【例】 . PROCESS (CLK) BEGIN IF CLKEVENT AND (CLK=1) AND (CLKLAST_VALUE=0) THEN Q = D ; -确保CLK的变化是一次上升沿的跳变 END IF; END PROCESS ;,【例】 . PROCESS (CLK) BEGIN IF CLK=1 AND CLKLAST_VALUE=0 -同例3-13 THEN Q = D ; END IF; END PROCESS ;,3.2.3 实现时序电路的VHDL不同表达方式,【例】 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF3 IS PORT (CLK : IN STD_LOGIC ; D : IN STD_LOGIC ; Q : OUT STD_LOGIC ); END ; ARCHITECTURE bhv OF DFF3 IS SIGNAL Q1 : STD_LOGIC; BEGIN PROCESS (CLK) BEGIN IF rising_edge(CLK) - CLK的数据类型必须是STD_LOGIC THEN Q1 = D ; END IF; Q = Q1 ; END PROCESS ; END ;,实现时序电路的VHDL不同表达方式,【例】 . PROCESS BEGIN wait until CLK = 1 ; -利用wait语句 Q = D ; END PROCESS;,【例】. PROCESS (CLK) BEGIN IF CLK = 1 THEN Q = D ; -利用进程的启动特性产生对CLK的边沿检测 END IF; END PROCESS ;,【例】. PROCESS (CLK,D) BEGIN IF CLK = 1 -电平触发型寄存器 THEN Q = D ; END IF; END PROCESS ;,实现时序电路的VHDL不同表达方式,图 边沿型触发器时序波形,图 电平触发型寄存器的时序波形,实现时序电路的VHDL不同表达方式,. ARCHITECTURE bhv OF MULTI_DFF IS SIGNAL Q1,Q2 : STD_LOGIC; BEGIN PRO1: PROCESS (CLK) BEGIN IF CLKEVENT AND CLK=1 THEN Q1 = NOT (Q2 OR A); END IF; END PROCESS ; PRO2:PROCESS (Q1) BEGIN IF Q1EVENT AND Q1=1 THEN Q2 = D; END IF; QQ = Q2 ; END PROCESS ;,图 例3-19综合的电路,异步时序电路设计,数据类型,数据对象,信号属性,时钟检测,VHDL库,程序包,时序电路,异步时序,VHDL设计基本概念和语言现象小节,含有层次结构的VHDL描述,以下通过一个全加器的设计流程,介绍含有层次结构的VHDL程序,其中包含两个重要的语句,元件调用声明语句和元件例化语句。,图 半加器h_adder电路图,图 全加器f_adder电路图,1位二进制全加器的VHDL设计,absoco 0000 0110 1010 1101,表4-1 半加器h_adder逻辑功能真值表,1. CASE语句,CASE语句的一般表式是:,CASE IS When = ; . ; ; When = ; . ; ; . END CASE ;,半加器描述和CASE语句,2. 标准逻辑矢量数据类型STD_LOGIC_VECTOR,3. 并置操作符 ,以下是一些并置操作示例:,SIGNAL a : STD_LOGIC_VECTOR (3 DOWNTO 0) ; SIGNAL d : STD_LOGIC_VECTOR (1 DOWNTO 0) ; . a = 10d(1)1 ; - 元素与元素并置,并置后的数组长度为4 . IF a d = 101011 THEN . - 在IF条件句中可以使用并置符,在使用STD_LOGIC_VECTOR中,必须注明其数组宽度,即位宽,如: B : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ; 或 SIGNAL A :STD_LOGIC_VECTOR(1 TO 4),半加器描述和CASE语句,【例】 LIBRARY IEEE ;-或门逻辑描述 USE IEEE.STD_LOGIC_1164.ALL; ENTITY or2a IS PORT (a, b :IN STD_LOGIC; c : OUT STD_LOGIC ); END ENTITY or2a; ARCHITECTURE one OF or2a IS BEGIN c = a OR b ; END ARCHITECTURE fu1;,【例】 LIBRARY IEEE; -半加器描述(1) USE IEEE.STD_LOGIC_1164.ALL; ENTITY adder IS PORT (a, b : IN STD_LOGIC; co, so : OUT STD_LOGIC); END ENTITY adder; ARCHITECTURE fh1 OF adder is BEGIN so = NOT(a XOR (NOT b) ; co = a AND b ; END ARCHITECTURE fh1;,半加器描述和CASE语句,【例】 LIBRARY IEEE; -半加器描述(2) USE IEEE.STD_LOGIC_1164.ALL; ENTITY h_adder IS PORT (a, b : IN STD_LOGIC; co, so : OUT STD_LOGIC); END ENTITY h_adder; ARCHITECTURE fh1 OF h_adder is SIGNAL abc : STD_LOGIC_VECTOR(1 DOWNTO 0) ; BEGIN abc so so so so NULL ; END CASE; END PROCESS; END ARCHITECTURE fh1 ;,【例】 . -半加器描述(3) SIGNAL abc,cso : STD_LOGIC_VECTOR(1 DOWNTO 0 ); BEGIN abc cso cso cso cso=10 ; END CASE; END PROCESS; END ARCHITECTURE fh1;,【例】 LIBRARY IEEE; -1位二进制全加器顶层设计描述 USE IEEE.STD_LOGIC_1164.ALL; ENTITY f_adder IS PORT (ain,bin,cin : IN STD_LOGIC; cout,sum : OUT STD_LOGIC ); END ENTITY f_adder; ARCHITECTURE fd1 OF f_adder IS COMPONENT h_adder PORT ( a,b : IN STD_LOGIC; co,so : OUT STD_LOGIC); END COMPONENT ; COMPONENT or2a PORT (a,b : IN STD_LOGIC; c : OUT STD_LOGIC); END COMPONENT; SIGNAL d,e,f : STD_LOGIC; BEGIN u1 : h_adder PORT MAP(a=ain,b=bin,co=d,so=e); u2 : h_adder PORT MAP(a=e, b=cin, co=f,so=sum); u3 : or2a PORT MAP(a=d, b=f, c=cout); END ARCHITECTURE fd1;,元件例化语句由两部分组成,第一部分是对一个现成的设计实体定义为一个元件,语句的功能是对待调用的元件作出调用声明,它的最简表达式如下所示: COMPONENT 元件名 IS PORT (端口名表) ; END COMPONENT 文件名 ;,元件例化语句的第二部分则是此元件与当前设计实体(顶层文件)中元件间及端口的连接说明。语句的表达式如下: 例化名 : 元件名 PORT MAP( 端口名 = 连接端口名,.);,全加器描述和例化语句,全加器描述,LIBRARY IEEE; -1位二进制全加器顶层设计描述 USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY adder IS PORT (ain,bin,cin : IN STD_LOGIC; cout,sum : OUT STD_LOGIC ); END ENTITY adder; ARCHITECTURE RTL OF adder IS SIGNAL ADDO : STD_LOGIC_VECTOR(1 DOWNTO 0); BEGIN ADDO= 0,计数器设计,【例3-20】 ENTITY CNT4 IS PORT ( CLK : IN BIT ; Q : BUFFER INTEGER RANGE 15 DOWNTO 0 ) ; END ; ARCHITECTURE bhv OF CNT4 IS BEGIN PROCESS (CLK) BEGIN IF CLKEVENT AND CLK = 1 THEN Q = Q + 1 ; END IF; END PROCESS ; END bhv;,4位加法计数器,注意:表面上BUFFER具有双向端口INOUT的功能,但实际上其输入功能是不完整的,它只能将自己输出的信号再反馈回来,并不含有IN的功能。 建议:不使用Buffer,整数类型,整数常量的书写方式示例如下: 1十进制整数 0十进制整数 35十进制整数 10E3十进制整数,等于十进制整数1000 16#D9#十六进制整数,等于十六进制整数D9H 8#720#八进制整数,等于八进制整数720O 2#11010010#二进制整数,等于二进制整数11010010,自然数类型NATURAL 正整数类型POSITIVE 与BIT、BIT_VECTOR一样,数据类型INTEGER、NATURAL和POSITIVE都定义在VHDL标准程序包STANDARD中。由于是默认打开的,所以在例3-20中,没有以显式打开STD库和程序包STANDARD。,计数器设计的另一种表述,【例3-21】 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; USE IEEE.STD_LOGIC_UNSIGNED.ALL ; ENTITY CNT4 IS PORT ( CLK : IN STD_LOGIC ; Q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ) ; END ; ARCHITECTURE bhv OF CNT4 IS SIGNAL Q1 : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN PROCESS (CLK) BEGIN IF CLKEVENT AND CLK = 1 THEN Q1 = Q1 + 1 ; END IF; END PROCESS ; Q = Q1 ; END bhv;,图3-12 4位加法计数器RTL电路(Synplify综合),4位加法计数器工作时序,一般加法计数器设计,【】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CNT10 IS PORT (CLK,RST,EN : IN STD_LOGIC; CQ : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); COUT : OUT STD_LOGIC ); END CNT10; ARCHITECTURE behav OF CNT10 IS BEGIN PROCESS(CLK, RST, EN) VARIABLE CQI : STD_LOGIC_VECTOR(3 DOWNTO 0);,BEGIN IF RST = 1 THEN CQI := (OTHERS =0) ; -计数器异步复位 ELSIF CLKEVENT AND CLK=1 THEN -检测时钟上升沿 IF EN = 1 THEN -检测是否允许计数(同步使能) IF CQI 0); -大于9,计数值清零 END IF; END IF; END IF; IF CQI = 9 THEN COUT = 1; -计数大于9,输出进位信号 ELSE COUT = 0; END IF; CQ = CQI; -将计数值向端口输出 END PROCESS; END behav;,相关语法,1. 变量 变量VARIABLE与信号SIGNAL一样,都属于数据对象,在此程序中的功能与信号相似。但变量的赋值符号与信号的赋值符号是不同的,信号的赋值符号是“=”,而变量的赋值符号是“:= ”。例如a为变量,对其赋值可以写为:a:= 1。,2. 省略赋值操作符(OTHERS=X) CQI := 0000 CQI:=(OTHERS=0) SIGNAL d1 : STD_LOGIC_VECTOR(4 DOWNTO 0); VARIABLE a1 : STD_LOGIC_VECTOR(15 DOWNTO 0); . d1 0); a1 := (OTHERS=0) ;,d2 1,4=1,OTHERS=0) d1 e(3),3=e(5), OTHERS=e(1) );,含并行置位的移位寄存器设计,【例3-23】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY SHFRT IS - 8位右移寄存器 PORT ( CLK,LOAD : IN STD_LOGIC; DIN : IN STD_LOGIC_VECTOR(7 DOWNTO 0); QB : OUT STD_LOGIC ); END SHFRT; ARCHITECTURE behav OF SHFRT IS BEGIN,PROCESS (CLK, LOAD) VARIABLE REG8 : STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN IF CLKEVENT AND CLK = 1 THEN IF LOAD = 1 THEN REG8 := DIN; -由(LOAD=1)装载新数据 ELSE REG8(6 DOWNTO 0) := REG8(7 DOWNTO 1); END IF; END IF; QB = REG8(0); - 输出最低位 END PROCESS; END behav;,自学第5章 预习第6章,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


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

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


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