본문 바로가기

Circuit Design

여러 입력을 조건에 따라 저장하는 회로 만들기

[quartus circuit design]
 

사진과 같이 디스플레이에 여러 개의 숫자를 순서대로 키패드로 입력하면 저장하는 회로를 구현해야할 때가 있다. 계산기 회로를 생각해보면 숫자, 연산자, 숫자를 순차적으로 입력하면 이를 모두 기억해 두어야한다.
여기서는 다음과 같이 구성하였다. 
1) 입력받을 수 있는 최대 숫자가 정해진 경우를 가정한다. 즉, 가장 먼저 입력했던 숫자는 뒤에 숫자가 많이 추가로 입력되면 사라진다. 
2) 일부 입력을 무시하는 기능을 추가하였다.  

[내부 회로]

이 모듈의 역할은 입력으로 들어오는 데이터 O[3..0]을 순차적으로 최대 두 개까지 저장하는 것이다. 이후 확인 버튼을 누르면 이 모듈의 출력은 키패드의 입력 숫자를 일시적으로 저장되는 것이 아닌 전원이 꺼지기 전까지 계속 저장하며 다른 입력을 주더라도 변하지 않는다. 
 
위 회로의 동작은 잠시 입력을 저장해두고 확인 신호에 대해 장기 저장하는 방식이다. 좌상단의 회로가 일시적으로 저장하는 역할을 수행한다. 

자세히 보면 위와 같이 구현이 되어 있다. 레지스터 두 개가 직렬로 연결이 되어 있는 것을 볼 수 있다. 이렇게 구현한 회로는 일시 저장 기능에 대해서는 계속 추가적인 입력을 하면 데이터가 덮어써져야 하기 떄문이다. 또 1,2 숫자를 순차적으로 입력한다고 하였을때 1을 누르고 확인을 하면 1은 두번째 자리에 저장이 되어야 하는데 1을 누르고 2를 추가 입력하였다면 1은 첫번째 자리에 가야하기 때문이다. 전화번호를 입력할 때와 마찬가지의 규칙이 적용된 것이다. 
 
위 회로의 구성은 다음과 같다. 

1) 키패드의 버튼이 눌림을 의미하는 "update"신호가 입력된다. 이 신호는 74163 counter를 작동시켜 클럭을 생성한다. 
2) 생성된 클럭은 첫 번째 레지스터에 입력되어 키패드에 눌린 숫자 신호 O[3..0]을 레지스터에 저장한다. 
이때 이렇게 클럭을 생성하는 이유는 첫번째 레지스터 입장에서는 키패드의 입력이 입력단에 입력되면서 레지스터를 작동시켜야 하는데, 버튼이 눌리고 떼지는 신호로는 레지스터 작동이 불안정하기 때문이다. 레지스터는 edge에 반응하여 작동하므로 키패드의 버튼이 떼어지는 순간 작동되는데 버튼이 눌려서 만들어지는 숫자 데이터는 눌리는 동안만 유지되므로 떼어지는 순간에는 사라져버린다.
3) 첫번째 레지스터의 출력을 두번쨰 레지스터의 입력으로 연결한다. 
4) 두 번째 숫자가 입력되는 순간(엄밀하는 edge에서) 첫 번째 레지스터의 출력은 두번째 레지스터에 저장되고 새로운 입력은 첫번째 레지스터에 저장된다(엄밀히는 level에서 클럭이 생성되는 동안). 

728x90

'Circuit Design' 카테고리의 다른 글

Dot Matrix에 위/아래 화살표 띄우기  (0) 2023.12.30