Pythhon을 통해 논리문을 만들어서 CPU를 배웁니다. (처음)

12847 단어 Python3

이 기사는 무엇입니까


이 보도는 필자가 학교 수업시간에 논리문부터 전가법기까지 모두 배웠지만 기억하지 못했다
"Pytohon 코드로 생각하면 알겠나요?"
이런 생각에 더해 평소 배려를 받아 블랙박스로 변해버린 CPU에 대한 조예도 조금 더 쌓아보자(그리고 인코딩에도 익숙해져라).
이번 보도는 논리문에서 4bit 전가법기를 제작했다.
원래 파이썬 자체가 논리적인 계산이 있는데 존댓말이니까...
필자는 올해 정식으로 프로그래밍을 시작한 사람이니 이해해 주십시오.

CPU


중앙 계산 장치의 약성은 컴퓨터의 심장이라고 할 수 있다.컴퓨터를 직접 만들 때 구입한 CPU는 작은 정사각형 칩이지만 내부에는 다양한 역할을 한다.

(출처: Wikipedia, Author: Eric Gaba)

CPU의 내부 구조


CPU 내부는 크게 연산부와 제어부로 나뉜다.

연산 단원

  • 계산 레지스터
  • ALU(연산 장치)
  • 상술한 두 가지 구조로 나뉜다.레지스터란 메모리를 가리키며 연산 레지스터는 계산할 때 사용하는 수치를 잠시 넣는 곳이다.ALU는 CPU에서 계산하는 부분으로 산술 연산과 논리 연산을 하는 전용 회로가 있다.현재 CPU 내부에는 다양한 회로가 있는 것 같지만, 이번 보도는 간단한 가산 제한을 위해 앞으로 더욱 깊이 들어가겠습니다.

    통제부

  • 명령 레지스터
  • 명령 디코더
  • 제어 신호 생성 회로
  • 프로그램 카운터
  • 주소 제어 회로
  • 일반 레지스터
  • 명령 레지스터에는 RAM의 명령이 일시적으로 포함됩니다.명령 디코더(디코더)는 명령 레지스터의 데이터 해석을 받아 제어 신호로 회로를 생성한다.제어 신호 생성 회로는 연산부 이외에 프로그램 계수기와 주소 제어 회로에 제어 신호를 발송한다.프로그램 카운터는 CPU 읽기 메모리(RAM)의 몇 번째 명령을 저장한다.주소는 회로 수신 프로그램 카운터의 데이터를 제어하고 다음 읽을 RAM의 번호를 지정합니다.유니버설 레지스터는 각종 용도에 사용되는 레지스터다.

    볼 대수


    상술한 디지털 회로는 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.py
    def 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.py
    def disjunction(a,b):
        if a+b >= 1:
            return 0
        else:
            return 1
    

    이런 3일 월형으로 표시해 주세요.

    NOT(Negation, 부정)


    1과 0 출력을 바꿉니다.역변기라고도 부른다.
    입력 1
    출력
    1
    0
    0
    1
    inverter.py
    def 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.py
    def 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.py
    def 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.py
    def 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.py
    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
    
    여러 반환값의 함수를 사용할 때 쉼표로 변수를 정의하면 된다.

    4비트 가법기


    반가법기 1개와 가법기 3개를 조합하면 4비트 가법기를 실현할 수 있다.합계 31 이하의 덧셈을 할 수 있다.4비트 사이의 2개의 입력은 최대 5비트를 출력한다.다음 그림에서는 S0이 1비트, S3이 4비트, c가 가장 큰 비트입니다.

    full_adder_4bit.py
    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
    
    그래서 4비트의 모든 가법기가 완성되었다.이번에는 그림을 만드는 데 많은 시간이 걸렸기 때문에 다음에는 D 트리거로 레지스터를 만들고 싶습니다.(잘할 수 있을지 모르겠다.)

    좋은 웹페이지 즐겨찾기