과제
* 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 구동기를 설계하시오