《电子设计自动化技术(EDA)ppt课件.pptx》由会员分享,可在线阅读,更多相关《电子设计自动化技术(EDA)ppt课件.pptx(79页珍藏版)》请在三一办公上搜索。
1、EDA技术与应用 中国地质大学 通信工程系,数字系统中状态机的设计,回忆计数器设计,设计一电路,包含基4计数器,和译码输出模块。计数器的输出(Present_value)从0到3循环;当计数值为2时,译码输出(DataOut)为“1”,否则输出“0”。,Clk,Present_valueQ(n),Next_valueQ(n+1),译码,DataOutZ(n),00/0,01/0,10/1,11/0,00/0,01/0,10/1,11/0,扩展一个输入端din,当din = 1时计数器递增计数;当din = 0时计数器递减计数。,再将计数器修改成一个状态转换器,状态为S0, S1, S2, S3
2、。每个状态的取值根据具体情况而定。比如S0 = 00, S1 = 11, S3 = 01, S4 = 10。,再将计数器修改成一个状态转换器,状态为S0, S1, S2, S3。每个状态的取值根据具体情况而定。比如S0 = 00, S1 = 11, S3 = 01, S4 = 10。,现在我们得到了一个比较通用的时序电路,这种电路统称为状态机(State Machine)。,状态机的分类:,moore型和mealy型,状态机的表示方法1,方法一:状态转换表,状态机的表示方法2,方法二:算法流程图,方法与软件程序的流程图类似,状态转换表和算法流程图都不适合复杂系统的设计,状态机的表示方法3,方法
3、三:状态转换图,这是最流行的表示方法,状态1,状态4,状态2,状态3,入,/出,入,入,入,/出,/出,/出,Moore,条件控制定序,直接控制定序,状态机的表示方法3,方法三:状态转换图,这是最流行的表示方法,状态1,状态4,状态2,状态3,入,/出,入,入,入,/出,/出,/出,/出,Mealy,条件控制定序,直接控制定序,为什么要使用状态机,一般有限状态机的设计, 有限状态机克服了纯硬件数字系统顺序方式控制不灵活的缺点。, 状态机的结构模式相对简单。, 状态机容易构成性能良好的同步时序逻辑模块。, 状态机的VHDL表述丰富多样。, 在高速运算和控制方面,状态机更有其巨大的优势。, 就可靠
4、性而言,状态机的优势也是十分明显的。,有限状态机的VHDL设计,用户自定义数据类型定义语句,TYPE语句用法如下:TYPE 数据类型名 IS 数据类型定义 OF 基本数据类型 ;或TYPE 数据类型名 IS 数据类型定义 ;,以下列出了两种不同的定义方式:TYPE myarray IS ARRAY ( 0 TO 15 ) OF STD_LOGIC ;TYPE week IS (sun,mon,tue,wed,thu,fri,sat) ;,有限状态机的VHDL设计,用户自定义数据类型定义语句,TYPE m_state IS ( st0,st1,st2,st3,st4,st5 ) ;,SIGNAL
5、 present_state,next_state : m_state ;,一般有限状态机的设计实现,有限状态机的VHDL设计,1. 说明部分,2. 主控时序进程,一般状态机结构框图工作示意图,ARCHITECTURE .IS TYPE FSM_ST IS (s0,s1,s2,s3); SIGNAL current_state, next_state: FSM_ST; .,主控时序进程,主控组合进程,3. 主控组合进程,一般有限状态机的设计实现,主控组合进程的任务是根据外部输入的控制信号(包括来自状态机外部的信号和来自状态机内部其它非主控的组合或时序进程的信号),或(和)当前状态的状态值确定下
6、一状态(next_state)的取向,即next_state的取值内容,以及确定对外输出或对内部其它组合或时序进程输出控制信号的内容。,4. 辅助进程,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY s_machine IS PORT ( clk,reset : IN STD_LOGIC; state_inputs : IN STD_LOGIC_VECTOR (0 TO 1); comb_outputs : OUT INTEGER RANGE 0 TO 15 );END s_machine;ARCHITECTURE behv OF s_machi
7、ne IS TYPE FSM_ST IS (s0, s1, s2, s3); SIGNAL current_state, next_state: FSM_ST;BEGIN REG: PROCESS (reset,clk) BEGIN IF reset = 1 THEN current_state = s0; ELSIF clk=1 AND clkEVENT THEN current_state = next_state; END IF; END PROCESS; COM:PROCESS(current_state, state_Inputs),有限状态机的VHDL设计实例,BEGIN CASE
8、 current_state IS WHEN s0 = comb_outputs comb_outputs comb_outputs comb_outputs = 14; IF state_inputs = 11 THEN next_state = s3; ELSE next_state = s0; END IF; END case; END PROCESS; END behv;,接上页,思考:moore?ormealy?,状态机的工作时序图,一般有限状态机的设计,状态机的应用设计,例子:设计一个二进制序列检测器,当检测到10110序列时,就输出1(一个时钟周期的脉冲)。其他情况下输出0。 规
9、定检测到一次之后,检测器复位到最初始的状态,重新从头检测。如下所示:,输入:01101101101100,输出:00000001000001,状态转换图设计(Moore),1,0,1,1,0,S0/0,S1/0,S2/0,S3/0,S4/0,S5/1,Reset,1,1,0,0,1,1,0,1,0,0,1,0,1,0,1,1,0,s1,s2,s3,s4,s5,s0,问题1:如何保证状态机在初始时状态为s0?,问题2:在状态机跑飞,即脱离有效状态(s0s5)时,如何使状态机能恢复工作,Sx/0,波形,波形如下图所示,问题:如果需要将输出脉冲往前推一个时钟周期,该如何修改设计?,1,0,1,1,0
10、,1,0,1,1,0,s1,s2,s3,s4,s5,s0,输入,时钟,输出,当前状态,发现当当前壮态为s4,并且输入为0时,输出为1。,状态转换图设计(Mealy),S0,S1,S2,S3,S4,S5,Reset,1,0,0,1,1,0,1,0,0,1,0,1,sX,/0,/0,/0,/0,/0,/0,/0,/0,/0,/1,/0,/0,1,0,1,1,0,1,0,1,1,0,s1,s2,s3,s4,s5,s0,/0,0/1,s0,练习:用状态机设计序列检测器(1101001),在通信系统中可以有什么用途?,用VHDL设计状态机,AD574A采样控制状态机, VHDL综合器易于优化, 易构成性
11、能良好的时序逻辑模块, 结构模式简单、层次分明、易读易懂、易排错, 运行模式类似于CPU,易于进行顺序控制,利用同步时序和全局时钟线可实现高速FSM, 高可靠性,非法状态易控制,为什么要使用状态机?,AD574控制方法,现在我们来讨论AD574A 的CE、12/n8、nCS、R/nC和A0 对其工作状态的控制过程。在CE=1、nCS=0 同时满足时,AD574A 才会正常工作,在AD574 处于工作状态时,当R/nC=0 时A/D 转换,当R/nC=1 时进行数据读出。12/n8和A0 端用来控制启动转换的方式和数据输出格式。A0=0时,启动的是按完整12 位数据方式进行的。当A0=1 时,按
12、8 位A/D 转换方式进行。当R/nC=1,也即当AD574A 处于数据状态时,A0 和12/n8控制数据输出状态的格式。当12/n8=1 时,数据以12 位并行输出,当12/n8=0 时,数据以8 位分两次输出。而当A0=0 时,输出转换数据的高8 位,A0=1 时输出A/D 转换数据的低4 位,这四位占一个字节的高半字节,低半字节补零。其控制逻辑真值表见表1。,Moore型有限状态机的设计,三进程有限状态机,CE nCS R/nC 12/n8 A0工 作 状 态0XXXX禁止X1XXX禁止100X0启动12位转换100X1启动8位转换1011X12位并行输出有效10100高8位并行输出有效
13、10101低4位加上尾随4个0有效,AD574逻辑控制真值表(X表示任意),三进程有限状态机,AD574工作时序,STATUS:AD574芯片的一个输出引脚,标志芯片的忙或闲的状态,在转换进行时,它为高电平,转换结束时变低电平。,8051与AD574的接口电路,三进程有限状态机,AD574工作时序,三进程有限状态机,采样状态机结构框图,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY AD574 IS PORT (D :IN STD_LOGIC_VECTOR(11 DOWNTO 0); CLK ,STATUS : IN STD_LOGIC;-状
14、态机时钟CLK,AD574状态信号STATUS LOCK0 : OUT STD_LOGIC; -内部锁存信号LOCK的测试信号 CS,A0,RC,K12X8 : OUT STD_LOGIC; -AD574控制信号 Q : OUT STD_LOGIC_VECTOR(11 DOWNTO 0); -锁存数据输出END AD574;ARCHITECTURE behav OF AD574 ISTYPE states IS (st0, st1, st2, st3,st4); SIGNAL current_state, next_state: states :=st0 ; SIGNAL REGL : STD
15、_LOGIC_VECTOR(11 DOWNTO 0); SIGNAL LOCK : STD_LOGIC; BEGIN K12X8 = 1; LOCK0 = LOCK ; COM1: PROCESS(current_state,STATUS) -决定转换状态的进程 接下页,三进程有限状态机,BEGIN CASE current_state IS WHEN st0 = next_state next_state IF (STATUS=1) THEN next_state next_state next_state next_state CS CS CS CS CSCS=1; A0=1;RC=1;L
16、OCK=0;-其它情况返回初始态 接下页,接上页,END CASE ; END PROCESS COM2 ; REG: PROCESS (CLK) - 时序进程 BEGIN IF ( CLKEVENT AND CLK=1) THEN current_state = next_state; END IF; END PROCESS REG; LATCH1 : PROCESS (LOCK) - 数据锁存器进程 BEGIN IF LOCK=1 AND LOCKEVENT THEN REGL = D ; END IF; END PROCESS ; Q = REGL; END behav;,接上页,三进程
17、有限状态机,AD574采样状态机工作时序,单进程Moore型有限状态机,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MOORE1 IS PORT (DATAIN :IN STD_LOGIC_VECTOR(1 DOWNTO 0); CLK,RST : IN STD_LOGIC; Q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END MOORE1;ARCHITECTURE behav OF MOORE1 IS TYPE ST_TYPE IS (ST0, ST1, ST2, ST3,ST4); SIGNAL C_ST :
18、 ST_TYPE ; BEGIN PROCESS(CLK,RST) BEGIN IF RST =1 THEN C_ST = ST0 ; Q= 0000 ; ELSIF CLKEVENT AND CLK=1 THEN 接下页,CASE C_ST IS WHEN ST0 = IF DATAIN =10 THEN C_ST IF DATAIN =11 THEN C_ST IF DATAIN =01 THEN C_ST IF DATAIN =00 THEN C_ST IF DATAIN =11 THEN C_ST C_ST = ST0; END CASE; END IF; END PROCESS;EN
19、D behav;,接上页,状态机综合后的RTL电路模块图,单进程Moore型有限状态机,单进程Moore型有限状态机,单进程状态机工作时序,单进程Moore型有限状态机,2进程状态机工作时序图,Mealy型有限状态机的设计,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;ENTITY MEALY1 ISPORT ( CLK ,DATAIN,RESET : IN STD_LOGIC; Q : OUT STD_LOGIC_VECTOR(4 DOWNTO 0);END MEALY1;ARCHITECTURE behav OF MEALY1 IS TYPE stat
20、es IS (st0, st1, st2, st3,st4); SIGNAL STX : states ; BEGIN COMREG : PROCESS(CLK,RESET) -决定转换状态的进程 BEGIN IF RESET =1 THEN STX = ST0; ELSIF CLKEVENT AND CLK = 1 THEN,接下页,CASE STX IS WHEN st0 = IF DATAIN = 1 THEN STX IF DATAIN = 0 THEN STX IF DATAIN = 1 THEN STX IF DATAIN = 0 THEN STX IF DATAIN = 1 TH
21、EN STX STX IF DATAIN = 1 THEN Q IF DATAIN = 0 THEN Q IF DATAIN = 1 THEN Q IF DATAIN = 0 THEN Q = 11011 ; ELSE Q=01001 ; END IF ;,WHEN st4= IF DATAIN = 1 THEN Q Q=00000 ; END CASE ;END PROCESS COM1 ;END behav;,接上页,上例状态机工作时序图,MEALY2: LIBRARY IEEE; -MEALY FSMUSE IEEE.STD_LOGIC_1164.ALL;ENTITY MEALY2 IS
22、 PORT ( CLK ,DATAIN,RESET : IN STD_LOGIC; Q : OUT STD_LOGIC_VECTOR(4 DOWNTO 0);END MEALY2;ARCHITECTURE behav OF MEALY2 IS TYPE states IS (st0, st1, st2, st3,st4); SIGNAL STX : states ; SIGNAL Q1 : STD_LOGIC_VECTOR(4 DOWNTO 0); BEGIN COMREG : PROCESS(CLK,RESET) -决定转换状态的进程 BEGIN IF RESET =1 THEN STX I
23、F DATAIN = 1 THEN STX IF DATAIN = 0 THEN STX IF DATAIN = 1 THEN STX IF DATAIN = 0 THEN STX IF DATAIN = 1 THEN STX STX = st0; END CASE ;,接下页,END IF; END PROCESS COMREG ;COM1: PROCESS(STX,DATAIN,CLK) -输出控制信号的进程 VARIABLE Q2 : STD_LOGIC_VECTOR(4 DOWNTO 0);BEGIN CASE STX IS WHEN st0 = IF DATAIN = 1 THEN
24、Q2 := 10000 ; ELSE Q2 := 01010 ; END IF ; WHEN st1 = IF DATAIN = 0 THEN Q2 := 10111 ; ELSE Q2:=10100 ; END IF ; WHEN st2 = IF DATAIN = 1 THEN Q2 := 10101 ; ELSE Q2:=10011 ; END IF ; WHEN st3= IF DATAIN = 0 THEN Q2 := 11011 ; ELSE Q2:=01001 ; END IF ; WHEN st4= IF DATAIN = 1 THEN Q2 := 11101 ; ELSE Q
25、2:=01101 ; END IF ; WHEN OTHERS = Q2:=00000 ; END CASE ;,接下页,IF CLKEVENT AND CLK = 1 THEN Q1=Q2; END IF; END PROCESS COM1 ; Q = Q1 ;END behav;,接上页,上例状态机工作时序图,1,检测三个连续1的状态机,用两进程的vhdl程序描述该状态机。,2,状态机有两个输入a,b,一个输出c,如果检测到输入对的序列为,a1 b1,a1 b0,a0 b0,那么c在序列的最后一个周期变为1,其他输出保持为0。用两进程的vhdl程序描述该状态机。,课后作业,状态机的状态编码
26、,1.状态位直接输出型编码,控制信号状态编码表,每一位的编码值都赋予了实际的控制功能,即: CS = current_state(4) ; A0 = current_state(3) ; RC = current_state(2) ; LOCK = current_state(1) 。,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY AD574A IS PORT ( D : IN STD_LOGIC_VECTOR(11 DOWNTO 0); CLK ,STATUS : IN STD_LOGIC; OUT4 : OUT STD_LOGIC_VECT
27、OR(3 DOWNTO 0); Q : OUT STD_LOGIC_VECTOR(11 DOWNTO 0) );END AD574A;ARCHITECTURE behav OF AD574A ISSIGNAL current_state, next_state: STD_LOGIC_VECTOR(4 DOWNTO 0 ); CONSTANT st0 : STD_LOGIC_VECTOR(4 DOWNTO 0) := 11100 ; CONSTANT st1 : STD_LOGIC_VECTOR(4 DOWNTO 0) := 00001 ; CONSTANT st2 : STD_LOGIC_VE
28、CTOR(4 DOWNTO 0) := 00000 ; CONSTANT st3 : STD_LOGIC_VECTOR(4 DOWNTO 0) := 00100 ; CONSTANT st4 : STD_LOGIC_VECTOR(4 DOWNTO 0) := 00110 ; SIGNAL REGL : STD_LOGIC_VECTOR(11 DOWNTO 0); SIGNAL LK : STD_LOGIC; BEGIN COM1: PROCESS(current_state,STATUS) -决定转换状态的进程,接下页,BEGIN CASE current_state IS WHEN st0
29、= next_state next_state IF (STATUS=1) THEN next_state next_state next_state next_state = st0; END CASE ; OUT4 = current_state(4 DOWNTO 1); END PROCESS COM1 ; REG: PROCESS (CLK) - 时序进程 BEGIN IF ( CLKEVENT AND CLK=1) THEN current_state = next_state; END IF; END PROCESS REG; LK = current_state(1) ; LAT
30、CH1 : PROCESS ( LK ) - 数据锁存器进程 BEGIN IF LK=1 AND LKEVENT THEN REGL = D ;,接下页,END IF; END PROCESS ; Q = REGL; END behav;,接上页,上例状态机工作时序图,2.顺序编码,编码方式,.SIGNAL CRURRENT_STATE,NEXT_STATE: STD_LOGIC_VECTOR(2 DOWNTO 0 );CONSTANT ST0 : STD_LOGIC_VECTOR(2 DOWNTO 0) := 000 ;CONSTANT ST1 : STD_LOGIC_VECTOR(2 DO
31、WNTO 0) := 001 ;CONSTANT ST2 : STD_LOGIC_VECTOR(2 DOWNTO 0) := 010 ;CONSTANT ST3 : STD_LOGIC_VECTOR(2 DOWNTO 0) := 011 ;CONSTANT ST4 : STD_LOGIC_VECTOR(2 DOWNTO 0) := 100 ;,3.一位热码编码(One-hot encoding),一位热码编码方式选择窗,状态机编码方式设置,状态机剩余状态处理,剩余状态,(1) 在语句中对每一个非法状态都作出明确的状态转换指示: when st_ilg1 = next_state next_st
32、ate = st0;,状态机剩余状态处理,(2) 利用others语句中对未提到的状态作统一处理: when others = next_state = st0;,.TYPE states IS (st0, st1,st2,st3,st4,st_ilg1,st_ilg2,st_ilg3); SIGNAL current_state, next_state: states;.COM:PROCESS(current_state, state_Inputs) - 组合逻辑进程BEGIN CASE current_state IS - 确定当前状态的状态值 . WHEN OTHERS = next_s
33、tate = st0; END case;,.alarm = (st0 AND (st1 OR st2 OR st3 OR st4 OR st5) OR (st1 AND (st0 OR st2 OR st3 OR st4 OR st5) OR (st2 AND (st0 OR st1 OR st3 OR st4 OR st5) OR (st3 AND (st0 OR st1 OR st2 OR st4 OR st5) OR (st4 AND (st0 OR st1 OR st2 OR st3 OR st5) OR (st5 AND (st0 OR st1 OR st2 OR st3 OR s
34、t4) ;,one-hot 编码方式的剩余状态处理,状态机,状态机的设计风格,1、Moore状态机:输出仅与当前状态有关2、Mealy状态机:输出与当前状态和输入信号均有关,状态分配,状态的分配对于状态机的设计至关重要,分配的不合理会导致运行速度慢,或者消耗过多的资源。Highly Encoded State Assignment利用最少的寄存器,当状态增加时,系统速度会显著降低。以输出信号作为编码选择依据One-hot Encoding一个寄存器分配给一个状态使用Almost One-hot Encoding例如有两组功能相近的状态机,用1bit区分状态机,其余的bit可表示不同的状态。,以
35、输出信号作为编码选择依据,最简化状态,经过转换后的状态机图,One-hot Encoding的优点,速度快准最佳的状态分配(其他的状态分配即使达到最佳,但如果增加状态或者改变一点功能后,就不一定是最佳)。设计方便修改方便消耗的资源较多便于调试,状态分配,错误恢复和非法状态,采用Highly Encoded State Assignment出现状态跳转错误时,所处状态仍为合法状态。出现错误时能够自动回到合法状态。(在数电里所谓的自启动功能)处于合法状态并不表示电路能工作正常。采用One-hot Encoding合法状态少,非法状态多,因此在跳到非法状态时,可以采用有效检测并采取相应的保护手段。,
36、Highly Encode,Type state_type is (A,B,C); process(clk) begin if(clkevent and clk=1) then CASE state ISWHEN A = if(inx=1) then state if(inx=1) then state if(inx=1) then state= C; elsif(inx=0) then state= A; end if;END CASE; end if; end process;,One-hot Encoding(1),architecture one of statemachine2 is
37、 constant A :std_logic_vector(2 downto 0) := 001; constant B :std_logic_vector(2 downto 0) := 010; constant C :std_logic_vector(2 downto 0) := 100; signal state : std_logic_vector( 2 downto 0);begin process(clk) begin if(reset = 0) then state if(inx=1) then state if(inx=1) then state if(inx=1) then
38、state= C; elsif(inx=0) then state= A; end if; END CASE; end if; end process; end one;,One-hot Encoding(2-1),process(inx , iState) variable iNext_State :std_logic_vector ( 2 downto 0); begin iNext_State := 000; if(istate (0)=1) then if(inx=1) then iNext_State(1) := 1; elsif(inx=0) then iNext_State(0)
39、 := 1; end if; elsif(istate (1)=1)then if(inx=1) then iNext_State(2) := 1; elsif(inx=0) then iNext_State(0) := 1; end if;else if(inx=1) then iNext_State(2) := 1; elsif(inx=0) then iNext_State(0) := 1; end if; end if; next_state = iNext_State; end process;,One-hot Encoding(2-2),process(clk)begin if(r
40、eset=0) then istate = 001; elsif(clkevent and clk=1) then istate = next_state; end if;end process;,实验三:数字钟设计,基本要求:1、24小时计数显示(时分秒);2、具有校时功能(时,分) ;附加要求:实现闹钟功能(定时,闹响);提示功能(如校时的字符闪烁);注:分组完成,每组2人。,设计要求,设计一个能进行时、分、秒计时的十二小时制或二十四小时制的数字钟,并具有定时与闹钟功能,能在设定的时间发出闹铃音,能非常方便地对小时、分钟和秒进行手动调节以校准时间,每逢整点,产生报时音报时。,设计提示,主控
41、电路计数器模块扫描显示,主控电路,A、B:模式选择,AB=00为模式0,计时状态; AB=01为模式1,手动校时状态; AB=10为模式2,闹钟设置状态。Turn:turn=0时,在手动校对时,选择调整分钟部分; turn=1时,在手动校对时,选择调整小时部分。Change:在手动校时或闹钟设置模式下,每按一次,计数器加1。Reset:reset=0时,整个系统复位;reset=1时,系统计时或其它特殊功能操作。Reset1:reset1=0时,关闭闹铃信号; reset1=1时,可对闹铃进行设置。状态显示信号(发光管):LD_alert:指示是否设置了闹铃功能;LD_h:指示当前调整的是小时信号;LD_m:指示当前调整的是分钟信号。,考虑输入:ClkModeSet,输出:DisplayFounctionAlarm,计数模块,显示模块,控制模块,分频模块,计数模块,显示模块,控制模块,分频模块,alarm,日期设置,报告要求:每组提交一份打印版,页数不多于8页。包括运行结果,不包括VHDL程序。报告内容要求:写明组内成员具体工作,尽量详细各模块应给出简要说明、端口定义和结构框图严禁抄袭、伪造实验数据。,