康芯科技 CAsE current s七 ate Is When sto=>ALE<0: START<=0: lOCK<=0: OE<=0 r next state<=st1;--0809初始化 When stl=>ALE<=1 START<=1: LOCK<=0: OK<=0r next state<=st2;--启动采样 WheN st2=> AlE<='0!i START<='0'i LOCK<=0 0E<=0i 工F(EOC=11') ThEn next state<=gt3;--EOc=1表明转换结束 ElSE next state < st2; 转换未结束,继续等待 END IE WhEN st3=> AlE<='0 START<=0 LOCK<=0: OE<='1'i next state<=st4;--开启oE,输出转换好的数据 When st4=> AlE<='o: START<=0 lOCK<=1: OF<= 1 next state < sto WhEn OTHERS = next state < sto END CASE END PROCESS COM REG: PROCESS (CLK) BEG工N IF (CLK'EVENT AND CLK='1')ThEn current state<=next statei END工F; END PROCESS REG 由信号 urrent state将当前状态值带出此进程:REG LATCH1: PROCESS(LOcK)--此进程中,在IOCK的上升沿,将转换好的数据锁入 BEGIN IF LOCK= ' AND LOCK'EVENT THEN REGL <=D i END工E; END PROCESS LATCH1 i END be hav;
KX 康芯科技 CASE current_state IS WHEN st0=>ALE<='0';START<='0';LOCK<='0';OE<='0'; next_state <= st1; --0809初始化 WHEN st1=>ALE<='1';START<='1';LOCK<='0';OE<='0'; next_state <= st2; --启动采样 WHEN st2=> ALE<='0';START<='0';LOCK<='0';OE<='0'; IF (EOC='1') THEN next_state <= st3; --EOC=1表明转换结束 ELSE next_state <= st2; --转换未结束,继续等待 END IF ; WHEN st3=> ALE<='0';START<='0';LOCK<='0';OE<='1'; next_state <= st4;--开启OE,输出转换好的数据 WHEN st4=> ALE<='0';START<='0';LOCK<='1';OE<='1'; next_state <= st0; WHEN OTHERS => next_state <= st0; END CASE ; END PROCESS COM ; REG: PROCESS (CLK) BEGIN IF (CLK'EVENT AND CLK='1') THEN current_state<=next_state; END IF; END PROCESS REG ; -- 由信号current_state将当前状态值带出此进程:REG LATCH1: PROCESS (LOCK) -- 此进程中,在LOCK的上升沿,将转换好的数据锁入 BEGIN IF LOCK='1' AND LOCK'EVENT THEN REGL <= D ; END IF; END PROCESS LATCH1 ; END behav;
K述列 72 Moore型有限状态机的设计 721多进程有限状态机 Name 50us100us150us20s250us300us350s400us450us500us550s600us650us70.0us750u CLK 1 UUUUUUUUUUUTUUUUUTUTUUTUTuuuuu O START mALE EOC 10000m3 D5 XX3B2482 D5 13 48 5F O LOCKO cuent stateH2802340a234023a0n234@X2a4N REGL H13 D5 图76ADC0809采样状态机工作时序
KX 康芯科技 7.2.1 多进程有限状态机 7.2 Moore型有限状态机的设计 图7-6 ADC0809采样状态机工作时序
721三进程有限状态机 K述列 【例7-3】 COMI: PROCESS(current state, EOC) BEGIN CaSE current state Is WhEN Sto=> next state < stl WhEN Stl=> next state < st2 WhEN St2=>IF(EoC='1)Then next state < st3; ELSE next state <=st2; ENd IF; WhEN St3=> next state<=st4;-开启OE WhEN St4=> next state < stO WHEN OTHERS=> next state < stO END CASE END PROCESS COMI: COM2: PROCESS(current state) BEGIN cASE current state s WhEN sto=>ALE<=0 START<=0 LOCK<=0; OE<=0; WhEN st1=>ALE<='l START<=l LOCK<=0 OE<=0; WhEN st2=>ALE<=0 START<=0 LOCK<=0; OE<=0; WhEN St3=>ALE<=0; START<=0’;LOCK<="0’;OE<=1’; WheN St=>ALE<=0 START<=0: LOCK<=1: OE<='1' WHEN OTHERS=>ALE<=0’; START<="0’;LOCk<=0’; END CASE END PROCESS COM2
KX 康芯科技 【例7-3】 COM1: PROCESS(current_state,EOC) BEGIN CASE current_state IS WHEN st0=> next_state <= st1; WHEN st1=> next_state <= st2; WHEN st2=> IF (EOC='1') THEN next_state <= st3; ELSE next_state <= st2; END IF ; WHEN st3=> next_state <= st4;--开启OE WHEN st4=> next_state <= st0; WHEN OTHERS => next_state <= st0; END CASE ; END PROCESS COM1 ; COM2: PROCESS(current_state) BEGIN CASE current_state IS WHEN st0=>ALE<='0';START<='0';LOCK<='0';OE<='0' ; WHEN st1=>ALE<='1';START<='1';LOCK<='0';OE<='0' ; WHEN st2=>ALE<='0';START<='0';LOCK<='0';OE<='0' ; WHEN st3=>ALE<='0';START<='0';LOCK<='0';OE<='1' ; WHEN st4=>ALE<='0';START<='0';LOCK<='1';OE<='1' ; WHEN OTHERS => ALE<='0';START<='0';LOCK<='0'; END CASE ; END PROCESS COM2 ; 7.2.1 三进程有限状态机
K述列 72 Moore型有限状态机的设计 722单进程 Moore型有限状态机 【例7-4】 工工 BRARY工EEE; UsE工EEE.STD工oGTC1164.ATL ENTITY MOORE1 IS PORT(DATAIN IN STD LOGIC VECTOR(1 DOWNTO 0)i ClK, RST IN STD LOGICi Q: OUT STD LOGIC VECTOR (3 DOWNTo 0)); END MOOREl; ARCH ITECTURE behav OF MOORE1 IS Ⅳ YPE ST YP工s(ST0,ST1,s2,S3,S4) SIGNAL C ST: ST TYPE i
KX 康芯科技 7.2.2 单进程Moore型有限状态机 7.2 Moore型有限状态机的设计 【例7-4】 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 : ST_TYPE ;
M.康芯种技 接上页 BEG工N PROCESS(CLK,RS卫) BEG工N 工ERST=1T班 EN C ST<=ST0;Q<="0000"; ELSIF CLK EVENT AND CLK=1 THEN CASE C ST IS WHEN STO = IF DATAIN =10 THEN C ST < STI ELSE C ST <E STO END IF Q<="1001" WHEN ST1 => IF DATAIN =11 THEN C ST < ST2 ELSE C ST<=ST1;END工F; Q<="0101"; WHEN ST2=>IF DATAIN =01 THEN C ST < ST3 ELSE C ST<=ST0;END工F; Q<="1100";
KX 康芯科技 接上页 BEGIN PROCESS(CLK,RST) BEGIN IF RST ='1' THEN C_ST <= ST0 ; Q<= "0000" ; ELSIF CLK'EVENT AND CLK='1' THEN CASE C_ST IS WHEN ST0 => IF DATAIN ="10" THEN C_ST <= ST1 ; ELSE C_ST <= ST0 ; END IF; Q <= "1001" ; WHEN ST1 => IF DATAIN ="11" THEN C_ST <= ST2 ; ELSE C_ST <= ST1 ;END IF; Q <= "0101" ; WHEN ST2 => IF DATAIN ="01" THEN C_ST <= ST3 ; ELSE C_ST <= ST0 ;END IF; Q <= "1100" ;