자주 쓰는 회로 구조들임.
1. 되먹임 루프
1번: 0 xor 1 = 1 이고 1 xor 1 = 0 임. 따라서 0과 1이 1틱마다 바뀌며 반복됨. (주기 2틱)
저걸 벨트에 연결해서 1일때만 움직이게 해두면 올라탄 사람 멀미나게 할 수 있음.
2번: 0 -> 1 -> 2 -> 4 -> 16 -> 65536 -> 0 이 반복됨. (주기 6틱)
숫자가 2가 아니라
7일때 -> 주기 7틱
9일때 -> 주기 5틱
20일때 -> 주기 3틱 임.
3번: 저 1073741824 라는 숫자가 정확히,
회로 네트워크에서 다루는 수의 범위의 4분의 1배임.
따라서 1.0G -> -2.1G -> -1.0G -> 0 이 반복됨. (주기 4틱)
4번: 3번과 같은 원리인데 숫자가 반띵됨. (주기 8틱)
2. 일반적인 루프
먼저 1번에서 자기를 되먹임하면서 1씩 더해줌.
그러면 0 + 1 = 1, 1 + 1 = 2 ... 하면서 1틱마다 1씩 증가함.
2번에서 그걸 받아서 60으로 나누니 60틱마다 1씩 증가하게 됨. 60틱은 1초니 1초에 1씩 올라감.
3번에서 그걸 또 받아서 10으로 나눈 나머지를 내보냄.
그럼 최종적으로 1초에 1씩 증가하면서 0~9가 되풀이되는 신호를 보내게 됨.
3. SR래치
여기 중에서 게임에 제일 많이 쓰이는 SR래치임.
https://gall.dcinside.com/mgallery/board/view/?id=factorio&no=20767
여기서 설명을 잘 해놨으니 여기를 보면 좋을듯.
축전지는 전기 충전량에 따라서 0~100의 신호를 내보내는데
발전량이 부족하면 전기가 계속 빠져나가고, 충전량이 20보다 작아지면 1번이 켜지면서 3번에 초록불이 1 입력됨.
그러면 3번에서 초록=1, 빨강=0 이니 초록 > 빨강 이므로 초록이 또 입력됨. (초록=2)
초록이 0보다 크므로 전원 스위치가 작동되어 외부에서 비상발전기 전력이 들어옴.
그럼 축전지가 충전되기 시작하는데, 20보다 커지면 1번의 초록 신호는 없어지지만
3번에서 계속 초록 신호를 뿜기 때문에 초록=1 이 계속 유지됨.
그러다가 충전량이 90을 넘어가면 2번이 켜지며 초록=1, 빨강=1 이 되며 초록 > 빨강 이 아니게 되어 3번이 꺼짐. (초록=0)
이렇게 반복.
4. 변화율
이런 식으로 하면 신호의 변화율을 얻을 수 있음.
원리를 말하면,
입력값은 그대로 빨간 선으로 나가고,
초록 선으로도 들어온 입력값은 -1이 곱해져서 1틱 후에 빨간 선으로 나감.
그러면 0틱째에는 입력값이 그대로 나가지만
1틱 후에는 (1틱째의 입력값 - 0틱째의 입력값)이 나가게 됨.
이걸 이용해서 펄스 신호를 만들 수 있음.
위 사진처럼 해놓고 일정신호조합기에 'A' 신호를 4로 설정한다면
전등으로 가는 최종 출력에선 'A' 신호가 1틱동안 4만큼 깜빡 하고 켜졌다가 꺼짐.
그리고 그 'A' 신호를 조합기에서 없앴을 때
'A' 신호가 1틱동안 -4만큼 또 깜빡 켜졌다가 꺼짐.
그리고 그 앞에 양수인 신호만 통과되게 해준다면 위 예제의-4 신호를 없앨 수 있음.
5. 합
변화율이 미분이라면 이건 적분임.
변화율이 신호의 변화량을 내보낸다면, 이 회로는 그 변화량을 받아서 다시 원래 신호로 바꿀 수 있음.
자신의 출력과 입력이 서로 연결되어 있기 때문에 한 번만 입력한 수는 계속 뺑뺑이를 돌면서 저장됨.
어떤 신호가 1틱동안 3이 입력된다면 이 회로 내부에 3이 저장되고,
후에 또 1틱동안 8이 입력된다면 3 + 8 = 11이 저장되고.. 이런식임.
또 2틱동안 6이 입력된다면 11 + 2 * 6 = 23 이 저장됨.
주로 쓰이는 곳은 펄스 수를 셀 때임.
투입기나 벨트를 펄스 신호를 내보내게 설정해놓고 입력으로 받으면
투입기와 벨트를 거쳐간 아이템의 누적 수를 알 수 있음.
이걸 이용해서 내 공장이 제대로 물량이 나오는지 점검 가능.
2번에서처럼 R = 0 일때만 출력하게 하면
나중에 R 신호를 걸었을 때 안에 저장된 값이 리셋됨.
6. 메모리
위의 합 회로를 이용해서 메모리를 만들 수 있음.
2번이 자신 스스로의 출력과 입력을 연결해서 값을 저장하는 부분이고,
1번과 3번은 입력과 출력을 할 수 있게 해줌.
맨 오른쪽에서 계속 '점' 신호가 입력된다고 할 때
'O' 가 1틱동안 1 이 입력된다면 3번이 켜지면서 그 '점' 신호가 2로 들어가서 저장됨.
그리고 'I'가 입력된다면 입력되는 동안 1번은 2번에 저장되어 있는 수를 출력함.
'R'을 입력하면 리셋함.
저 구조를 병렬적으로 이어붙인 다음,
위의 사진에선 =1 로 돼있지만 그걸 =2, =3, =4... 로 바꾸면
여러 데이터를 저장해서 번호에 따라 원하는 데이터를 입출력할 수 있는 RAM같은 걸 만들 수 있음.
7. 틱 신호 유지
결과부터 말하면
맨 오른쪽에서 어떤 신호가 1틱동안 1이라도 들어온다면,
그때부터 그 신호는 1에서 시작해 1씩 증가하면서 100이 되고, 그 다음엔 0이 되면서 멈춤.
일단 1번은 위에서 본 합 회로임.
거기다가 2번을 붙였는데, 저장된 값들을 계속 1씩 더해 주는 회로임.
둘 다 조건을 100보다 작음으로 걸어놨기 때문에 100까지 가고 멈춤.
이건 일람에 쓸 수 있음.
예를 들어 포탑에 탄창을 넣는 투입기가 내보낸 펄스 신호를 받아서 여기에 입력으로 넣어준다면
투입기가 탄당을 1개라도 집었을 때 '탄창' 신호가 1틱동안 입력될 거고
그러면 저 회로에서 '탄창' 신호를 1에서 100까지 계속 증가시켰다가 없앰.
그러면 최종적으로 적의 공격을 받았을 때 100틱동안 켜져있는 램프라던지, 100틱동안 켜져있는 알람 등등을 만들 수 있음.
근데 이 구조에는 약간 결함이 있는데, 만약 신호가 80틱마다 1번씩 입력된다면,
처음 입력됐을 때 1틱에서 신호가 증가하기 시작할 거고,
80틱이 됐을 때 산호가 1번 더 입력되지만 크게 영향을 미치진 않음.
근데 100틱째가 됐을 때 꺼졌다가,
다시 160틱쨰가 됐을 때 신호가 또 입력되어 다시 돌아가게 됨.
즉 입력은 80틱마다 1번씩 계속되는데, 그러면 계속 켜져 있어야 할 출력이 꺼졌다 켜졌다를 반복함.
이걸 막기 위해선, 서로 다른 주기의 구조를 2개 쓰면 됨.
아래쪽 2개는 위에서 만든 그대로고 위쪽 2개는 조건이 100이 아닌 150으로 되어있음.
이러면 짧은 입력 사이에서 꺼졌다 켜졌다 하는 현상을 방지할 수 있음.
8. 신호 고르기 1
간단한 신호 고르기임.
위에서 몇 번 신호를 고를 건지 'i' 신호가 들어오고,
1에선 'i' 가 3이라면 뒤에 있는 조합기의 신호를 모두 통과시킴.
근데 그 신호들뿐만이 아닌 'i' 신호까지 통과되기 때문에
2번에서 'i' 에 -1을 곱해 출력시켜 그걸 상쇄시킴.
주로 음악을 연주하는 회로에 쓰임.
7. 신호 고르기 2
원하는 종류의 신호를 얻고 싶을 때 쓰임.
2번에 의해서 상자에 벨트가 3개면 초록이, 5개면 파랑이 1 출력됨.
3번은 역시 필요없는 벨트 값을 상쇄시키기 위해 존재함.
8. 신호 고르기 3
이번은 꽤 복잡함.
이건 신호 고르기 1이랑 비슷한 기능을 내지만, 차이점으로는 비교기가 필요 없고 조합기만 박으면 된다는 거임.
따라서 대량의 선택지 중에서 신호를 골라야 할 때,
신호 고르기 1에 비해 훨씬 작은 크기로 만들 수 있어서,
음악을 연주하는 회로에 위와 비슷한 원리가 쓰이기도 함.
원리를 설명하면
1번에는 A= 1001, B= 2005, C= 3009가 설정되어있음.
2번에서 그걸 천으로 나눠서 A=1, B=2, C=3 이 됨.
그리고 3번에선 아까 소개한 (신호 고르기 2) 와 같은 원리로 입력 값에 따라 원하는 신호를 선택함.
4번은 노랑벨트 신호를 상쇄시키는 역할이고
5번에선 3번의 결과가 엄청나게 작은 수(-10만)와 곱해짐.
여기까지 정리하면 만약 노랑벨트 입력이 2라면, B가 선택되어 'B' 신호가 -10만 이 출력됨.
그리고 그게 다시 조합기에서 나오는 거랑 합쳐지는데, 여기서
'A' 와 'C'는 그대로 1001, 3009 인데, 3번에서 선택된 'B' 신호는 (2005 - 10만) 으로 혼자 엄청 작음.
그럼 혼자만 음수인 B만이 6번을 통과하고
7번에서 빼진 숫자가 다시 복구되어 원래의 2005가 됨.
마지막으로 8번에서 1000으로 나눈 나머지인 5가 출력됨.
그래서 결론적으로 위 회로는 입력이 1이면 1을, 2면 5를, 3이면 9를 출력하는 회로임.
9. 원하는 수량만큼 상차
기차에 원하는 만큼만 담을 수 있는 회로.
1번은 기타 내용물 읽기만 체크됨
3번은 철판 100, 구리한 50을출력함.
3번에 기차에 상차할 아이템과 개수를 정해놓으면 됨.
기차에서 나오는 신호가 -1이 곱해지고 3번의 신호와 더해짐.
그러면 최종적으로 기차에 더 넣어야 할 아이템의 개수(부족한 아이템의 개수)가 구해짐.
그걸 4번에 통과시키는데, 조건은 별 의미가 없고
저 초록색 모양의 '아무거나'라는 말은 쉽게 말해서 신호 중에 가나다 순으로 제일 앞에 오는 걸 하나만 통과시키라는 말임.
그리고 그게 5번과 6번에 들어가는데
5번은 있는 그대로 통과시키는 회로고
6번은 입력된 신호를 'X' 신호로 바꿈.
그래서 최종적으로 묶투는 5번에서 출력된 게 필터로 들어가서 그것만 집게 되고
집는 개수는 'X' (즉 부족한 아이템 개수만큼)이 돼서
템을 정확히 집을 수 있음.
이상 끝. ㅂㅂ.
회로는 개추지
글 퀄리티 정말 좋네
ㄳㄳ
특수한 주기 루프면 산술연산 하나로도 되네? 이건 몰랐다
그리고 아무거나 출력하는거 고작 몇주전에 추가된건데 기차 상하차회로 간단하게 할수있다는 말만 들었지 보는건 첨이네. ㄱㅅㄱㅅ