'State machine'에 해당되는 글 1건

  1. 2010.01.09 VHDL Basic 6
Studyhard/VHDL2010.01.09 02:31
크리에이티브 커먼즈 라이선스
Creative Commons License
과제
 * JK플립플롭이 Project 폴더 내에 있어야 한다.
library ieee;
use ieee.std_logic_1164.all;

entity upcount is
port( cclk, logic : in std_logic;
     q : buffer std_logic_vector (3 downto 0));
end upcount;

architecture arc of upcount is
component jk_f
port( j, k, clk : in std_logic;
      q, n_q  : buffer std_logic);
end component;
begin
ff3: jk_f port map(j => logic, k => logic, clk =>q(2), q=>q(3));
ff2: jk_f port map(j => logic, k => logic, clk =>q(1), q=>q(2));
ff1: jk_f port map(j => logic, k => logic, clk =>q(0), q=>q(1));
ff0: jk_f port map(j => logic, k => logic, clk =>cclk, q=>q(0));

end arc;


VHDL Basic 6

-상태머신(State Machine)
    -State Machine의 정의
- 순차회로시스템의 원하는 동작을 모델링하는 도구
- 외부 입력과 시스템 클럭에 의해 State가 천이되고, State에 의존되어 출력 값 결정 
- 여러 개의 State로 구성, 복잡한 시스템 설계에 적합 (예 : 마이크로프로세서)

   -State Machine의 종류
-Moore Machine
-Mealy Machine

    # Mealy Machine
출력이 현재상태와 입력값에 의존

# Moore Machine
출력이 현재 상태에만 의존되는 모델


 - 두 모델의 차이점


◯ Moore Machine : 출력회로의 입력이 현재의 상태인 레지스터의 값으로만 결정, 출력의 변화는  Clock과 동기되어 발생. 
◯ Mealy Machine : 출력회로의 입력이 현재 레지스터의 값과 입력값 두 가지를 가짐. 따라서 입력값의 변화가 있게되면 Clock과 동기하지 않더라도 그 출력값은 변화

    - 두 모델의 공통점
◯ 입력과 현재의 상태에 의해 다음 상태 변화

- 설계 예시

   architecture arc of mode is                  --Begin 시작 전에 삽입

type state_type is (stay, ready, action); -- State 머신 상태 설정(3가지 상태) 
signal state : state_type;                -- State_type 을 Signal 로 설정


- Integer 및 Variable 구문
 - Integer 변수
   - 알고 있는 Vector 형과 마찬가지로 사용할 변수의 범위를 지정하는데 사용
   - 벡터형 보다 변수가 차지하는 셀의 수가 더 작다
   - 범위를 좀더 자세히 지정할 수 있다.

   * 설계 예시
    entity Counter is
port ( a : in integer range 0 to 255; -- < = in std_logic_vector(7 downto 0);
     b : out integer range 0 to 255; -- < = out std_logic_vector(7 donwto 0);
    end counter ;

      범위를 실수형으로 지정함으로써 좀더 자세한 선언이 가능함을 알 수 있다.
 
 -Variable 구문 
  - Process 내에서만 사용 되며, 내적 변수이다
  - 합성 보다는 중간 연산 단계에서 주로 이용된다.
  - Variable에서 사용되는 대입기호는   :=    
  
   
  * 설계 예시
   Process(clk, clear, load)
Variable cnt : integer range 0 to 255;
begin
    if(조건) then
cnt := 0;

  
 *Variable은 내적 변수이기 때문에 Process 가 끝나면 그 값을 잊어버린다. 때문에 값을 보존 시키기 위해선
  Signal에 최종 값을 대입시켜야 한다. 



 
과제 
- Integer 형을 이용한 10 Counter 를 설계하시오
- 20Mhz 를 1초로 분주시오
- 2상 여자 Stepmotor 구동기를 설계하시오 

저작자 표시 비영리 변경 금지
신고
Posted by 리얼한놈

티스토리 툴바