《vhdl基本语素、语法、语句(杨).ppt》由会员分享,可在线阅读,更多相关《vhdl基本语素、语法、语句(杨).ppt(111页珍藏版)》请在三一文库上搜索。
1、数字电路与逻辑设计,一、基于VHDL的组合逻辑分析,数字电路与逻辑设计,5-3-3 基于VHDL的组合逻辑设计,library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity sswr is port(d:in std_logic_vector(3 downto 0); y:out std_logic); end sswr;,实例1 某数字电路的VHDL程序代码如下,请分析其逻辑功能,architecture behave of ss
2、wr is begin y =0 and d=5 and d10 else Z; end behave;,library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity FBI is port(a,b,ci:in std_logic; y,cout:out std_logic); end FBI ;,实例2 某数字电路的VHDL程序代码如下,请分析其逻辑功能,architecture bh2 of FBI is begin y = a
3、 xor b xor ci; cout = (a and b) or (a and ci) or (b and ci); end bh2;,architecture bh1 of full_bit_adder is begin y = (not a)and (not b)and ci) or (not a)and (b) and (not ci) or (a)and (not b)and(not ci) or (a) and (b)and(ci); cout = (b and ci) or (a and ci) or (a and b); end bh1;,architecture bh2 o
4、f full_bit_adder is begin y = a xor b xor ci; cout = (a and b) or (a and ci) or (b and ci); end bh2; configuration con1 of full_bit_adder is for bh2 end for; end con1;,二、VHDL硬件描述语言基础,数字电路与逻辑设计,5-3-3 基于VHDL的组合逻辑设计,VHDL硬件描述语言,VHDL概述 VHDL数据类型与数据对象 VHDL命令语句,一、VHDL概述,VHDL是超高速集成电路硬件描述语言 (Very High speed I
5、ntegrated Circuit Hardware Description Language)的英文缩写。,语法和风格: (1)类似与现代高级编程语言,如C语言。 (2)VHDL描述的是硬件,它包含许多硬件特有的结构。,硬件描述语言HDL:美国Iverson, 1962 VHDL硬件描述语言: 20世纪80年代初, 美国国防部VHSIC计划 目的: 方便电子设计文档的交流和成果的再利用,一、VHDL概述,VHDL发展历史,1983年提出了硬件描述语言的标准化问题。 1985年,第1版VHDL完成; 1987年,国际电气与电子工程师协会(IEEE)将VHDL语言作为硬件描述语言的工业标准(IE
6、EE1076); 1988年,美国国防部规定所有官方的ASIC设计都必须以VHDL作为设计描述语言,此后VHDL逐渐成为工业界标准。 1993年,IEEE在87版本的基础上进行了若干修订,增修为IEEE1164标准; 1999年,IEEE又将数字模拟混合VHDL的版本作为工业标准,即IEEE1076.3;,一、VHDL概述,VHDL与电路图设计电路的方式不同: 和电路图设计方式相比: (1)易于修改; (2)设计能力更强; (3)VHDL语言很方便:独立于器件设计;相同的程序代码可以用于不同厂家生产的器件。,一、VHDL概述,VHDL语言的程序结构 LIBRARY(USE)- 库 PACKAG
7、E - 程序包集合 ENTITY - 实体 ARCHITECTURE - 结构体 CONFIGURATION - 配置语句,一、VHDL概述,一、VHDL概述,include “stdio.h”; include “math.h”; int main(void) int a,b,c; a=8; b=9; c=a+b; return c; ,Library std; Use std.standard.all; Entity and2 is Port( a,b : in bit; c : out bit); End and2; Architecture a1 of and2 is Begin c
8、= a and b; End a1;,VHDL程序,C程序,Library(库)是用于存放预先编译好的Package(程序包)。 Package (程序包)中定义了基本的常数,数据类型,元件及子程序等。 作用:声明在实体和结构体定义中将用到的 数据类型、元件或子程序等。 声明格式: Library 库名; Use 库名. PACKAGE名.All;,一、VHDL概述,(1)Library和Package部分,作用: ENTITY(实体)用于定义电路的外观,即I/O端口的类型和数量。 定义格式: Entity 实体名 is Port( a : in bit; b : in bit; c : ou
9、t bit); End 实体名;,(2)ENTITY定义区,一、VHDL概述,端口名,数据类型,端口模式,端口模式(MODE)有以下几种类型: IN ;OUT;INOUT ;BUFFER 端口模式可用下图说明:(黑框代表一个设计或模块) IN OUT BUFFER INOUT,一、VHDL概述,(3)ARCHITECTURE定义区,实体的实现。即说明电路执行什么动作或实现功能。 定义格式: Architecture 结构体名 of 实体名 is 声明语句;(内部信号、变量、常数,元件,子程序声明) Begin 并行描述语句; End 结构体名;,一、VHDL概述,(4)CONFIGURATIO
10、N部分 一个完整VHDL电路设计必须有一个实体和对应的结构体,即实体和结构体对构成一个完整的VHDL设计。 一个实体可对应一个结构体或多个结构体,即一个实体可以有不同的描述方式。 作用:当实体有多个结构体时,系统默认实体选用最后一个结构体,利用CONFIGURATION语句可以任意选择采用哪一个结构体。,一、VHDL概述,定义格式: Configuration 配置名 of 实体名 is for 选用的结构体名 end for; end configuration 配置名 ;,一、VHDL概述,标识符的定义原则: (1)标识符由字母、数字和下划线组成,a7_; (2)标识符不区分大小写,ab和
11、AB是一样的; (3)第一个字符必须是字母,即a666; (4)不允许有两个连续的下划线,a_b错误; (5)末尾不能是下划线,mname_错误; (6)标识符不能和关键字相同,如Entity,is等。,一、VHDL概述,设计范例:2输入与门,电路真值表,一、VHDL概述,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; Entity and2 is Port( a : in bit; b : in bit; c : out bit)
12、; End and2; -实体定义结束。,双减号-为VHDL程序的注释符,类似C语言中的/注释符。,一、VHDL概述,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; - 结构体Na Architecture Nb of and2 is Begin c = a and b; - and 为逻辑与操作 End Nb; -结构体Nb,一、VHDL概述,Configurat
13、ion s1 of and2 is for na end for; end configuration s1; -结构体配置结束。,一、VHDL概述,二、VHDL数据类型与数据对象,在VHDL程序中,我们经常会遇到这样的语句: Port( X: in std_logic); Signal A : std_logic; Variable B : std_logic_vector(7 downto 0); Constant C : integer;,数据对象类型,数据类型,数据对象名,VHDL语言中的基本数据类型,逻辑类型,数值类型,布尔代数(Boolean),位 (Bit),标准逻辑 (Std_
14、Logic),整数 (Integer),实数 (Real),二、VHDL数据类型与数据对象,逻辑数据类型,(1)布尔代数(Boolean)型 ; 标识关键字:BOOLEAN, 取值空间:FALSE, TRUE ; (2)位(Bit); 标识关键字:BIT ,取值空间: 0, 1 示例: Port( A:in bit); Signal B: bit;,二、VHDL数据类型与数据对象,标识关键字: Std_Logic; 取值空间: X , -Forcing Unknown 0 , -Forcing 0 1 , -Forcing 1 Z , -Hign Impedance W, -Weak Unkn
15、own L , -Weak 0 H , -Weak 1 U, -Undefined -, -Dont Care ;,二、VHDL数据类型与数据对象,标准逻辑类型(9值逻辑)对数字逻辑电路的逻辑特性描述更加完整,真实,因此在VHDL程序中,对逻辑信号的定义通常采用标准逻辑类型,(3)标准逻辑(Std_logic);,逻辑序列,位序列 (Bit_Vector),标准逻辑序列 (Std_Logic_Vector),二、VHDL数据类型与数据对象,Port( A : in Std_Logic_Vector( 7 downto 0) ); Port( B : in Bit_Vector ( 0 to 3
16、) ); Signal C: Std_Logic_Vector( 3 downto 0);,序列范围的声明方式: To, Downto,序列的声明,二、VHDL数据类型与数据对象,多位宽度的逻辑变量用序列表示。,序列的含义:声明一个多位宽度的逻辑变量,逻辑变量的最高位与声明时的最左序号对应,以此类推,定义并命名一个多位逻辑变量。,序列的分解与合成 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:
17、 Std_Logic_Vector( 0 to 3); 将A逻辑变量的中间两路信号与C相连 C= A( 2 downto 1); 将A的最高一路、B的全部位和常量1与D相连 D= A(3) ,二、VHDL数据类型与数据对象,序列赋值原则:左右宽度相等。,数值类型 (1)整数 声明标识字:Integer,取值空间:-231 231-1 示例 Port( A:in Integer); Port( C:in Integer Range 0 to 7); (限定整数取值范围的方法) Signal B: Integer;,二、VHDL数据类型与数据对象,无符号数 Unsigned 与标准逻辑序列相似,声
18、明时必须指明其 位数。 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 的联系与区别,二、VHDL数据类型与数据对象,(2)实数 Type Real Is Range -1.7E38 to 1.7E38; 实数类型的表示可用科学计数形式或者带小数点的形式。,二、VHDL数据类型与数据对象,VHDL中的运算符,二、VHDL数据类型
19、与数据对象,算术运算符: + 加 - 减 * 乘 / 除 * 乘方 mod 求模 rem 求余 abs 求绝对值,逻辑运算: and 逻辑与 or 逻辑或 nand 与非 nor 或非 xor 异或 xnor 同或 not 逻辑非,关系运算符: = 等于 /= 不等于 大于 = 大于或等于 注:其中=操作符也用于表示信号的赋值操作。,& 连接符,将两个数据对象或矢量连接成维数更大的矢量,它可给代码书写带来方便。 例如: vabc=a & b & c; 如果a=1 , b=0 , c=1 , 则 vabc=“101” 。,二、VHDL数据类型与数据对象,用户自定义数据类型: (1) 列举数据类型
20、 Type 列举名称 is (元素1,元素2,) 例子: Type state is(S0,S1,S2,S3); Signal S: state;,二、VHDL数据类型与数据对象,(2) 数组类型 Type 数组名称 is Arrary(范围) of 数据类型; 例子: Type Byte is Arrary(7 downto 0) of Bit; Signal sdo: Byte;,二、VHDL数据类型与数据对象,数据类型的转换 在VHDL语言里,不同类型的数据信号之间不能互相赋值。当需要不同类型数据之间传递信息时,就需要类型转换函数将其中的一种类型数据转换为另一中数据类型后,再进行信号的传
21、递。,二、VHDL数据类型与数据对象,例如: Signal Y : Std_logic_vector(7 downto 0); Signal X : Integer range 0 to 255; Y= CONV_STD_LOGIC_VECTOR(X,8);,二、VHDL数据类型与数据对象,CONV_INTEGER 将数据类型 UNSIGNED, SIGNED转换为INTEGER 类型. CONV_UNSIGNED 将数据类型INTEGER, SIGNED转换为UNSIGNED 类型. CONV_SIGNED 将数据类型INTEGER, UNSIGNED转换为SIGNED类型. CONV_ST
22、D_LOGIC_VECTOR 将数据类型INTEGER, UNSIGNED, SIGNED, STD_LOGIC转换为STD_LOGIC_VECTOR 类型.,二、VHDL数据类型与数据对象,数据对象,常 量,信 号,变 量,(Data Objects),二、VHDL数据类型与数据对象,数据对象,常 量,信 号,变 量,(Data Objects),二、VHDL数据类型与数据对象,(1) 常量 定义格式: Constant 常量名称: 数据类型 :=给定值; 常量通常来来定义延迟和功耗等参数。 注意!常数定义的同时进行赋初值。 常数在程序包说明、实体说明、结构体描述、过程说明、函数调用中使用。
23、,二、VHDL数据类型与数据对象,library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; -必需定义+ entity exam1 is port (ip : in std_logic_vector(3 downto 0); op : out std_logic_vector(3 downto 0); end exam1; architecture m1 of exam1 is constant num : integer := 6; begin op = ip + num; end m1;,二、VH
24、DL数据类型与数据对象,(2) 信号 定义格式 I.(端口)信号 Port(端口信号名称:数据类型); 例如:Port(A:in std_logic); II.内部信号 Signal 信号名称: 数据类型 :=初始值; 例如:Signal B: std_logic;,二、VHDL数据类型与数据对象,“信号”数据对象的物理意义 信号代表电路元件的端口和内部的物理连线, 因此信号的赋值有一定的延迟时间. 端口信号代表电路的输入/输出(在实体中说明); 内部信号代表电路中间信号或中间连接线路,其在元件之间起互连作用(在结构体中说明和使用)。,信号赋值的语法格式为: 信号名 = 表达式; 例如: 【S
25、ignal S1 : Std_logic_vector(3 Downto 0);】 S1 = “0000”;,(3)变量 定义格式 Variable 变量名称: 数据类型 :=初始值; 变量只能用于进程之中,变量的赋值是立即生效的,常用于高层次抽象的算法描述当中。,二、VHDL数据类型与数据对象,“变量”数据对象,它用于对中间数据的临时存储,并不一定代表电路的某一组件。,注意!变量定义的时候尽管可以直接赋初值,但系统往往忽略。 建议变量对象定义后再进行赋值。,变量为局部量。,仅限于进程(Process)或子程序中使用。,变量赋值的语法格式为:目标信号值:=表达式; 如:Variable S1
26、: Std_logic_vector(3 Downto 0); S1 := “0000”;,二、VHDL数据类型与数据对象,信号和变量的比较,(1)信号和变量的对应关系不同:信号代表电路内部信号或连接线路;而变量则不是。,(2)信号和变量声明的位置不同:信号声明在子程序、进程的外部;而变量声明在子程序、进程的内部。,(3)信号为全局量,而变量只在定义它的域中才可见。因此,变量不能在两个进程之间传递信息。,(4)在一个进程中多次为一个信号赋值时,只有最后一个值会起作用;而变量则不同,每次赋值都会改变它的值。,(5)赋值不同。在进程中,信号赋值只有在进程结束时起作用,而变量赋值是立即进行的。而且赋
27、值符号不同:信号赋值为“=”,变量赋值为“:=”。,数据对象属性,(1)数值类属性: (数组类型的数据对象) 数值类属性有 left, right, low, high, length。 其中用符号 隔开对象名及其属性。 left表示数组的左边界; right表示数组的右边界; low表示数组的下边界; high表示数组的上边界; length表示数组的长度。,如: Signal A : std_logic_vector(7 downto 0); Signal B : std_logic_vector(0 to 3); 则这两个信号的属性值分别为: Aleft=7; Aright=0; Alo
28、w=0; Ahigh=7; Alength=8; Bleft=0; Bright=3; Blow=0; Bhigh=3; Blength=4;,数据对象属性,(2)event属性: event属性,它的值为布尔型,如果刚好有事件发生在该属性所附着的信号上(即信号有变化),则其取值为True,否则为False。 利用此属性可决定时钟信号的变化情况,即时钟是否发生。,数据对象属性,例如:时钟边沿表示: signal clk : in std_logic; 则clkevent and clk=1表示时钟的上升沿。即时钟变化了,且其值为1。 clkevent and clk=0表示时钟的下降沿。即时钟
29、变化了,且其值为0。 此外,还可利用两个函数来表示时钟的边沿。 rising_edge(clk) 表示时钟的上升沿 falling_edge(clk) 表示时钟的下降沿,数据对象属性,三、VHDL命令语句,并列语句,顺序语句,VHDL命令语句,并列语句,并列语句一般处于进程(PROCESS)的外部。所有并列语句都是并行执行的,即与它们出现的先后次序无关。 并列语句有三个特点: a. 所有语句的执行是并行的; b. 每条语句的执行和其所在的位置无关; c. 并列语句的输出仅仅依赖于输入,没有其它的限制条件。,并列语句,(1)直接赋值语句:= 赋值运算符 (2)条件赋值语句:When-Else (
30、3)选择赋值语句:With-Select-When (4) Process(进程)语句 (5) Block(块)语句 (6) 函数调用语句(后面章节讲) (7) Component(元件)例化语句 (8)For-Generate语句,直接赋值语句,直接赋值语句的格式:Signal_name0); 结果信号A的每一位的值都为0。 B0); 信号对象的位数很多时,采用others来赋值很方便。,直接赋值语句,直接赋值语句的格式: Signal_name = expression; 如:Signal A,B: std_logic_vector(7 downto 0); A=”00000000”; B
31、=”10000000”;,When-Else条件赋值语句,语法格式为: Signal_name= expression1 When logic_expression1 Else expression2 When logic_expression2 Else expression3; 例如:f = 1 when (x1=x2) else 0;,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
32、else 0 when a= 1 and b = 0 else 0 when a= 0 and b = 1 else 1; End Na;,With-Select-When选择式赋值,With expression Select Signal_name=expression1 When constant_value1, expression2 When constant_value2, expression3 When constant_value3;,Entity example is Port(x,y: in std_logic; z :out std_logic_vector(1 dow
33、nto 0); End example; Architecture a of example IS signal tmp : std_logic_vector(1 downto 0); Begin tmp = x,With-Select-When选择式赋值,顺序语句,(1)顺序语句每一条语句的执行都是顺序进行的。如同高级编程语言中的命令执行方式,一次一条命令,按书写顺序由上而下执行。 (2)顺序语句只能出现在进程和子程序内部。 (3)由于顺序语句的次序很重要,因此,顺序语句要与并行语句分割开,这可以通过Process语句来实现。Process语句出现在结构体中,它将其内部的语句进行封装。,顺序
34、语句有三个特点: a.所有语句的执行是顺序进行的; b.每条语句的执行和其所在的位置有关; c.顺序语句的输出不仅依赖于输入,而且还受位置的影响。,顺序语句,(1)Process语句 (2)If-Else语句 (3)Case-When语句 (4)Null语句 (5)For-Loop语句 (6)Wait until语句 (7)变量赋值语句 (8) Procedure(过程)调用语句,并列语句 语句的顺序不影响代码的含义。 例如:Whenelse;WithSelect; 顺序语句 语句的顺序可能影响代码的含义。 例如:ifelse;case语句; 因此,为了在代码段中区分顺序语句,VHDL 规定顺
35、序语句一定要放在Process语句内部;,进程语句Process,Process 语句格式 Process-label:Process(Sensitivity list) Variable declarations -变量声明 Begin if statements case statements Procedure调用语句 wait until statement variable assignment statements End Process;,entity abc is port( w0,w1,s:in std_logic; f : out std_logic); end abc;
36、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;,(1)一个结构体当中可以有多个Process 语句, 不同Process 语句是同时起作用的并列语句。 (2)Process内的语句却是按顺序“执行”(被编译器解释 )的顺序语句。 (3)多进程之间的信息通过信号对象来传递。,进程语句Process特点,进程语句Process的语义,敏感表 每当任何信号的取值发生变化时,进程就会有效。 只要进程有
37、效:进程中的语句就会顺序执行。 在进程内部所有语句执行完毕之前,进程内部的信号赋值对于进程外部都不可见。如果对相同信号进行了多次赋值,那么只有最后一次赋值在进程外部可见。,敏感表(Sensitivity list)包括进程的一些信号,当敏感表中的某个信号变化时进程才被激活,进程内的顺序语句被执行。 当进程结束时,进程内的输出信号值被更新,进程进入等待(睡眠)状态,直到敏感表中的某一信号发生变化,进程被再次激活。,进程语句Process的语义,Process 模型-基本形式,Process() begin If-else End process; Process() begin Case-whe
38、n End process;,条件语句IF-ELSE,If expression1 Then statement1; statement; Else statement2; statement; End if;,If-else语句,选择分支语句:从多个条件中选择一个满足条件的子句执行;如果条件都不满足则无操作;,条件的排列方式有两种基本形式: 1. 并列; 2. 嵌套(分层);,每个if-else语句都有明确的语句控制域: 控制域以“if”开始,以“end if”结束。,Ifelse语句块常用样式,Ifthen 子句1 End if; Ifthen 子句1 else 子句2 End if;,I
39、fthen 子句1 elsif then 子句2 elsif then 子句3 End if;,Ifthen 子句1 elsif then 子句2 elsif then 子句3 else 子句4 End if;,嵌套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;,ARCHITECTURE behavior OF mux4 IS BEGIN process(i0,i1,i2,i
40、3,sel) begin if(sel=“00“)then q= i0; elsif(sel=“01“)then q= i1; elsif(sel=“10“)then q= i2; elsif(sel=“11“)then q= i3; else q= X; end if; end process; END behavior;,LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux4 IS PORT( i0,i1,i2,i3: IN STD_LOGIC; sel: IN STD_LOGIC_vector(1 downto 0); q : OU
41、T STD_LOGIC); END mux4;,Case-when语句,Case 选择信号 is when 值1 = 子句1; when 值2 = 子句2; when others = 子句3; End case;,选择分支语句:根据选择信号的值从多个子句中选择一个子句执行;,ARCHITECTURE behavior OF mux4 IS BEGIN process(i0,i1,i2,i3,sel) begin case sel is when “00“= q q q q q= X; end case; end process; END behavior;,LIBRARY IEEE ; US
42、E IEEE.STD_LOGIC_1164.ALL; ENTITY mux4 IS PORT( i0,i1,i2,i3: IN STD_LOGIC; sel: IN STD_LOGIC_vector(1 downto 0); q : OUT STD_LOGIC); END mux4;,变量赋值语句,由于变量赋值是立即起作用的,所以在进程中变量 赋值是顺序语句。例如: Process variable a,b:integer; begin a:=30; b:=40; a:=b; b:=a; end process; 由于变量的赋值是顺序进行的,所以运行结果是a=b=40。,数字逻辑电路 VHDL
43、代码CPLD/FPGA,数字逻辑电路的表示方法,逻辑表达式,逻辑图,真值表,波形图,HDL,卡诺图,VHDL代码,QuartusII 编译、综合,CPLD/ FPGA,Quartus II集成开发环境软件模块,设计输入编辑器,仿真器,HDL综合器,适配器(或布局布线器),下载器,编译器,PLD开发流程,86,VHDL的电路建模,电路的输入、输出变量=端口信号; 电路的内部电路节点=内部信号; 逻辑关系=代码的含义;,代码的两种模型,并列模型,进程模型,组合电路,组合电路,时序电路,直接赋值语句,when-else,with-select,直接赋值语句,if-else,case-when,二、常
44、用时序逻辑电路设计,(1)触发器设计(D、JK) (2)计数器设计(分频器) (3)移位寄存器设计 (4)状态机设计:序列信号发生器及检测器,状态机示例序列信号发生器,序列信号:110,序列发生器,CLK,Z,ARCHITECTURE a OF mealy IS TYPE STATE_TYPE IS (s0, s1, s2); SIGNAL state: STATE_TYPE; BEGIN,PROCESS (clk) BEGIN If (clkEVENT AND clk = 1) then CASE state IS WHEN s0 = z z z state=s0; END CASE; En
45、d if; END PROCESS; END a;,(5)状态机设计,我们可以用输入信号X和电路状态Q来描述时序电路的逻辑功能,这时时序电路称为 状态机(State Machine)。 根据输出信号和输入信号以及电路状态的关系,状态机可以分为两种:穆尔(Moore)型和米利(Mealy)型。,Y=FX,Q,Y=FQ,米利(Mealy)型:,穆尔(Moore)型:,状态机示例序列信号检测器,序列信号:110,序列检测器,CLK,Z,x,S0,S2,0/0,1/0,S1,1/0,0/1,0/0,1/0,Mealy型序列信号检测器状态图,序列信号:110,S,x/Z,1,11,S0/0,S2/0,0
46、,1,S1/0,1,0,1,Moore型序列信号检测器状态图,序列信号:110,S/Z,x,1,11,S3/1,110,0,0,1,LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY sqs IS PORT( x,clk: in Std_logic; z: out Std_logic); END sqs;,Mealy型-VHDL代码转换,ARCHITECTURE a OF mealy IS TYPE STATE_TYPE IS (s0, s1, s2); SIGNAL state: STATE_TYPE; BEGIN,Mealy型-VHDL代码转
47、换,PROCESS (clk) BEGIN If (clkEVENT AND clk = 1) then CASE state IS WHEN s0 = IF din=1 THEN state IF din=1 THEN state IF din=0 THEN state state=s0; END CASE; End if; END PROCESS; z=1 when (state=s2 and din=0) else 0; -输出不仅与状态有关,而且和输入有关。 END a;,Mealy型-VHDL代码转换,I. Mealy型,Mealy型-VHDL代码转换标准形式,P0: PROCESS (clk) BEGIN IF clkevent and clk=1 THEN current_state=excitation; END IF; END PROCESS p0;,P1: PROCESS(current_state,in1) BEGIN CASE current_state IS WHEN s0 = IF in1=1 THEN excitation IF in1=0 THEN excitation IF in1=1 THEN excitation IF in1=0 THE
链接地址:https://www.31doc.com/p-3486211.html