K述列 接上页 WhEN St0=> IF dataiN =1THEN STX <=stl: END IF: WheN St1=> IF dATAIN =0 THEN STX < St2 END IF: WheN St2=> IF datain =1 THEN STX < St3: ENd IF: WhEN St3=> IF daTaiN=0 THEN STX < st4; END IF; WhEN St4=> IF DATAIN ='1 THEN STX < StO: ENd IF WHEN OTHERS=> STX<=St0 END CASE END IEi END卫 ROCESS COMRE coM1: PROCESS(sTx, DATAIN) BEGIN--输出控制信号的进程 CASE STX工S end behavi
KX 康芯科技 接上页 WHEN st0 => IF DATAIN = '1' THEN STX <= st1; END IF; WHEN st1 => IF DATAIN = '0' THEN STX <= st2; END IF; WHEN st2 => IF DATAIN = '1' THEN STX <= st3; END IF; WHEN st3=> IF DATAIN = '0' THEN STX <= st4; END IF; WHEN st4=> IF DATAIN = '1' THEN STX <= st0; END IF; WHEN OTHERS => STX <= st0; END CASE ; END IF; END PROCESS COMREG ; COM1: PROCESS(STX,DATAIN) BEGIN --输出控制信号的进程 CASE STX IS END behav;
K述列 接上页 WHeN sto = IF DATAIN = '1 THEN Q <="10000 ELSE <=01010 ENd IF WHEN stl = IF DATAIN =0 THEN Q <=10111"i ELSE <=10100"END IF WHEN st2 =>IF DATAIN =1 TheN Q <=10101; ELSE <=10011 END IF; WHEN st3=> IF DATAIN =0 THEN Q <=11011"i ElSE <=01001 END IF WheN st4=> IF DATAIN =1 THEN Q <=11101" ELSE <=01101"END IF WHEN OTHERS Q<="00000"; END CASE END PROCESS COM1
KX 康芯科技 接上页 WHEN st0 => IF DATAIN = '1' THEN Q <= "10000" ; ELSE Q<="01010" ; END IF ; WHEN st1 => IF DATAIN = '0' THEN Q <= "10111" ; ELSE Q<="10100" ; END IF ; WHEN st2 => IF DATAIN = '1' THEN Q <= "10101" ; ELSE Q<="10011" ; END IF ; WHEN st3=> IF DATAIN = '0' THEN Q <= "11011" ; ELSE Q<="01001" ; END IF ; WHEN st4=> IF DATAIN = '1' THEN Q <= "11101" ; ELSE Q<="01101" ; END IF ; WHEN OTHERS => Q<="00000" ; END CASE ; END PROCESS COM1 ;
M.康芯科技 【例7-6】 MEALY2 工工 BRARY工EEp; MEALY FsM USE IEEE STD LOGIC 1164.ALL ENTITY MEALY2 IS PORT CLK DATAIN, RESET 工 N STD LOG工c; Q: OUT STD LOGIC VECTOR (4 DOWNTO 0))i END MEALY2 ARCHITECtURE behay OF MEAL Y2 IS TYPE states Is ( sto, stl st2 st3, st4)i SIGNAL STX states i SIGNAL Q1: STD LOGIC VECTOR (4 DOWNTO 0)i BEG工N COMREG PROCESS (CLK, RESET) 决定转换状态的进程
KX 康芯科技 【例7-6】MEALY2 LIBRARY IEEE; --MEALY FSM USE IEEE.STD_LOGIC_1164.ALL; ENTITY MEALY2 IS 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) --决定转换状态的进程
接上页 BEG工N 工 F RESET=1HEN STX <=sT0; EL SIE CLK' EVENT AND CLK I1 THEN CASE STX IS When sto 工 F DATAIN=1, THEN STX<=st1;END工E; When st1 = IF DATAIN =101 THEN STX st2: END IF; When st2=> LE DATAIN='1 THEN S四X<=st3;END工F WheN st3→>工 F DATAIN=' 0 THEN STX<=st4;END工F; WheN st4→>工 F DATAIN='1 THEN STX<=st0;END工F; WHEN OTHERS = STX < stO END CASE i END工F; END PROCESS COMREG COM1: PROCESS(STX, DATAIN, ClK) 输出控制信号的进程 VARIABLE Q2: STD LOGIC VECTOR(4 DOWNTo 0)i
KX 接上页 康芯科技 BEGIN IF RESET ='1' THEN STX <= ST0; ELSIF CLK'EVENT AND CLK = '1' THEN CASE STX IS WHEN st0 => IF DATAIN = '1' THEN STX <= st1; END IF; WHEN st1 => IF DATAIN = '0' THEN STX <= st2; END IF; WHEN st2 => IF DATAIN = '1' THEN STX <= st3; END IF; WHEN st3=> IF DATAIN = '0' THEN STX <= st4; END IF; WHEN st4=> IF DATAIN = '1' THEN STX <= st0; END IF; WHEN OTHERS => STX <= st0; END CASE ; END IF; END PROCESS COMREG ; COM1: PROCESS(STX,DATAIN,CLK) --输出控制信号的进程 VARIABLE Q2 : STD_LOGIC_VECTOR(4 DOWNTO 0);
K述列 接上页 BEGIN CASE STX IS WhEN Sto=> IF DATAIN='1 THEN Q2: 10000 Else Q2: 01010 ENd IF; WheN St1=> IF DATAIN=O' THEN Q2: =10111; ELsE Q2: 10100 END IF WhEN st2=> IF DATAIN=1THEN 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 Q2: 01101; ENd IF; WHEN OTHERS => Q2: =00000 END CASE IF CLK'EVENT AND CLK=1 THEN Q1<=Q2; END IF; END PROCESS COMI Q<=Q1; end behav;
KX 康芯科技 接上页 BEGIN CASE STX IS WHEN st0=> IF DATAIN='1' THEN 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 Q2:="01101"; END IF; WHEN OTHERS => Q2:="00000" ; END CASE ; IF CLK'EVENT AND CLK = '1' THEN Q1<=Q2; END IF; END PROCESS COM1 ; Q <= Q1 ; END behav;