《vhdl基本语素语法语句杨.pptx》由会员分享,可在线阅读,更多相关《vhdl基本语素语法语句杨.pptx(110页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity sswr isport(d:in std_logic_vector(3 downto 0);y:out std_logic);end sswr;实例实例1 某数字电路的某数字电路的VHDL程序代程序代码如下,请分析其逻辑功能码如下,请分析其逻辑功能第1页/共110页architecture behave of sswr isbegin y=0 and d=5 and d10 el
2、se Z;end behave;第2页/共110页library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity FBI isport(a,b,ci:in std_logic;y,cout:out std_logic);end FBI;实例实例2 某数字电路的某数字电路的VHDL程序代程序代码如下,请分析其逻辑功能码如下,请分析其逻辑功能第3页/共110页architecture bh2 of FBI isbegin y=a xor b xo
3、r ci;cout=(a and b)or(a and ci)or(b and ci);end bh2;第4页/共110页二、VHDL硬件描述语言基础数字电路与逻辑设计5-3-3 基于基于VHDL的组合逻辑设计的组合逻辑设计第7页/共110页VHDL硬件描述语言nVHDL概述nVHDL数据类型与数据对象nVHDL命令语句第8页/共110页一、VHDLVHDL概述 VHDL是超高速集成电路硬件描述语言 (Very High speed Integrated Circuit Hardware Description Language)的英文缩写。语法和风格:(1 1)类似与现代高级编程语言,如C语
4、言。(2)VHDL描述的是硬件,它包含许多硬件特有的结构。第9页/共110页u VHDL与电路图设计电路的方式不同:和电路图设计方式相比:(1)易于修改;(2)设计能力更强;(3)VHDL语言很方便:独立于器件设计;相同的程序代码可以用于不同厂家生产的器件。一、VHDL概述第12页/共110页u VHDL语言的程序结构 LIBRARY(USE)-库 PACKAGE -程序包集合 ENTITY -实体 ARCHITECTURE -结构体 CONFIGURATION-配置语句一、VHDL概述第13页/共110页Library(库)是用于存放预先编译好的Package(程序包)。Package(程序
5、包)中定义了基本的常数,数据类型,元件及子程序等。作用:声明在实体和结构体定义中将用到的 数据类型、元件或子程序等。声明格式:Library 库名;Use 库名.PACKAGE名.All;一、VHDL概述(1)Library和和Package部分部分第15页/共110页 作作用用:ENTITY(实实体体)用用于于定定义义电电路路的的外观,即外观,即I/O端口的类型和数量。端口的类型和数量。定义格式:定义格式:Entity 实体名 is Port(a:in bit;b:in bit;c:out bit);End 实体名;(2)ENTITY定义区一、VHDL概述端口名数据类型端口模式第16页/共1
6、10页端口模式(MODE)有以下几种类型:IN;OUT;INOUT;BUFFER 端口模式可用下图说明:(黑框代表一个设计或模块)IN OUT BUFFER INOUT一、VHDL概述第17页/共110页(3)ARCHITECTURE定义区实体的实现。即说明电路执行什么动作或实现功能。定义格式:Architecture 结构体名 of 实体名 is 声明语句;(内部信号、变量、常数,元件,子程序声明)Begin并行描述语句;End 结构体名;一、VHDL概述第18页/共110页u 标识符的定义原则:(1)标识符由字母、数字和下划线组成,a7_;(2)标识符不区分大小写,ab和AB是一样的;(3
7、)第一个字符必须是字母,即a666;(4)不允许有两个连续的下划线,a_b错误;(5)末尾不能是下划线,mname_错误;(6)标识符不能和关键字相同,如Entity,is等。一、VHDL概述第21页/共110页二、VHDL数据类型与数据对象在VHDL程序中,我们经常会遇到这样的语句:Port(X:in std_logic);Signal A :std_logic;Variable B :std_logic_vector(7 downto 0);Constant C :integer;数据对象类型数据类型数据对象名第26页/共110页u VHDL语言中的基本数据类型语言中的基本数据类型逻辑类型
8、逻辑类型数值类型数值类型布尔代数布尔代数(Boolean)位位(Bit)标准逻辑标准逻辑(Std_Logic)整数整数(Integer)实数实数(Real)二、VHDL数据类型与数据对象第27页/共110页n 逻辑数据类型(1)布尔代数(Boolean)型;标识关键字:BOOLEAN,取值空间:FALSE,TRUE;(2)位(Bit);标识关键字:BIT,取值空间:0,1 示例:Port(A:in bit);Signal B:bit;二、VHDL数据类型与数据对象第28页/共110页标识关键字:Std_Logic;取值空间:X,-Forcing Unknown 0,-Forcing 0 1,-
9、Forcing 1 Z,-Hign Impedance W,-Weak Unknown L,-Weak 0 H,-Weak 1 U,-Undefined -,-Dont Care;二、VHDL数据类型与数据对象 标准逻辑类型(9值逻辑)对数字逻辑电路的逻辑特性描述更加完整,真实,因此在VHDL程序中,对逻辑信号的定义通常采用标准逻辑类型(3)标准逻辑(Std_logic);第29页/共110页l 逻辑序列位序列位序列(Bit_Vector)标准逻辑序列标准逻辑序列(Std_Logic_Vector)二、VHDL数据类型与数据对象第30页/共110页Port(A:in Std_Logic_Vec
10、tor(7 downto 0);Port(B:in Bit_Vector(0 to 3);Signal C:Std_Logic_Vector(3 downto 0);序列范围的声明方式:序列范围的声明方式:To,Downtol 序列的声明序列的声明二、VHDL数据类型与数据对象多位宽度的逻辑变量多位宽度的逻辑变量用序列表示。用序列表示。序列的含义:声明一个多位宽度的逻辑变量,序列的含义:声明一个多位宽度的逻辑变量,逻辑变量的最高位与声明时的最左序号对应,逻辑变量的最高位与声明时的最左序号对应,以此类推,定义并命名一个多位逻辑变量。以此类推,定义并命名一个多位逻辑变量。第31页/共110页l 序
11、列的分解与合成Port(A:IN Std_Logic_Vector(3 downto 0);B:IN Std_Logic_Vector(1 downto 0);Signal C:Std_Logic_Vector(0 to 1);Signal D:Std_Logic_Vector(0 to 3);将A逻辑变量的中间两路信号与C相连C=A(2 downto 1);将A的最高一路、B的全部位和常量1与D相连D=A(3)&B&1;二、VHDL数据类型与数据对象序列赋值原则:左右宽度相等。序列赋值原则:左右宽度相等。第32页/共110页n 数值类型(1)整数 声明标识字:Integer,取值空间:-23
12、1 231-1示例Port(A:in Integer);Port(C:in Integer Range 0 to 7);(限定整数取值范围的方法)Signal B:Integer;二、VHDL数据类型与数据对象第33页/共110页l 无符号数 Unsigned与标准逻辑序列相似,声明时必须指明其位数。Port(A:in Unsigned(7 downto 0);Signal B:Unsigned(3 downto 0);注意:必须使用downto形式。Port(A:in std_logic_vector(7 downto 0);Unsigned 与std_logic_vector 的联系与区别
13、二、VHDL数据类型与数据对象第34页/共110页l VHDL中的运算符二、VHDL数据类型与数据对象 算术运算符:+加-减*乘除*乘方mod 求模 rem 求余 abs求绝对值 逻辑运算:and 逻辑与or逻辑或nand与非nor 或非xor 异或xnor同或not 逻辑非第36页/共110页关系运算符:=等于/=不等于小于大于=大于或等于注:其中=操作符也用于表示信号的赋值操作。&连接符,将两个数据对象或矢量连接成维数更大的矢量,它可给代码书写带来方便。例如:vabc=a&b&c;如果a=1,b=0,c=1,则 vabc=“101”。二、VHDL数据类型与数据对象第37页/共110页u 数
14、据对象常常 量量信信 号号变变 量量(Data Objects)二、VHDL数据类型与数据对象第43页/共110页(2)信号定义格式I.(端口)信号Port(端口信号名称:数据类型);例如:Port(A:in std_logic);II.内部信号Signal 信号名称:数据类型:=初始值;例如:Signal B:std_logic;二、VHDL数据类型与数据对象第47页/共110页l“信号信号”数据对象的物理意义数据对象的物理意义 信号代表电路元件的端口和内部的物理连线信号代表电路元件的端口和内部的物理连线,因此信号的赋值有一定的延迟时间因此信号的赋值有一定的延迟时间.端口信号代表电路的输入/
15、输出(在实体中说明);内部信号代表电路中间信号或中间连接线路,其在元件之间起互连作用(在结构体中说明和使用)。l信号赋值的语法格式为:信号赋值的语法格式为:信号名=表达式;例如:【Signal S1:Std_logic_vector(3 Downto 0);】S1=“0000”;第48页/共110页三、VHDL命令语句并列语句并列语句顺序语句顺序语句VHDL命令语句命令语句第56页/共110页并列语句(1)直接赋值语句:=赋值运算符(2)条件赋值语句:When-Else(3)选择赋值语句:With-Select-When(4)Process(进程)语句(5)Block(块)语句(6)函数调用语
16、句(后面章节讲)(7)Component(元件)例化语句(8)For-Generate语句第58页/共110页直接赋值语句直接赋值语句的格式:Signal_name=expression;如:Signal A,B:std_logic_vector(7 downto 0);A=”00000000”;B=”10000000”;我们也可以这样赋值:A0);结果信号A的每一位的值都为0。B0);信号对象的位数很多时,采用others来赋值很方便。第59页/共110页When-Else条件赋值语句语法格式为:Signal_name=expression1 When logic_expression1 E
17、lse expression2 When logic_expression2 Else expression3;例如:f =1 when(x1=x2)else 0;第61页/共110页Entity and2 is Port(a:in bit;b:in bit;c:out bit);End and2;Architecture Na of and2 is Begin c=0 when a=0 and b=0 else 0 when a=1 and b=0 else 0 when a=0 and b=1 else 1;End Na;第62页/共110页With-Select-When选择式赋值Wit
18、h expression SelectSignal_name=expression1 When constant_value1,expression2 When constant_value2,expression3 When constant_value3;第63页/共110页Entity example is Port(x,y:in std_logic;z :out std_logic_vector(1 downto 0);End example;Architecture a of example ISsignal tmp:std_logic_vector(1 downto 0);Begi
19、ntmp=x&y;With tmp Selectz=1 when“01”,-注意结束为“,”不是“;”1 when 10,0 when others;End a;With-Select-When选择式赋值第64页/共110页顺序语句(1)顺序语句每一条语句的执行都是顺序进行的。如同高级编程语言中的命令执行方式,一次一条命令,按书写顺序由上而下执行。(2)顺序语句只能出现在进程和子程序内部。(3)由于顺序语句的次序很重要,因此,顺序语句要与并行语句分割开,这可以通过Process语句来实现。Process语句出现在结构体中,它将其内部的语句进行封装。顺序语句有三个特点:a.所有语句的执行是顺序进
20、行的;b.每条语句的执行和其所在的位置有关;c.顺序语句的输出不仅依赖于输入,而且还受位置的影响。第65页/共110页顺序语句(1)Process语句(2)If-Else语句(3)Case-When语句(4)Null语句(5)For-Loop语句(6)Wait until语句(7)变量赋值语句(8)Procedure(过程)调用语句 第66页/共110页并列语句语句的顺序不影响代码的含义。例如:Whenelse;WithSelect;顺序语句语句的顺序可能影响代码的含义。例如:ifelse;case语句;因此,为了在代码段中区分顺序语句,因此,为了在代码段中区分顺序语句,VHDLVHDL规定顺
21、序语句一定要放在规定顺序语句一定要放在ProcessProcess语句内部;语句内部;第67页/共110页进程语句ProcessProcess Process 语句格式语句格式Process-label:Process(Sensitivity list)Variable declarations -变量声明Beginif statementscase statementsProcedure调用语句 wait until statementvariable assignment statementsEnd Process;第68页/共110页entity abc is port(w0,w1,s:
22、in std_logic;f:out std_logic);end abc;architecture bh of abc is begin proc1:process(w0,w1,s)begin f=w0;-语句A if s=1 then f=w1;end if;-语句B end process;end bh;第69页/共110页(1)一个结构体当中可以有多个Process 语句,不同Process 语句是同时起作用的并列语句。(2)Process内的语句却是按顺序“执行”(被编译器解释)的顺序语句。(3)多进程之间的信息通过信号对象来传递。进程语句Process特点第70页/共110页进程语
23、句Process的语义敏感表 每当任何信号的取值发生变化时,进程就会有效。只要进程有效:进程中的语句就会顺序执行。在进程内部所有语句执行完毕之前,进程内部的信号赋值对于进程外部都不可见。如果对相同信号进行了多次赋值,那么只有最后一次赋值在进程外部可见。第71页/共110页Process 模型-基本形式Process()beginIf-elseEnd process;Process()beginCase-whenEnd process;第73页/共110页条件语句IF-ELSEIf expression1 Then statement1;statement;Else statement2;sta
24、tement;End if;第74页/共110页If-else语句 选择分支语句:从多个条件中选择一个满足条件的子句执行;如果条件都不满足则无操作;条件的排列方式有两种基本形式:1.并列;2.嵌套(分层);每个if-else语句都有明确的语句控制域:控制域以“if”开始,以“end if”结束。第75页/共110页Ifelse语句块常用样式Ifthen 子句1 End if;Ifthen 子句1 else 子句2 End if;Ifthen 子句1elsif.then 子句2 elsif.then 子句3 End if;Ifthen 子句1 elsif.then 子句2 elsif.then
25、子句3 else 子句4 End if;第76页/共110页嵌套if-else if(clkevent and clk=1)then if(up_down=0)then if(q9)then q=q+1;else q=0000;end if;elsif(up_down=1)then _ end if;end if;第77页/共110页ARCHITECTURE behavior OF mux4 IS BEGIN process(i0,i1,i2,i3,sel)beginif(sel=00)then q=i0;elsif(sel=01)then q=i1;elsif(sel=10)then q=i
26、2;elsif(sel=11)then q=i3;else q 子句1;when 值2=子句2;when others=子句3;End case;选择分支语句:根据选择信号的值从多个子句中选择一个子句执行;第79页/共110页ARCHITECTURE behavior OF mux4 IS BEGIN process(i0,i1,i2,i3,sel)begincase sel is when 00=q q q q q端口信号;电路的内部电路节点=内部信号;逻辑关系=代码的含义;代码的两种代码的两种模型模型并列模型并列模型进程模型进程模型组合电路组合电路组合电路组合电路时序电路时序电路直接赋值语
27、句,when-else,with-select直接赋值语句,if-else,case-when第86页/共110页二、常用时序逻辑电路设计二、常用时序逻辑电路设计(1)触发器设计(D、JK)(2)计数器设计(分频器)(3)移位寄存器设计(4)状态机设计:序列信号发生器及检测器 第87页/共110页状态机示例序列信号发生器序列信号:110序列发生器CLKZ第88页/共110页ARCHITECTURE a OF mealy IS TYPE STATE_TYPE IS(s0,s1,s2);SIGNAL state:STATE_TYPE;BEGIN第89页/共110页PROCESS(clk)BEGIN
28、 If(clkEVENT AND clk=1)then CASE state IS WHEN s0=z=1;state z=1;state z=0 state state IF din=1 THEN state=s1;else state IF din=1 THEN state=s2;else state IF din=0 THEN state=s0;else statestate=s0;END CASE;End if;END PROCESS;z=1 when(state=s2 and din=0)else 0;-输出不仅与状态有关,而且和输入有关。END a;MealyMealy型型-VHD
29、L-VHDL代码转换代码转换第97页/共110页I.Mealy型MealyMealy型型-VHDL-VHDL代码转换代码转换标准形式标准形式P0:PROCESS(clk)BEGIN IF clkevent and clk=1 THEN current_state IF in1=1 THEN excitation IF in1=0 THEN excitation IF in1=1 THEN excitation IF in1=0 THEN excitation IF in1=1 THEN y IF in1=0 THEN y IF in1=1 THEN y IF in1=0 THEN y y y
30、y y=1;END CASE;END PROCESS p2;MooreMoore型型-VHDL-VHDL代码转换代码转换标准形式标准形式第100页/共110页Mealy型-标准形式程序代码entity Mealy_S is port(d,clk:in std_logic;y:out std_logic);end Mealy_S;第101页/共110页architecture bh of Mealy_S istype StateTTT is(s0,s1,s2);signal current_state,exitation:StateTTT;beginp0:process(clk)beginif(
31、clkevent and clk=1)thencurrent_state if(d=0)then exitation=s0;else exitation if(d=0)then exitation=s0;else exitation if(d=0)then exitation=s0;else exitation exitation if(d=0)then y=1;else y y=0;end case;end process p2;-y=1 when current_state=s2 and d=0 else 0;end bh;第104页/共110页判断进程语句组合 OR 时序Process(
32、)BeginIf(clkevent and clk=1)thenEnd if;End process;内部是否有上升沿判断第105页/共110页序列信号:110序列检测器CLKZxRst状态机自启动:RST复位控制第106页/共110页LIBRARY ieee;USE ieee.std_logic_1164.ALL;ENTITY sqs ISPORT(Rst,x,clk:in Std_logic;z:out Std_logic);END sqs;第107页/共110页ARCHITECTURE a OF mealy IS TYPE STATE_TYPE IS(s0,s1,s2);SIGNAL s
33、tate:STATE_TYPE;BEGIN第108页/共110页PROCESS(rst,clk)BEGINIf(Rst=1)then state IF din=1 THEN state=s1;else state IF din=1 THEN state=s2;else state IF din=0 THEN state=s0;else statestate=s0;END CASE;End if;END PROCESS;z=1 when(state=s2 and din=0)else 0;-输出不仅与状态有关,而且和输入有关。END a;第109页/共110页谢谢您的观看!第110页/共110页