VHDL设计方法用VHDL语言实现可编程数字系统设计.ppt

上传人:文库蛋蛋多 文档编号:2998787 上传时间:2023-03-07 格式:PPT 页数:136 大小:1.04MB
返回 下载 相关 举报
VHDL设计方法用VHDL语言实现可编程数字系统设计.ppt_第1页
第1页 / 共136页
VHDL设计方法用VHDL语言实现可编程数字系统设计.ppt_第2页
第2页 / 共136页
VHDL设计方法用VHDL语言实现可编程数字系统设计.ppt_第3页
第3页 / 共136页
VHDL设计方法用VHDL语言实现可编程数字系统设计.ppt_第4页
第4页 / 共136页
VHDL设计方法用VHDL语言实现可编程数字系统设计.ppt_第5页
第5页 / 共136页
点击查看更多>>
资源描述

《VHDL设计方法用VHDL语言实现可编程数字系统设计.ppt》由会员分享,可在线阅读,更多相关《VHDL设计方法用VHDL语言实现可编程数字系统设计.ppt(136页珍藏版)》请在三一办公上搜索。

1、VHDL设计方法,用VHDL语言实现可编程数字系统设计,VHDL设计方法,VHDL概述VHDL的设计单元VHDL的基本语法结构,第一部分,VHDL 概述,VHDL的含义,VHSIC(Very High Speed Integrated Circuit)HardwareDescriptionLanguage,VHDL历史,1982年,诞生于美国国防部赞助的VHSIC项目1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言,即IEEE-1076(简称87版)1993年,IEEE对VHDL进行了修订,公布了新版本的VHDL,即IEEE标准的1076-1993(1164)版本 1996年

2、,IEEE-1076.3成为VHDL综合标准,VHDL特点,与其他的硬件描述语言相比,VHDL具有更强的行为描述能力 VHDL丰富的仿真语句和库函数,使得在设计的早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟 VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计,VHDL与其他HDL比较,VHDL“告诉我你想要电路做

3、什么,我给你提供能实现这个功能的硬件电路”Verilog和VHDL类似ABEL、AHDL“告诉我你想要什么样的电路,我给你提供这样的电路”,典型的综合流程,典型的仿真流程,第二部分,VHDL的设计单元,VHDL的设计单元,Entity(实体)用来说明模型的外部输入输出特征Architecture(构造体)用来定义模型的内容和功能每一个构造体必须有一个实体与它相对应,所以两者一般成对出现,实体,类似一个“黑盒”,实体描述了“黑盒”的输入输出口,实体举例,ENTITY black_box IS Generic(constant width:integer:=7;);PORT(clk,rst:INs

4、td_logic;d:IN std_logic_vector(width DOWNTO 0);q:OUTstd_logic_vector(width DOWNTO 0);co:OUT std_logic);END black_box;,Generic,类属参量一种端口界面常数,用来规定端口的大小、实体中子元件的数目等与常数不同,常数只能从内部赋值而类属参量可以由实体外部赋值数据类型通常取Integer或Time综合器仅支持数据类型为整数的类属值。,PORTS,端口(PORT)是实体的一部分PORT 类似于器件的管脚,主要用于信号的传输PORT 一般有 Name,Mode,和 Type端口说明格

5、式PORT(SIGNAL Name:Mode Type BUS:=表达式,),端口类型,IN:数据只能从端口流入实体OUT:数据只能从端口流出实体INOUT:数据从端口流入或流出实体BUFFER:数据从端口流出实体,同时可被内部反馈,数据类型,BIT:位类型,其值只能为 0或 1BIT_VECTOR:位矢量类型,包含一组位类型BOOLEAN:布尔类型,其值可为 TRUE或FALSEINTEGER:整型,范围为-214783647到214783647(232),综合时,要对范围加以限制。常用于循环语句的循环次数、常量、数学函数或模式仿真Natural:自然数类型,整型的子类型,含零和正整数Pos

6、itive:正整数类型,整型的子类型,含非零和非负整数REAL:浮点类型,范围为:-1.0E38到1.0E38很多综合器不支持该类型,数据类型,枚举类型:用户定义的数据类型例:TYPE traffic_light IS(red,yellow,green)TYPE int IS RANGE 0 TO 100数组类型:分一维数组和二维数组,限定性和非限定性数组例:TYPE Bit_Vector IS ARRAY(Natural RANGE)OF Bit;TYPE Word IS ARRARY(31 downto 0)OF Bit;SUBTYPE:子类型,一般用来对其父类型加以限制例:SUBTYPE

7、 Std_Logic IS resolved Std_UlogicTIME:时间类型,范围和整型一样,表达时要包括数值和单位两部分。单位包括:fs、ps、ns、us、ms、sec、min、hr。一般用于仿真,数据类型,记录类型TYPE Month_Name IS(Jan,Fab,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec);TYPE date IS RECORDday:Integer RANGE 1 TO 31;month:Month_Name;year:Integer RANGE 0 to 3000;END RECORD;VARIABLE today:da

8、te;today:=(15,may,1995);,Std_Logic数据类型,IEEE 1164中定义的一种数据类型,它包含9种取值分别为:U未初始化用于仿真X强未知用于仿真0强0用于综合与仿真1强1用于综合与仿真Z高阻用于综合与仿真W弱未知用于仿真L弱0用于综合与仿真H弱1用于综合与仿真_忽略用于综合与仿真,Std_Logic数据类型,它是数字电路设计的工业标准逻辑类型它增加了VHDL语言编程、综合和仿真的灵活性在多值逻辑系统中STD_LOGIC和 STD_LOGIC_VECTOR 用于取代 BIT 和 BIT_VECTOR 若电路中有三态逻辑(Z)必须用STD_LOGIC 和 STD_LO

9、GIC _VECTOR 要使用这种类型代码中必须申明库和程序包说明语句LIBRARY ieee;USE ieee.std_logic_1164.ALL;,练习一,编写包含以下内容的实体代码端口 D 为12位输入总线 端口 OE 和 CLK 都是1位输入端口 AD 为 12位双向总线端口 A为12位输出总线端口 INT 是1位输出端口 AS 是一位输出同时被用作内部反馈,练习一答案,LIBRARY ieee;USE ieee.std_logic_1164.ALL;ENTITY my_design IS PORT(d:IN std_logic_vector(11 DOWNTO 0);oe,clk:

10、IN std_logic;ad:INOUT std_logic_vector(11 DOWNTO 0);a:OUT std_logic_vector(11 DOWNTO 0);int:OUT std_logic;as:BUFFER std_logic);END my_design;,构造体,用来描述实体的内部结构和逻辑功能必须和实体(ENTITY)相联系一个实体(ENTITY)可以有多个构造体构造体的运行是并发的构造体描述方式包括:行为描述结构描述混合描述,实体和构造体之间的关系,Input 1,Input n,Output 1,Output n,实体,ABCDSel,MUX_Out,2,构造

11、体结构图,构造体行为描述举例,2 X 8 Input AND gate:ENTITY black_box IS PORT(a,b:INstd_logic_vector(7 DOWNTO 0);y:OUTstd_logic_vector(7 DOWNTO 0);END black_box;ARCHITECTURE example OF black_box ISBEGIN y=a AND b;END example;,数据对象常数,指在设计中不会变的值改善代码可读性,便于代码修改必须在程序包、实体、构造体或进程的说明区域加以说明一般要赋一初始值保留字CONSTANT例:CONSTANTWidth:

12、Integer:=8,数据对象信号,可代表连线、内连元件、或端口用“=”来给信号赋值SIGNALSIGNAL Count:Bit_Vector(3 downto 0);IF Rising_Edge(clk)THENCount=Count+1;END IF;信号在Package、Entity、Architecture 中声明,数据对象信号,信号举例,LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY simp ISPORT(a,b,c,d:IN Std_Logic;g:OUT Std_Logic);END simp;ARCHITECTURE logic

13、 OF simp ISSIGNAL e,f:Std_Logic;BEGINe=a or b;f=not(c or d);g=e and f;END logic;,信号赋值,SIGNAL temp:Std_Logic_Vector(7 downto 0);整体赋值:temp=“10101010”;temp=x”AA”;逐位赋值:temp(7)=1;多位赋值:temp(7 downto 4)=“1010”;,数据对象变量,仅用于进程和子程序必须在进程和子程序的说明性区域说明不能表达连线和存储元件保留字VARIABLEVARIABLE tmp:Bit;tmp:=1;,变量赋值,整体赋值:temp:=

14、“10101010”;temp:=x”AA”;逐位赋值:temp(7):=1;多位赋值temp(7 downto 4):=“1010”;,信号和变量的作用范围,ARCHITECTURE,信号和变量的区别,算术运算符,关系运算符,逻辑运算符,其他运算符,运算优先级,*ABSNOT*/MODREM+正-负+-&SLLSLASRLSRAROLROR=ANDORNANDNORXORXNOR,高,低,运算重载,若两信号类型不同,不能将一个信号的值赋给另一信号数据转换必须要用运算重载一般可用IEEE.1164中的标准重载函数实现LIBRARY IEEE;USE IEEE_Std_Logic_1164.al

15、l;USE IEEE_Std_Logic_Arith.all;USE IEEE_Std_Logic_unsigned.allUSE IEEE_Std_Logic_signed.all,并行语句,并行语句1,构造体,并行语句2,并行语句3,signal,signal,并行语句,VHDL语言与传统软件描述语言最大的不同有多种语句格式,包括:并行信号赋值语句、进程语句、块语句、条件信号赋值语句、元件例化语句、生成语句、并行过程调用语句各种并行语句在结构体中的执行是同步进行的,或者说是并行运行的,其执行方式与书写的顺序无关。在执行中,并行语句之间可以有信息往来,也可以是互为独立、互不相关、异步运行的(

16、如多时钟情况)。每一并行语句内部的语句运行方式可以有两种不同的方式,即并行执行方式(如块语句)和顺序执行方式(如进程语句)。,布尔表达式,VHDL支持所有的标准逻辑运算符AND,OR,NOT,XOR,XNOR,NAND例:x=(a AND NOT(s(1)AND NOT(s(0)OR(b AND NOT(s(1)AND s(0)OR(c AND s(1)AND NOT(s(0)OR(d AND s(1)AND s(0);y=a OR b OR c;,With_Select_Then选择信号语句,所有的“WHEN”子句必须是互斥的一般用“When Others”来处理未考虑到的情况只有一个参考信

17、号和赋值符(=)每一子句结尾是逗号,最后一句是分号WITH selection_signal SELECTsignal_name=value_1 WHEN value_a,value_2 WHEN value_b,.value_n WHEN value_n,value_x WHEN OTHERS;,With_Select_Then语句举例,LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY cmpl_sig ISPORT(a,b,c,d,s:IN STD_LOGIC;x:OUT STD_LOGIC);END cmpl_sig;ARCHITECTURE

18、 logic OF cmpl_sig ISBEGIN WITH s SELECT x=a WHEN“00”,b WHEN“01”,c WHEN“10”,d WHEN OTHERS;,With_Select_Then语句举例,每个WHEN子句可以包含多个条件:WITH s SELECT x=a WHEN”000”|“001”|“010”,b WHEN 101|111,c WHEN OTHERS;,When_Else选择信号语句,根据指定条件对信号赋值,条件可以为任意表达式根据条件的出现的先后次序隐含优先权最后一个 ELSE子句隐含了所有未列出的条件每一子句的结尾没有标点,只有最后一句有分号sig

19、nal_name=value_1 WHEN condition1 ELSE value_2 WHEN condition2 ELSE.value_n WHEN conditionn ELSE value_x;,When_Else语句举例,x=a when(s=“00”)else b when(s=“01”)else c when(s=“10”)else d;,When_Else语句举例,j=w when(a=1)else x when(b=1)else y when(c=1)elsez when(d=1)else0;,进程语句,VHDL中最重要的语句,具有并行和顺序行为的双重性进程和进程语句之

20、间是并行关系进程内部是一组连续执行的顺序语句进程语句与构造体中的其余部分进行信息交流是靠信号完成的基本格式:进程标号:PROCESS(信号敏感表)IS说明区BEGIN顺序语句END PROCESS 进程标号;,进程语句,信号敏感表,进程赖以启动的敏感表。对于表中列出的任何信号的改变,都将启动进程,执行进程内相应顺序语句一些VHDL综合器,综合后,对应进程的硬件系统对进程中的所有输入的信号都是敏感的,不论在源程序的进程中是否把所有的信号都列人敏感表中为了使软件仿真与综合后的硬件仿真对应起来,应当将进程中的所有输人信号都列入敏感表中,顺序语句,每一条顺序语句的执行(指仿真执行)顺序是与它们的书写顺

21、序基本一致的顺序语句只能出现在进程(Process)、函数(Funcation)和过程(Procedure)中顺序语句包括:赋值语句、流程控制语句、等待语句、子程序调用语句、返回语句、空操作语句,LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY if_case IS PORT(a,b,c,d:IN Std_Logic;sel:IN Std_Logic_Vector(1 downto 0);y,z:OUT Std_Logic);END if_case;ARCHITECTURE logic OF if_case ISBEGINif_label:PROC

22、ESS(a,b,c,d,sel)BEGINIF sel=00 THEN y=a;ELSIF sel=01 THEN y=b;ELSIF sel=10 THEN y=c;ELSE y=d;END IF;END PROCESS if_label;,case_label:PROCESS(a,b,c,d,sel)BEGINCASE sel ISWHEN 00=z z z z z=0;END CASE;END PROCESS case_label;END logic;,进程语句举例,敏感表举例,latchlabel:PROCESS(oe)BEGINIF oe=1 THEN y=a;END IF;END

23、PROCESS if_label;,敏感表举例,latchlabel:PROCESS(oe,a)BEGINIF oe=1 THEN y=a;END IF;END PROCESS if_label;,顺序赋值语句举例,LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY ttt1 IS PORT(en:in std_logic;y:OUT Std_Logic_vector(0 to 7);END ttt1;ARCHITECTURE logic OF ttt1 ISSIGNAL s1,s2:Std_logic;SIGNAL t:Std_Logic_vect

24、or(0 to 7);BEGINPROCESS(s1,s2,en)Variable v1,v2:Std_logic;,Beginif en=1 thenV1:=1;V2:=1;s1=1;s2=1;t(0)=v1;t(1)=v2;t(2)=s1;t(3)=s2;v1:=0;v2:=0;s2=0;t(4)=v1;t(5)=v2;t(6)=s1;t(7)=s2;end if;End process;y=t;end;,顺序赋值语句举例,顺序赋值语句举例,ARCHITECTURE reg1 OF reg1 ISSIGNAL a,b:BIT;BEGINPROCESS(clk)BEGINIF rising_

25、edge(clk)THENa=d;b=a;q=b;END IF;END PROCESS;END reg1;,顺序赋值语句举例,ENTITY reg1 IS PORT(d:in BIT;clk:in BIT;q:out BIT);END reg1;ARCHITECTURE reg1 OF reg1 ISSIGNAL a,b:BIT;BEGINPROCESS(clk)BEGINIF rising_edge(clk)THENa=d;b=a;END IF;END PROCESS;q=b;END reg1;,顺序赋值语句举例,ENTITY reg1 IS PORT(d:in BIT;clk:in BIT

26、;q:out BIT);END reg1;ARCHITECTURE reg1 OF reg1 ISVARIABLE a,b:BIT;BEGINPROCESS(clk)BEGINIF rising_edge(clk)THENa=d;b=a;q=b;END IF;END PROCESS;END reg1;,在时序电路中的变量赋值,变量在IF语句中被赋值,以用来表示随时钟的变化,不会产生触发器变量只代表临时存储,不反映实际硬件变量可用在表示一数据立即变化的表达式中,然后再将变量的值赋给信号,IF_THEN_ELSE语句,只能在进程内使用至少应有一个条件句,条件句必须由布尔表达式构成。根据条件句产生的

27、判断结果TRUE或FALSE,有条件地选择执行其后的顺序语句。,IF 条件句 Then 顺序语句ENDIF,IF 条件句 THEN 顺序语句ELSE 顺序语句ENDIF,IF 条件句 Then 顺序语句 ELSIF 条件句 Then 顺序语句 ELSE 顺序语句ENDIF,IF_THEN_ELSE语句,mux4_1:PROCESS(a,b,c,d,s)BEGIN IF s=“00”THEN x=a;ELSIF s=“01”THEN x=b;ELSIF s=“10”THEN x=c;ELSE x=d;END IF;END PROCESS mux4_1;,IF_THEN_ELSE语句,ex1:PR

28、OCESS(a,b)BEGIN IF a=1 THEN c=0;-if a and b are END IF;-both 1 then IF b=1 THEN c=1;-b has priority END IF;-so c=1;END PROCESS ex1;ex2:PROCESS(a,b)BEGIN IF b=1 THEN c=1;-if a and b are END IF;-both 1 then IF a=1 THEN c=0;-a has priority END IF;-so c=0;END PROCESS ex2;,CASE_WHEN语句,表达式可以是一个整数类型或枚举类型的值

29、,也可以是由这些数据类型的值构成的数组条件句中的选择值必在表达式的取值范围内。除非所有条件句中的选择值能完整覆盖CASE语句中表达式的取值,否则最末一个条件句中的选择必须用“OTHERS”表示。CASE语句中每一条件句的选择值只能出现一次,不能有相同选择值的条件语句出现。CASE语句执行中必须选中,且只能选中所列条件语句中的一条。,CASE_WHEN语句,mux4_1:PROCESS(a,b,c,d,s)BEGINCASE s ISWHEN 00=x x x x=d;END CASE;END PROCESS mux4_1;,LOOP语句,基本格式:LOOP标号:重复模式 LOOP顺序语句;EN

30、D LOOP LOOP标号,WHILE LOOP顺序语句END LOOP;,FOR IN LOOP顺序语句END LOOP;,LOOP标号:LOOP顺序语句EXIT LOOP标号;END LOOP;,NEXT LOOP标号 WHEN 语句,LOOP语句示例,LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_unsigned.all;ENTITY shift4 ISPORT(shft_lft:in std_logic;d_in:in std_logic_vector(3 downto 0);q_out:out std_logi

31、c_vector(7 downto 0);END shift4;ARCHITECTURE logic OF shift4 ISBEGINPROCESS(d_in,shft_lft)VARIABLE shft_var:std_logic_vector(7 DOWNTO 0);,BEGINshft_var(7 downto 4):=0000;shft_var(3 downto 0):=d_in;IF shft_lft=1 THENFOR i IN 7 DOWNTO 4 LOOPshft_var(i):=shft_var(i-4);END LOOP;shft_var(3 downto 0):=“00

32、00”;ELSE shft_var:=shft_var;END IF;q_out=shft_var;END PROCESS;END logic;,组合电路举例,LIBRARY ieee;USE ieee.std_logic_1164.ALL;ENTITY compare IS PORT(a,b:IN std_logic_vector(0 TO 3);aeqb:OUT std_logic);END compare;ARCHITECTURE archcompare OF compare ISBEGINaeqb=1 WHEN a=b ELSE 0;END archcompare;,组合电路举例,LI

33、BRARY ieee;USE ieee.std_logic_1164.ALL;ENTITY compare IS PORT(a,b:IN std_logic_vector(0 TO 3);aeqb:OUT std_logic);END compare;ARCHITECTURE archcompare OF compare ISBEGINaeqb=NOT(a(0)XOR b(0)OR(a(1)XOR b(1)OR(a(2)XOR b(2)OR(a(3)XOR b(3);END archcompare;,组合电路举例,ARCHITECTURE archcompare OF compare ISBE

34、GINcomp:PROCESS(a,b)BEGINIF a=b THENaeqb=1;ELSEaeqb=0;END IF;END PROCESS comp;END archcompare;,组合电路举例,ARCHITECTURE archincomplete OF incomplete IS BEGINim_mem:PROCESS(a,b)BEGINIF a=1 THEN c=b;END IF;END PROCESS im_mem;END archincomplete;,组合电路举例,ARCHITECTURE archcomplete OF complete IS BEGINno_mem:PR

35、OCESS(a,b)BEGINIF a=1 THEN c=b;ELSE c=0;END IF;END PROCESS no_mem;END archcomplete;,避免引入锁存效应,用ELSE子句结束IF.THEN.语句在CASE语句中覆盖所有的可能条件或在CASE的最后用WHEN OTHERS子句CASE select ISWHEN 100=key key key key=none;END CASE;,时序电路举例,LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY dff_a IS PORT(d:in std_logic;clk:in std

36、_logic;q:out std_logic);END dff_a;ARCHITECTURE behavior OF dff_a ISBEGINPROCESS(clk)BEGINIF clkevent and clk=1 THEN q=d;END IF;END PROCESS;END behavior;,时序电路举例,ARCHITECTURE behavior OF dff_clr ISBEGINPROCESS(clk,clr)BEGINIF clr=0 THEN q=0;ELSIF rising_edge(clk)THEN q=d;END IF;END PROCESS;END behavio

37、r;,时序电路举例,LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_unsigned.all;upcount:PROCESS(clk,rst)BEGINIF rst=1 THEN count=x0;ELSIF rising_edge(clk)THENIF load=1 THEN count=data;ELSE count=count+1;END IF;END IF;END PROCESS upcount;,时序电路举例,ARCHITECTURE logic OF count_a ISBEGINPROCESS(rst,clk

38、)VARIABLE tmp_q:std_logic_vector(15 downto 0);BEGINIF rst=0 THEN q=0;ELSIF rising_edge(clk)THENIF updn=1 THEN tmp_q:=tmp_q+1;ELSE tmp_q:=tmp_q-1;END IF;q=tmp_q;END IF;END PROCESS;END logic;,三态电路举例,ENTITY test_three IS PORT(oe:IN std_logic;data:OUT std_logic_vector(0 to 7);END test_three;ARCHITECTURE

39、 archtest_three OF test_three ISBEGINPROCESS(oe)BEGINIF(oe=1)THENdata=01100100;ELSEdata=ZZZZZZZZ;END IF;END PROCESS;END archtest_three;,双向口举例,ENTITY ldcnt IS PORT(clk,ld,oe:IN std_logic;count:INOUT std_logic_vector(7 DOWNTO 0);END ldcnt;ARCHITECTURE archldcnt OF ldcnt ISSIGNAL int_count:std_logic_ve

40、ctor(7 DOWNTO 0);BEGINcnt:PROCESS(clk)BEGINIF rising_edge(clk)THENIF ld=1 THEN int_count=count;ELSE int_count=int_count+1;END IF;END IF;END PROCESS cnt;,双向口举例,outen:PROCESS(oe,int_count)BEGINIF oe=1 THEN count Z);END IF;END PROCESS outen;END archldcnt;,别 名,标志一个以存在的数据对象引用别名等效于引用原始数据对象给别名赋值等效于给原始数据赋值常

41、作为标识一组数据类型保留字:ALIASALIAS Bank:Bit_Vector(0 to 3)IS Address(24 to 27);,状态机设计,二进制状态机编码,状态机的每一个状态用二进制位来编码例:实现4状态的状态机,其二进制编码可为 状态1“00”状态2“01”状态3“10”状态4“11”特点触发器使用较少,速度较慢,可能产生两位同时翻转的情况。如:“01”“10”,格雷码状态机编码,格雷码编码每次仅一个状态位的值发生变化 例:实现4状态的状态机,其格雷码编码可为 状态1“00”状态2“01”状态3“11”状态4“10”特点触发器使用较少,速度较慢,不会产生两位同时翻转的情况。当状

42、态位的输出被异步应用时,格雷码编码是特别有益的,ONE HOT状态机编码,ONE HOT的编码方案对每一个状态采用一个触发器,即4个状态的状态机需4个触发器。同一时间仅1个状态位处于逻辑“l”电平例:实现4状态的状态机,其ONE HOT编码可为 状态1“0001”状态2“0010”状态3“0100”状态4“1000”特点触发器使用较多,但逻辑简单,速度快,编码方式的选择,根据状态机复杂程度状态特别多的系统只能采用2进制编码或格雷码编码根据器件类型FPGA一般采用ONE HOT编码,CPLD一般采用2进制编码或格雷码编码 从非法状态中退出在选择编码方案时,必须考虑状态机可能进入的潜在的非法状态数

43、目。如果违反了状态位触发器的建立或保持时间,又没有定义所有可能出现的状态,则你的设计会终止在非法状态上。,状态机设计实体描述,LIBRARY ieee;USE ieee.std_logic_1164.ALL;ENTITY state_machine IS PORT(clock,reset:IN std_logic;timer1,timer2,timer3:IN std_logic;r,y,g:OUT std_logic);END state_machine;,状态机设计方案一,ARCHITECTURE arch_1 OF state_machine ISTYPE traffic_states

44、IS(red,yellow,green);SIGNAL sm:traffic_states;BEGINfsm:PROCESS(clock,reset)BEGIN IF reset=1 THEN sm IF timer1=1 THEN sm IF timer2=1 THEN sm=yellow;END IF;,状态机设计方案一,WHEN yellow=IF timer3=1 THEN sm sm=red;END CASE;END IF;END PROCESS fsm;r=1 WHEN(sm=red)ELSE 0;g=1 WHEN(sm=green)ELSE 0;y=1 WHEN(sm=yello

45、w)ELSE 0;END arch_1;,方案分析,状态机设计方案二,ARCHITECTURE arch_2 OF state_machine ISTYPE traffic_states IS(red,yellow,green);SIGNAL sm:traffic_states;BEGINfsm:PROCESS(clock,reset)BEGIN IF reset=1 THEN sm IF timer1=1 THEN sm=green;r=0;g=1;y=0;ELSE sm=red;r=1;g=0;y=0;END IF;,状态机设计方案二,WHEN green=IF timer2=1 THEN

46、 sm IF timer3=1 THEN sm sm=red;END CASE;END IF;END PROCESS fsm;END arch_2;,方案二分析,状态机设计方案三,ARCHITECTURE arch_3 OF state_machine ISSIGNAL sm:std_logic_vector(2 DownTo 0);Constant red:std_logic_vector(2 DownTo 0):=”100;Constant green:std_logic_vector(2 DownTo 0):=010;Constant yellow:std_logic_vector(2

47、DownTo 0):=001;BEGIN fsm:PROCESS(clock,reset)BEGIN IF reset=1 THEN sm IF timer1=1 THEN sm=green;ELSE sm=red;END IF;,状态机设计方案三,WHEN green=IF timer2=1 THEN sm IF timer3=1 THEN sm sm=red;END CASE;END IF;END PROCESS fsm;r=sm(2);g=sm(1);y=sm(0);END arch_3;,方案三分析,VHDL 结构化设计基本单元,COMPONENTs已设计好的一个实体可被其它模块或高层

48、模块引用PACKAGEs类似于库,使实体和结构体内的数据类型、常量、子程序等对于其他设计单元可见,包括包体单元和说明单元LIBRARIES存放预先编译好的程序包和数据的集合体,结构化设计的方法比较,b,sel,mux2to1,a,c,symbolcomponent,schematicentity/architecture,top level schematictop level entity/architecture,r,toplevel,q,s,c,b,mux2to1,a,sel,t,p,层次化设计管理,Package 和Component 举例,LIBRARY ieee;USE ieee.

49、std_logic_1164.ALL;PACKAGE mymuxpkg ISCOMPONENT mux2to1 PORT(a,b,sel:IN std_logic;c:OUT std_logic);END COMPONENT;END mymuxpkg;,LIBRARY ieee;USE ieee.std_logic_1164.ALL;ENTITY mux2to1 IS PORT(a,b,sel:IN std_logic;c:OUT std_logic);END mux2to1;ARCHITECTURE archmux2to1 OF mux2to1 ISBEGIN c=(a AND NOT se

50、l)OR(b AND sel);END archmux2to1;,Package and Component Declaration File(VHDL),Entity/Architecture File(VHDL),元件例化举例,LIBRARY ieee;USE ieee.std_logic_1164.ALL;ENTITY toplevel IS PORT(s:IN std_logic;p,q,r:IN std_logic_vector(2 DOWNTO 0);t:OUT std_logic_vector(2 DOWNTO 0);END toplevel;USE WORK.mymuxpkg.

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号