Pythhon을 통해 논리문을 만들어서 CPU를 배웁니다. (처음)
12847 단어 Python3
이 기사는 무엇입니까
이 보도는 필자가 학교 수업시간에 논리문부터 전가법기까지 모두 배웠지만 기억하지 못했다
"Pytohon 코드로 생각하면 알겠나요?"
이런 생각에 더해 평소 배려를 받아 블랙박스로 변해버린 CPU에 대한 조예도 조금 더 쌓아보자(그리고 인코딩에도 익숙해져라).
이번 보도는 논리문에서 4bit 전가법기를 제작했다.
원래 파이썬 자체가 논리적인 계산이 있는데 존댓말이니까...
필자는 올해 정식으로 프로그래밍을 시작한 사람이니 이해해 주십시오.
CPU
중앙 계산 장치의 약성은 컴퓨터의 심장이라고 할 수 있다.컴퓨터를 직접 만들 때 구입한 CPU는 작은 정사각형 칩이지만 내부에는 다양한 역할을 한다.
(출처: Wikipedia, Author: Eric Gaba)
CPU의 내부 구조
CPU 내부는 크게 연산부와 제어부로 나뉜다.
연산 단원
통제부
볼 대수
상술한 디지털 회로는 0과 1만 제어할 수 있다.따라서 19세기 영국 조지 부르가 디자인한 논리적 진위는 연산으로 처리할 수 있는 부르 대수다.(브리 대수의 발표는 1854년, 에니아크의 완성은 1946년이었기 때문에 역사적으로 브리 대수에 따라 디지털 회로가 생겼다고 생각하는 것이 좋을 것 같다.)CPU의 논리 회로는 볼 대수에 의해 실현된다.다음은 기본적인 논리 연산을 조합하여 4비트 전가법기를 제작한다.이는 위의 ALU에 해당합니다.
기본 논리 연산
CPU를 고려할 때 알아야 할 것은 기본적인 세 가지 논리 연산(AND, OR, NOT)이다.우리 헤어져 봅시다.실제로 아래의 논리 연산은 여러 개의 주어진 명제를 겨냥하여 성립된 것이지만 이번 CPU가 주요하기 때문에 두 값(0과 1)의 관계를 설명한다.
AND(Logical Conjunction, 논리적 적)
두 개의 주어진 값이 모두 1일 때 1을 되돌려줍니다.
입력 1
입력 2
출력
1
1
1
1
0
0
0
1
0
0
0
0
conjunction.pydef conjunction(a,b):
c=a*b
return c
논리적 적성을 느낄 수 있는 코드를 사용해 보았다.
논리 회로도에는 이런 기호로 쓴다.(안에 있는 AND의 문자는 내가 외우기 위해 마음대로 입력한 것이다. 보통 이런 문자는 없다.)
OR (논리 및)
주어진 두 값 중 하나가 1을 되돌려줍니다.
입력 1
입력 2
출력
1
1
1
1
0
1
0
1
1
0
0
0
disjunction.pydef disjunction(a,b):
if a+b >= 1:
return 0
else:
return 1
이런 3일 월형으로 표시해 주세요.
NOT(Negation, 부정)
1과 0 출력을 바꿉니다.역변기라고도 부른다.
입력 1
출력
1
0
0
1
inverter.pydef inverter(a):
if a is 0:
return 1
else:
return 0
삼각형으로 표시하다.
컴퓨터를 시작하는 모든 논리 회로는 상술한 세 개를 조합해서 실현할 수 있다.
이것들을 이용해서 가법기의 부품을 만들어라.
NOR
주어진 값이 모두 0이면 1을 되돌려줍니다.이는 OR 결과가 정해졌는지 여부로 볼 수 있다.
입력 1
입력 2
출력
1
1
0
1
0
0
0
1
0
0
0
1
NOR.pydef NOR(a,b):
c=disjuction(a,b)
d=inverter(c)
return d
앞의 동그라미는 부정을 나타낸다.
XOR(eXclussive-OR, 배타적 및)
두 값이 일치하지 않을 때는 1이다.
입력 1
입력 2
출력
1
1
0
1
0
1
0
1
1
0
0
0
XOR.pydef XOR(a,b):
c=conjunction(a,b)
d=NOR(a,b)
e=NOR(c,d)
return e
이렇게 AND와 NOR만 만들 수 있다.
(출처: Wikipedia
이런 기호로 표시할 수도 있다.
이렇게 해서 가법기를 만들 준비가 되었다.반가법기부터 전가법기, 여러 비트의 가법기를 제작한다.
가법기의 구체적인 구조 등여기(컴퓨터 원리 기초: 아날로그 이해를 통해 가산 연산을 하는 기본 논리 회로!)의 사이트는 비교적 이해하기 쉽다.
반가법기
반가법기는 2진수로 한 개의 가법을 집행한다.0+0, 1+0, 1+1을 계산할 수 있습니다.
이전의 논리 연산과 달리 자릿수를 늘릴 수 있다.이 상승하는 위치를 칼리라고 한다.
(출처: Wikipedia
half_adder.pydef half_adder(a,b):
adder_sum=XOR(a,b)
carry=conjunction(a,b)
return adder_sum,carry
전가법기
두 개의 반가법기와 OR를 조합하면 아래의 위치에서 시작되는 점차적인 상승을 고려하여 가법 연산을 할 수 있다.
(Made byLogic Gate Simulator, Modified by 필자)
위 그림에서 A, B 를 입력하고 X는 하위부터 반복합니다.C는 다음 핀에 있고 S는 같은 핀의 덧셈 결과이다.
full_adder.pydef full_adder(a,b,x):
half_adder_sum,carry=half_adder(a,b)
full_adder_sum,ha_carry2=half_adder(half_adder_sum,x)
full_adder_carry=disjunction(carry,ha_carry2)
return full_adder_sum, full_adder_carry
여러 반환값의 함수를 사용할 때 쉼표로 변수를 정의하면 된다.
4비트 가법기
반가법기 1개와 가법기 3개를 조합하면 4비트 가법기를 실현할 수 있다.합계 31 이하의 덧셈을 할 수 있다.4비트 사이의 2개의 입력은 최대 5비트를 출력한다.다음 그림에서는 S0이 1비트, S3이 4비트, c가 가장 큰 비트입니다.
full_adder_4bit.pydef adder_4bit(a0,a1,a2,a3,b0,b1,b2,b3):
ha_sum,ha_carry=half_adder(a0,b0)
fa_sum1,fa_carry1=full_adder(a1,b1,ha_carry)
fa_sum2,fa_carry2=full_adder(a2,b2,fa_carry1)
fa_sum3,fa_carry3=full_adder(a3,b3,fa_carry2)
sum_4bit=(ha_sum,fa_sum1,fa_sum2,fa_sum3,fa_carry3)
return sum_4bit
그래서 4비트의 모든 가법기가 완성되었다.이번에는 그림을 만드는 데 많은 시간이 걸렸기 때문에 다음에는 D 트리거로 레지스터를 만들고 싶습니다.(잘할 수 있을지 모르겠다.)
Reference
이 문제에 관하여(Pythhon을 통해 논리문을 만들어서 CPU를 배웁니다. (처음)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tatmius/items/a49d9dfcdd148499d77f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
def conjunction(a,b):
c=a*b
return c
def disjunction(a,b):
if a+b >= 1:
return 0
else:
return 1
def inverter(a):
if a is 0:
return 1
else:
return 0
def NOR(a,b):
c=disjuction(a,b)
d=inverter(c)
return d
def XOR(a,b):
c=conjunction(a,b)
d=NOR(a,b)
e=NOR(c,d)
return e
def half_adder(a,b):
adder_sum=XOR(a,b)
carry=conjunction(a,b)
return adder_sum,carry
def full_adder(a,b,x):
half_adder_sum,carry=half_adder(a,b)
full_adder_sum,ha_carry2=half_adder(half_adder_sum,x)
full_adder_carry=disjunction(carry,ha_carry2)
return full_adder_sum, full_adder_carry
def adder_4bit(a0,a1,a2,a3,b0,b1,b2,b3):
ha_sum,ha_carry=half_adder(a0,b0)
fa_sum1,fa_carry1=full_adder(a1,b1,ha_carry)
fa_sum2,fa_carry2=full_adder(a2,b2,fa_carry1)
fa_sum3,fa_carry3=full_adder(a3,b3,fa_carry2)
sum_4bit=(ha_sum,fa_sum1,fa_sum2,fa_sum3,fa_carry3)
return sum_4bit
Reference
이 문제에 관하여(Pythhon을 통해 논리문을 만들어서 CPU를 배웁니다. (처음)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tatmius/items/a49d9dfcdd148499d77f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)