무어머신입니다 헿

USE ieee.std_logic_1164.all ;

ENTITY simple IS
	PORT (	clock   : IN STD_LOGIC ;
                     resetn  : IN STD_LOGIC ;
                     w          : IN STD_LOGIC ;
			 z          : OUT STD_LOGIC ) ;
END simple ;

ARCHITECTURE Behavior OF simple IS
	TYPE State_type IS (A, B, C) ;
	SIGNAL y : State_type ;
BEGIN
	PROCESS ( resetn, clock )
	BEGIN
		IF resetn = '0' THEN
			y <= A ;
		ELSIF (Clock'EVENT AND Clock = '1') THEN
        CASE y IS
				WHEN A =>
					IF w = '0' THEN 
						y <= A ;
					ELSE 
						y <= B ;
					END IF ;
				WHEN B =>
					IF w = '0' THEN
						y <= A ;
					ELSE
						y <= C ;
					END IF ;
				WHEN C =>
					IF w = '0' THEN
						y <= A ;
					ELSE
						y <= C ;
					END IF ;
			END CASE ;
            END IF ;
	   END PROCESS ;
	
         z <= '1' WHEN y = C ELSE '0' ;

END Behavior ;

무어머신 VHDL code해석을 진행해보도록 하겠습니다......

우선 환경 설정을 해주고 clock과 reset을 선언해주고 w라는 인풋과 z라는 인풋을 선언해줍니다.

그리고 스테이트들을 선언을 해줍니다.

y는 현재 상태를 저장하는 신호로 초기상태 'A'로 설정됩니다.

PROCESS블록에서는 clock과 resetn의 신호를 감지하고이에따라 동작을 제어합니다.

만약 resetn의 신호가 0이면 y는 초기상태의 A로 설정됩니다.

만약 현재 스테이트가 A라면 인풋으로 0이 들어온다면 현재상태 A인 그대로 있으며 그게 아니라면 스테이트는 B로 설정이 됩니다. 만약 현재 상태가 B라면 인풋으로 0이 들어온다면 스테이트는 A로 바뀔것이며 그게 아니라면 스테이트는 C로 바뀔것입니다. 만약 현재 상태가 C라면 인풋으로0이 들어온다면 스테이트는 A로 바뀔것이며 그게아니라면 C로 바뀔것입니다.

아웃풋의 설정을 보면 현재 스테이트가 C일때만 아웃풋이 1이고 그게 아니라면 0을 출력하도록 되어있습니다.

 

이것은 밀리머신입니다.

LIBRARY ieee ;
USE ieee.std_logic_1164.all ;

ENTITY Mealy IS
	PORT ( 	clock     : IN 		STD_LOGIC ;
                     resetn   : IN 		STD_LOGIC ;
                     w 		: IN 		STD_LOGIC ;
			z      	: OUT 	STD_LOGIC ) ;
END Mealy ;

ARCHITECTURE Behavior OF Mealy IS
	TYPE State_type IS (A, B) ;
	SIGNAL y : State_type ;
BEGIN
	PROCESS ( resetn, clock )
	BEGIN
		IF resetn = '0' THEN
			y <= A ;
		ELSIF (clock'EVENT AND clock = '1') THEN
        CASE y IS
			       WHEN A =>
			              IF w = '0' THEN 
                                                  y <= A ;
				ELSE 
                                                  y <= B ;
				END IF ;
			        WHEN B =>
				IF w = '0' THEN 
                                                   y <= A ;
				ELSE 
                                                   y <= B ;
			        	END IF ;
			END CASE ;
            END IF ;
	END PROCESS ;

	WITH y SELECT
		z <= w WHEN B,
              z <= ‘0’  WHEN others;

END Behavior ;

이 밀리머신도 아까의 무어머신과 동일하게 설정과 스테이트 인풋과 아웃풋의 설정 그리고 특정 스테이트의 인풋값에 따라서 스테이트의 변화를 다 설정을 해줍니다. 그리고 마지막에 아웃풋을 결정하는 코드에서 만약 스테이트가 B라면 아웃풋으로 인풋값을 넣고 만약 아니라면 아웃풋값에 0을 넣어줍니다.

'Computer_logic' 카테고리의 다른 글

Modulo M counter  (0) 2023.04.06
Testbench  (0) 2023.04.06
Mealy FSM & Moore FSM  (0) 2023.04.05
TCP Congestion control  (0) 2022.11.09
FLOW control  (0) 2022.11.09

+ Recent posts