K科技 5.2 Moore状态机 5.2.1多进程状态机 Name: Value: 5.0us10.0us 150us20.0us25.0us30.0us350us40.0us45.0us50,0us550us60.0us65.0us70.0us750u CLK UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUT START 0 ALE 0 -EOC 0 @0E 0 D HZZ 05 3B 49 4C 司0 H13 00 05 13 3B 48 4C (5F LOCKD 0 current state H2 0u 2 E400 炮400X 2 4002■ 3300X 2 E00 2 炮0以 REGL H13 因 48 4C 5F 图5-6ADC0809采样状态机工作时序
KX 康芯科技 5.2 Moore状态机 5.2.1 多进程状态机 图5-6 ADC0809采样状态机工作时序
K康还科技 【例5-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 stO=>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<=0START<=0LOCK<=0; END CASE END PROCESS COM2;
KX 康芯科技 【例5-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 ;
K科技 5.2 Moore状态机 5.2.2单进程Moore状态机 【例5-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 (STO,ST1,ST2,ST3,ST4); SIGNAL C ST ST TYPE BEGIN PROCESS(CLK,RST) BEGIN IF RST ='1'THEN C ST <=STO ;Q<="0000" ELSIF CLK'EVENT AND CLK='1 THEN (接下页)
KX 康芯科技 5.2 Moore状态机 5.2.2 单进程Moore状态机 【例5-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 ; 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 STO =IF DATAIN ="10"THEN C ST <ST1; ELSE C ST <=STO;END IF; 9<="1001"; WHEN ST1 =IF DATAIN ="11"THEN C ST <ST2 ELSE C ST <ST1 ;END IF; 9<="0101"; WHEN ST2 =IF DATAIN ="01"THEN C ST <ST3 ELSE C ST <STO ;END IF; Q<="1100"; WHEN ST3=>IF DATAIN="O0"THEN C ST<←ST4; ELSE C ST <ST2 ;END IF; 9<="0010"; WHEN ST4 =IF DATAIN ="11"THEN C ST <STO ELSE C ST <ST3 ;END IF; 9<="1001"; WHEN OTHERS =C ST <STO; END CASE; END IF; END PROCESS; END behav;
KX 康芯科技 5.2 Moore状态机 5.2.2 单进程Moore状态机 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" ; WHEN ST3 => IF DATAIN ="00" THEN C_ST <= ST4 ; ELSE C_ST <= ST2 ;END IF; Q <= "0010" ; WHEN ST4 => IF DATAIN ="11" THEN C_ST <= ST0 ; ELSE C_ST <= ST3 ;END IF; Q <= "1001" ; WHEN OTHERS => C_ST <= ST0; END CASE; END IF; END PROCESS; END behav;
K能苏科技 5.2 Moore状态机 5.2.2单进程Moore状态机 statemachine DATAINI1::0 11:01 1:0] CLK Q4:0] 041 RST R I3 c_st0:41 01 321 0 D[3:0]Q30] 30130Q30] R e 图5-7例5-4状态机综合后的部分主要RTL电路模块(Synplify综合)
KX 康芯科技 5.2 Moore状态机 5.2.2 单进程Moore状态机 图5-7 例5-4状态机综合后的部分主要RTL电路模块(Synplify综合)