버스와 입출력장치

 

컴퓨터라는 것을 구분하면 제어장치 / 저장장치 / 입출력장치가 존재한다. 입출력장치는 사용자와의 상호작용을 하는 장치로 어떻게 보면 가장 느린 속도를 가지게 되는데(유저의 입력과 출력에 따른 Feedback은 전산적이지 않으니 말이다.) 이번시간에는 시스템의 통신경로인 버스를 알아보고 출력의 특징을 고려한 여러 가지 기본 개념을 알아보도록 하겠다.


시스템 버스

버스는 컴퓨터의 구성요소들을 서로 연결하는 데이터통로이다. 데이터 버스 / 주소 버스 / 제어 버스로 구분이된다. 개념도는 아래와 같다.

제어 버스(Control Bus)

데이터버스와 주소 버스를 제어하기위한 신호를 전송하는 통로이다. 양방향 버스이며, 세부 명령은 다음과 같은 것들이 존재한다.

  • 메모리 읽기 신호 : 주소가 지정하는 기억장소의 Data를 읽고, 버스에 해당 Data를 전송하는 제어신호
  • 기억장치 쓰기 신호 : 버스에 있는 Data를 기억장치 지정된 주소공간에 저장하는 제어신호
  • I/O 읽기 신호 : 지정된 입출력장치로부터 Data를 읽어 버스에 Data를 전송하는 제어신호
  • I/O 쓰기 신호 : 버스에 전송된 Data를 지정된 입출력장치로 출력하는 제어 신호

주소 버스(Address Bus)

주소버스는 메모리나 입출력장치로 기억장치 주소나 입출력장치의 포트를 전달하는 통로이다. 주소전달만을 수행하기 때문에 단방향 버스로 구분된다.

 

데이터 버스(Data Bus)

데이터 스는 시스템 요소 들간에 데이터를 전송하는데 사용되는 경로를 의미한다. CPU와 다른 장치사이에서 Data와 신호를 교환하는 버스로. 메모리와 입출력장치의 명령어나 데이터를 CPU로 전송하고, CPU의 연산결과를 기억장치나 입출력장치로 전송하는 역할을 수행한다. 모든 장치와 양방향으로 통신하는 특징이 있다.


입출력 매핑(I/O Mapping)

CPU가 입출력장치를 사용하고자 할 때 입출력장치에 사용될 메모리와 레지스터를 CPU가 접근하는 실제 주기억장치와 구분하지 않으면 메모리 매핑 입출력, 구분되어있으면 입출력 매핑 입출력 방식이라고 칭한다.

입출력 방식

CPU와 입출력장치간 데이터전송 방식은 여러 가지의 모드로 구분이 된다. 입출력장치의 늦지만 상호작용성을 고려하여 CPU를 거치지 않고 전송을 하는 방식또한 존재한다. 여러 가지 입출력 방식을 알아보자

  • Programmed I/O : CPU가 입출력이 완료되었는지 입출력장치를 지속적으로 검사하는 방식으로 I/O작업 시 CPU가 그 작업에 할당되어 다른 작업이 불가하다. CPU가 지속적인 검사를 요청하기에 Pooling 방식으로도 칭한다.
  • Interrupt I/O : 입출력장치의 사용이 필요한 순간 입출력 인터페이스가 CPU에게 사용요청을 Interrupt하는 방식이다. 입출력이 완료되면 CPU는 원래의 작업으로 돌아간다.
  • DMA(Direct Memory Access) : CPU를 경유하지 않고 DMA의 Cycle Stealing이라는 방식을 통해서 메모리와 입출력장치를 직접 매핑한다. 아래에서 Cycle Stealing을 조금 자세히 알아보자
  • Channel I/O : DMA의 한계를 극복하기 위해서 고안된 방식으로 애초에 입출력장치를 위한 CPU와는 독립적으로 동작하는 처리기(채널)이 존재한다.

DMA – Cycle Stealing

사이클 스틸링은 CPUDMA 컨트롤러 중 주기억장치에 먼저 접근(Access)하는 우선순위를 DMA 컨트롤러에게 주는 것을 의미한다. CPU의 연산 주기(Cycle)을 탈취하기에 저런 이름이 붙였다. Cycle Stealing을 수행한 DMA 컨트롤러는 한 번에 하나의 데이터 워드를 전송하고 버스의 제어를 CPU에게 반환한다. 이때 CPU는 메모리의 참조가 필요한 연산을 제외하고는 다른 작업을 수행할 수 있으며 Interrupt방식과 다르게 CPU의 상태보존(복귀를 위한)도 필요없다.


버퍼(Buffering)

버퍼란 입출력간에 사용하는 임시공간이다. 사용자의 입출력신호나 CPU의 연산결과를 일시적으로 저장하는 버퍼공간을 활용하면 한번에 신호를 몰아서 처리할 수 있는 작업이라고 볼 수 있겠다. 예시를 들자면 여러분이 바나나를 수확해서 공장(CPU)에 가져다 둔다고 가정하자(입력) 하나 수확하는데 1분이 걸린다면(오랜시간) 하나하나 옮기는거보다 다른일을 하고 있다가 요청이 들어오면(Interrupt) 10개씩 옮기는게 좋지 않겠는가? 버퍼는 그 바나나를 담아두는 공간이다.


정리

버스란 컴퓨터 내부에서 신호를 전달하는 통로이다. 시스템에서 사용하는 버스는 제어 / 주소 / 데이터버스가 있다. 입출력은 사용자와 컴퓨터간에 신호와 데이터를 전달하는 과정이라고 할 수 있다. 그 방식은 인터럽트 / 채널 / DMA와 같은 방식이 있고 그 과정에서 효율성을 올리는 버퍼를 사용한다.

 

다음시간에는

다음시간에는 입출력포트에 대해서 같이 공부해보겠다.(내가 모르는게 엄청 많구나...)

 

메모리 계층구조(Memory Hierchy)

메모리 계층구조는 다음의 그림으로 표현된다.

단순하다.. ㅎ 아무쪼록 위의 그림과 같이 저장장치를 필요에 따라 여러 가지 종류로 구분한 것을 의미한다. 이 중 CPU안에 레지스터와 캐시가 존재하며 CPU의 연산에 직접적인 지원을 한다. 반면 그들보다 비교적 큰용량의 메모리는 CPU외부에 존재하며 CPU와 아주 느린 저장장치 하드디스크 사이에서 동작한다.

 

메모리 계층구조는 컴퓨터를 설계함에 있어 성능과 용량의 Trade-off관계 속 최적화를 위해서 존재한다. 생각해보자, 만약 메모리가 하드디스크보다 빠르니까 메모리를 2TB연결해버리면 가격이 무지막지 하게 올라갈 것이다. 실제로는 그렇지 않아도 속도가 많이 차이나지 않는데, 바로 지역성(Locality) 때문이다. 컴퓨터에서 한번 참조된 기억장치 영역은 다음번에도 자주 사용될 가능성이 크다는 성질인데, 이 성질을 생각해보면 굳이 비싼 돈 들여서 고 비용의 저장장치로 사용자가 원하는 용량을 채울 필요가 없다는 결론이 나온다.

 

지난일련의 포스팅으로 레지스터 + 메모리는 설명이 되었고, 하드디스크는 보조기억장치이니 중간에 있는 캐시 메모리의 설명이 부족한 상황이다. 자세하게 알아보도록 하자


캐시메모리

메모리 계층구조에서 나눈 경계에는 속도차이가 반드시 발생한다. 특히 CPU내부와 외부의 경계에서 이 속도차이가 극화되는데, 이 속도차이를 어느정도 보상하는 메모리가 캐시메모리이다. 메모리에서 자주사용되는(지역성있는) 공간을 캐시메모리에 적재하여 전체적인 성능을 향상시키는 것이다.

위와 같이 이해하면 되겠다. 캐시가 바로 지역성(Locality)를 최대로 활용하는 소자이다. 말이나왔으니 조금 더 알아보면 지역성은 최근의 사용된 데이터의 인접한 데이터가 자주 사용되는 공간지역성(Spatial Locality)와 최근에 사용된 데이터가 재참조될 가능성이 높은 시간지역성(Temporal Locality)로 구분할 수 있다.


가상메모리(Virtual Memory)

보조기억매체속의 프로그램은 PID를 부여받고 주기억장치(메모리)에 적재되는 순간 프로세스라는 이름으로 불리우는데, 만약 이 주기억장치(메모리)에 모든 공간이 차면 어떻게 될까? 더는 프로세스를 생성할 수 없는 것은 아니고 넓은 용량을 가지는 보조기억장치 공간의 일부 구역을 주기억장치(메모리)처럼 사용하는 “가상 메모리(Virtual Memory)”라는 기법이 해결책이다.

 

CPU는 메모리 관리 장치를 사용한다. MMU(Memory Management Unit)이라고 불리는 이 요소는 CPU에 직접적인 접근을 방지하고 메모리를 통해서만 접근할 수 있도록 한다. 위에 서술된 상황처럼 메모리가 부족하거나 모종의 이유로 메모리에 원하는 데이터가 없는 경우를 페이지 폴트(Page Fault)라고 칭한다. 이러면 MMU가 메모리의 일부영역을 메모리영역으로 지정해서 실제의 메모리와 그 영역을 교환하여 데이터를 참조할 수 있게하는데 이 과정을 SAWP이라고 한다. 당연하겠지만 이런 SWAP이 자주 발생되면 성능이 많이 저하된다. 그 현상을 Thrashing이라고 부른다.

 


메모리 단편화(Fragmentation)

메모리리 상에 데이터가 적재될 때는 적절하게 크기를 맞출 수 없어서 발생하는 낭비가 있다. 이를 단편화(Fragmentation)라고 칭한다. 단편화에는 내부단편화와 외부단편화가 존재하는데, 내용은 아래도표와 같다.

메모리를 분할하는 기법은 고정된 길이로 분할하는 페이지(Page)기법가변길이로 분할하는 세그멘테이션 기법이 발생한다. 단편화는 페이지기법의 경우에는 고정된 크기보다 낮은 크기의 프로세스를 할당할 때 발생하는 낭비인 내부 단편화, 세그멘테이션 기법의 경우에는 프로세스를 아예 할당을 하지못하는 외부 단편화가 존재한다.


정리

이번시간에는 메모리에 대해서 세부적으로 알아보았다. 캐시와 가상메모리도 알아보고, 메모리에서 발생할 수 있는 낭비인 단편화에 대해서 알아보았다.

 

다음시간에는

저장장치를 자세하게 알아보았으니 다음시간에는 입출력장치에 대해서 자세하게 알아보도록 하겠다.

 
 
 
 

마이크로 아키텍처

 

마이크로 아키텍처 혹은 CPU 아키텍처는 CPU 또는 이와 관련된 디지털 신호 처리기의 회로다. 기본적으로 CPU가 처리하는 일이 함수의 읽음 -> 해석 -> 실행 -> 결과기록이었던 것을 생각해보면 이것이 매우 세부적인 수준에서 기술되어있는 것이 마이크로 아키텍처라고 칭할 수 있겠다. 이것은 CPU 제조사 마다 달라지는데, 대중적인 CPU 종류는 다음과 같다


병렬처리

CPU는 그 높은 연산능력을 바탕으로 빠르게 지정된 연산을 수행한 후에 결과를 반환하는 소자이다. 병렬처리는 몇몇 명령어의 구조적인 최적화 등 일련의 방법을 통해서 명령어를 동시에 수행하는 기법이다. 대표적인 병렬처리 방식인 파이프라인 / 슈퍼스칼라를 알아보도록 하자

 

병렬처리 – 파이프라인(Pipeline)

명령어 파이프라인(Instruction Pipeline)은 명령어를 읽어 순차적으로 실행하는 프로세서에 적용되는 기술이다. 다음의 도표를 보자

꽤 직관적인 그림인데, 한 개의 행을 하나의 명령어로 볼 때 그 명령어들을 여러개의 단계로 구분하고 다음 명령어의 처리를 기다린다면 다른 명령어의 다른 단계를 수행하는 방식인 것이다. 위에사진은 명령어를 기반으로 구분되어있는데, CPU 클록 주기에 맞추어 더욱 병렬성을 높인 슈퍼파이프라인 방식도 존재한다.

 

병렬처리 – 슈퍼스칼라(SuperScala)

파이프라인이 그래도 한번에는 같은 스텝의 하나의 명령어를 수행한다면 슈퍼스칼라방식은 애초에 명령어를 처리할 수 있는 스레드를 여러가지 사용하는 방식이다.

다른 기법으로 VLIW(Very Long Instruction Word)가 있다. 동시 실행 가능한 여러 가지의 명령을 하나의 긴 명령으로 재 배열하여 처리하는 방식이다.(명령어의 합성)


파이프라인 해저드

파이프라인 해저드(Hazard)라는 용어가 있다. 병렬처리기법을 사용함에도 불구하고 오히려 속도가 저하되는 현상인데, 의존성이나, 순서등에 의해서 발생하며 데이터 해저드(명령어 의존성으로 발생), 제어 위험(순서에 의한 발생), 구조적위험(자원 동시 접근에 의한 위험) 으로 구분된다.

 

이러한 파이프라인 해저드는 어느정도는 보완할 수 있다. 예를 들면 최근에 발생한 분기의 결과를 토대로(분기 역사표) 다음의 분기를 예측하여 데이터/제어의 해저드를 어느정도 극복하는 방식이 있겠다.


정리

이번시간에는 CPU의 구조를 기술하는 마이크로 아키텍처의 개념과 여러 가지 병렬처리 기법 및 파이프라인의 해저드까지 간단하게 알아보았다.

 

다음시간에는

메모리 계층구조에대해서 알아보자

 

 

CPU(중앙처리장치)는 디지털 시스템에서 모든 연산을 처리하는, 따지면 뇌와 같은 기관이다. 빠른 연산속도를 가지고 명령의 해석이나 연산을 수행하는 기관으로 컴퓨터 논리기관의 핵심적인 소자라고 할 수 있다.

 

임베디드 기사에서는 위와 같은 이유로 CPU의 구조와 세부적인 내용을 시험으로 출제하고 있다. 하나하나 알아보자.


CPU의 개요

Central Process Unit, 중앙처리장치의 풀네임이다. 중앙에서 다 해먹는 중요한 처리장치라고 할 수 있겠다. 현대의 CPU구조는 1970년에 페드리코 페긴이 개발한 구조와 설계에서 기인했다고 한다. 컴퓨터 시스템은 운영 간 수많은 명령어를 처리하는데, 명령어를 기준으로 다음과 같은 기능을 가진다.

  • 인출(Fetch) : 저장공간상에 프로그램카운터(PC, 후술)이 가리키는 명령어를 가져와서 연산공간에 적재한다.
  • 해석(Decode) : 사용자나 시스템에 의해서 지정된 명령어를 해석하고 실행가능한 코드로 변환한다.
  • 실행(Execute) : 해석된 명령어에 따른 연산을 수행한다.
  • 쓰기(Writeback) : 명령어 수행결과를 다시 저장공간(메모리)에 작성한다.

CPU의 구성

CPU는 내부는 다음과 같은 개념도를 가진다.

<위키백과 - CPU - https://ko.wikipedia.org/wiki/%EC%A4%91%EC%95%99_%EC%B2%98%EB%A6%AC_%EC%9E%A5%EC%B9%98 >

위 그림에서 INPUT / OUTPUT과 저장공간(Main Memory)를 제외한 살구색 범위가 CPU의 내부 요소라고 보면 되겠다.

  • 제어부(Control Unit) : CPU와 전체 회로의 동작을 제어하게 되는 부품이다. 입출력장치와의 통신과 데이터처리를 수행한다.
  • 버스(Bus) : 데이터의 통신이 수행되는 모든 데이터의 전송경로를 Bus라고 부른다. 용도와 목적에 따라 입출력 버스 / 내부버스 등으로 구분되는데 CPU내부에 존재하는 버스는 내부버스라고 칭한다.
  • 산술논리장치(ALU;Arithmetic logic Unit) : CPU에서 연산을 전담하는 기관이다.
  • 레지스터 : CPU내부에서 특정한 기능을 수행하는 부품들이다. CPU를 구성하기 위해서 반드시 다음과 같은 레지스터가 필요하다.
    • 프로그램 카운터(Program Counter) : 다음 실행될 명령어의 주소를 가지고 있는 레지스터 이다. 다음 명령어가 인출(Fetch)된 이후에 다음 공간을 가리키기위해서 주소단위로 증가한다.
    • 명령어 레지스터(Instruction Register) ; 가장 마지막으로 실행된 명령어가 저장되어 있다.
    • 누산기(AC) : 연산을 위해서 일시적으로 저장되는 데이터를 가리키는 레지스터이다.
    • 메모리 버퍼 레지스터(MBR; Memory Buffer Register) : 기억장치에서 읽어들어온 데이터가 일시적으로 저장되는 레지스터다.
    • 메모리 주소 레지스터(MAR; Memory Address Register) : PC에 지정된 명령어 주소가 CPU로 넘어가기 전에 일시적으로 저장되는 공간이다.

명령어의 해석 

CPU나 마이크로 프로세서마다 길이와 구조가 달라진다. 실제로는 01의 연속된 임의의 길이로 구성되어있는데, 세상에 이것을 보고 작성할 수 있는 설계자가 어디있으랴, 이를 일정길이단위와 규격으로 기계어를 사람이 적어도 알아볼 수 있게 매핑해 둔 명령어 구조가 어셈블리어(Assembly)어 이다. 이를 통해서 우리는 CPU명령이 어떤 구조로 이루어져있는지를 알 수 있고 이 구소를 명령어 집합 구조(ISA; Instruction Set Architecture)라고 칭한다.

 

이 구조를 알기위해서 반드시 알아야하는 대표적인 CPU의 구조 구분으로 RISCCISC를 알아보겠다.

 

CISC vs RISC

RISC(Reduced Instruction Set Computer)은 지정된 CPU의 명령어 수를 압도적으로 줄여서 개별 명령어의 실행속도를 빠르게 한 컴퓨터 종류를 의미한다. 명령어 파이프라인(동시수행)을 통해 실행속도를 높여 후술될 비교대상군인 CISC의 느린속도 단점을 극복한다. 실제로 사용되는 명령어 개수가 적다는 점에서 착안하였다.

 

CISC(Complex Instruction Set Computer)은 반대로 RISC보다 많고 긴 명령어를 지원하는 컴퓨터 종류이다. 회로도 복잡해지지만 피연산자를 2~3개까지 지정할 수 있어서 일부 명령어는 재인출 없이 명령어 안쪽에서 처리되는 등(피연산자 12의 연산결과를 3에 지정) 직관적으로 변환한다. 요즈음은 실제로는 CISC구조 이더라도 내부적으로 파이프라인(병렬처리)를 다 수행하기 때문에 구분에 큰 의미가 없다는 정보도 뜨문뜨문 보이는거 같다.

 

명령어 지정방식

아무튼 명령어 지정방식에 컴퓨터구조에 따른 차이가 있다는 것을 알았고 본격적인 명령어의 지정방식에는 피연산자의 개수에 따라 0~3 operand가 존재한다.(Ex 1-operand면 피연산자가 1개이다.) 이 피연산자를 지정하는 방식이 여러 가지가 있는데, 다음과 같다.

  • 레지스터(Register) : 레지스터에 저장된 값을 접근할 때 사용한다.
  • 즉치방식(Immediately) : 명령어 자체에서 상수 값을 읽어올 때 지정한다.
  • 직접방식(Direct) : 고정된 주소의 메모리를 접근할 때 지정한다.
  • 레지스터 간접방식(Register Indirect) : 레지스터에 있는 주소의 메모리를 접근할 때 사용한다.
  • 거리방식(Distance) : 레지스터에 있는 주소에 일정 거리를 더한 주소의 메모리를 접근할 때 사용한다.
  • 인덱스방식(Index) : 레지스터에 있는 주소에 다른 레지스터 값에 해당하는 거리를 더한 주소의 메모리를 접근할 때 사용한다.

정리

중앙처리장치(CPU;Central Process unit)은 디지털 시스템의 뇌와 같은 기관으로 명령어의 해석 / 연산등을 담당한다. 내부에는 명령어 수행을 위한 레지스터와 제어부 같은 소자들이 존재한다. 이 명령어는 CPU의 방식(RISC vs CISC)에 따라 명령어의 구조나 길이가 달라진다.

 

다음시간에는

명령어의 병렬처리방식인 슈퍼스칼라방식과 파이프라인등을 알아보고 파이프라인의 해저드 등을 알아보도록 하겠다.

HDL

하드웨어 기술언어(HDL; Hardware Description Language)은 전자회로를 기술하는데 사용하는 컴퓨터언어이다. 즉 임베디드의 소자 제어를 위한 컴퓨터언어라고 할 수 있겠다.(이 무슨... 전자공학과 컴퓨터공학에 가교역할을 하는 혼종이란 말인가..) HDL은 설계(Design)과 기술(Description) 모든 목적으로 사용된다. 프로그램을 사용할 수 있으면 미리 회로를 작성하고 시뮬레이션하여 기댓값을 예측해 볼 수 있다.(비용 효율적!!)

 

FPGA(Field Programmable Gate Array)

FPGAHDL를 통해서 설계가 가능한 반도체 소자이다. 단순한 Gate(AND / NOR / NOT )이나 이를 활용한 조합논리나 순서논리회로를 내부에 포함하고 있고 이를 복제하여 사용자가 원하는 방향으로 커스터마이즈된 설계를 할 수 있다. 일반적으로 HDL의 표준으로 분류되는 VHDLVerilog를 사용한다. 둘다 임베디드 기사의 시험범위이기 때문에 간단하게 알아보자


HDL VHDL(VHSIC HW Description Language)

VHDL의 시작은 미국 국방부였다고 한다. 주문형 집적회로(ASIC)의 문서화를 위해서 사용된 언어였으나 오늘날에는 설계나 검증 등 범용적으로 사용되고 있다고 한다.

 

다음은 VHDL을 활용한 대표적인 코드 형태이다. (AND게이트)

-- (this is a VHDL comment)

-- import std_logic from the IEEE library
library IEEE;

use IEEE.std_logic_1164.all;

-- this is the entity

entity ANDGATE is
port (
I1 : in std_logic;
I2 : in std_logic;
O : out std_logic);
end entity ANDGATE;

-- this is the architecture
architecture RTL of ANDGATE is
begin
O <= I1 and I2;
end architecture RTL;

 

위를 통해서 알 수 있는 것은 주석(--), Library의 사용선언(Library)과 모듈 import(use) 게이트의 선언(entity ~ is ~ end entitiy) 키워드 등이 있는 것을 알 수 있다. 다행이도 직관적인거 같다. 조금 더 자세한 코드를 보면 아래 링크에 자세한 반복문과 제어문, 펄스생성등의 코드등이 존재한다. 읽어보면 직관적이어서 알기 쉽다.

 

VHDL - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 가산기를 표현하는 VHDL 소스. VHDL(VHSIC Hardware Description Language)은 디지털 회로 및 혼합 신호(mixed-signal, 아날로그 신호 포함)를 표현하는 하드웨어 기술 언어이다.

ko.wikipedia.org


HDL Standard – Verilog

무려 IEEE 1364으로 표준화가 되어있다. Verilogc언어와 비슷한 문법을 가지고 있어서 가독성이 높다. ifwhile과 같은 제어 반복문도 C와 동일하며 큰 차이점은 begin ~ end로 대체되는 중괄호 정도가 있겠다. VerilogVHDL보다 시험에서 정교하게 물어본다. 시험범위로 VHDL은 맥락적으로 질의하지만 Verilog는 이용한 논리회로 설계까지 물어보니 간단한 프로그램코드는 읽을 수 있게 하는게 좋을 거 같다.

 

Verilog 수

컴퓨터 상수 표현을 위해서 0x, 0o등을 사용하듯이 Verilog에서도 수를 특정한 방식으로 표현한다. [bit]’[진수][숫자] 순서로 표현되는데, 예시로 8’o4728비트 8진수 472를 의미한다.

 

Verilog에는 시스템 태스크라고 불리우는 특정 상수(일종의 기능포함)가 있다. 보통 테스트를 위해서 사용된다고 하며 대표적인 상수/함수는 다음과 같은 것들이 있다.

  • $display(인자) : 표준출력으로 표현하다. 개행이 포함되어있다.
  • $write(인자) : 표준출력으로 표현하나, 개행이 포함되어있지 않다.
  • $finish, $stop : 시뮬레이션을 종료한다. $stop의 경우 회로가 꺼지는 것은 아니고, 대기 상태가 된다. 반대로 $fisnish는 진짜 회로가 꺼진다.(제어권이 박탈된다.)
  • $time : 현재의 시간이 표현된다.
  • $random : 난수가 출력된다.

 

c와 비슷하다고 해서 필자도 공부를 위해 읽어보았는데, 이게 진짜 C랑 비슷한건지 싶긴했다... 코드로 작성된 것을 여러번 읽어보는게 좋을 거 같다. 사용되는 연산자도 의미가 살짝살짝 다르다. 아래의 Site에서 Verilog읽는 법을 공부할 수 있다.

 

Verilog Tutorial

This complete Verilog beginners tutorial will take you from basic datatypes to building hardware circuits in no time using real simple examples - click now !

www.chipverify.com


정리

이번시간에는 회로를 표현하고 설계할 수 있는 프로그래머블 언어인 HDL에 대하여 알아보았다. HDL에는 대표적으로 VHDLVerilog가 있고 시험을 위해서는 Verilog를 조금 더 구체적으로 알고 있어야 한다.

 

다음시간에는

다음시간에는 CPU대해서 자세하게 알아보는 시간을 가질 것이다. 구조부터 살펴보는 시간이 있겠다.

 

메모리

메모리는 컴퓨터의 정보를 저장하는 임시공간이다. 플립플롭에서 이야기는 안했는데, 플립플롭(1bit 저장회로)는 기본적으로 휘발성(클럭이 멈추면 데이터가 소멸) 그러니까 저장장치는 단순하게 보면 플립플롭의 조합으로 이루어지려면 전기가 끊기면 데이터가 사라지는 숙명을 가지고 있는거라고 볼 수 있겠다.

 

이에 따라 비활성의 데이터저장공간을 확보하는 것은 중요한 숙제였고 우리 이과형님들은 언제나 그렇듯 여러 가지 저장장치(메모리)를 만들면서 해결하였다. 아참 여기서 저장장치가 휘발성이냐 비휘발성이냐가 진보된 기술이냐를 반증하지는 않는다. 저장장치의 성능을 평가하기 위해서는 접근속도와 저장용량등 여러 가지특징 구분에 따라 결정되어야하기 때문이다. 이번 시간에는 디지털 회로로 구성된 여러 가지의 저장장치를 알아보도록 하겠다.


메모리 – RAM(Random Access Memory)

RAM은 자유롭게 내용을 읽고 쓰고 지울 수 있는 저장장치이다. 전자장비의 전원이 들어오는 순간부터 처리장치(보통 CPU)의 연산을 보조하며(연산결과의 기억 등) 전원이 종료되는 순간까지 그 내용을 기억하고 있는 소자이다. 방식에 따라 SRAMDRAM으로 구분된다.

 

DRAM(Dynamic RAM)

동적 RAM이라고도 부른다. 일정시간마다 전원 공급과정(Refresh)를 해야 내용을 기억할 수 있다. 이는 구성이 커패시터(축전기)를 통해 만들어져있기 때문인데, 사용 중 충전시간이 필요하기에 SRAM에 비해 상대적으로 속도가 느리지만(컴퓨터가 느려봤자 얼마나 느리겠는가) 가격이 저렴하다.(트랜지스터1개와 축전기로 구성) 주로 컴퓨터의 메인 메모리에 사용된다.

 

SRAM(Static RAM)

정적 RAM이라고 부른다. 정적(Static)이라는 이름에 걸맞게 전원이 계속하여 공급된다는 가정하에 SRAM은 정보가 유지된다.(DRAMRefresh없으면 지워짐) Refresh가 없다는점과 더불어 또한 속도가 빠르지만 가격이 비싸고(트랜지스터 다수로 구성) 고속 저용량 접근이 필요한 캐시메모리등에 사용된다.

 

NVRAM(Non Volatile RAM)

사실 RAM이라고 다 휘발성은 아닌가 보다. NvRAM은 후술할 EEPROM과 결합하여 정보를 저장하고 휘발성을 다소 버리면서도 임의접근 메모리의 장점을 취할 수 있다.


메모리 – ROM(Read Only Memory)

ROM은 영문만을 해석해보면 읽기 전용 메모리이다. 즉 읽기만 하고 쓸 수는 없는 메모리라는 건데, 시간이 지나면서 여러번의 재기록도 지원하게 되었다. RAM과의 대표적인 차이점은 비휘발성이라는 점인데, 아예전원이 나가도 내용이 기록되고 잊혀지지 않는다. 이를 이용하여 보통 펌웨어나 다른 영구적으로 저장이 필요한 데이터가 이곳에 기록되게 된다.

 

Masked ROM

가장 ROM다운 ROM이다. 회사에서 ROM생산 당시에 정보를 기록하면 두 번다시는 바꿀 수 없다. 마스크라는 이름은 제조시에 사용하는 얇은 막(마스크)의 명칭을 가져왔으며 역시 공장이 그렇듯 대량생산에 적합하다

 

PROM(Programmable ROM)

사용자가 맨 처음 1회에 한하여 내용을 기록할 수 있는 ROM으로 Masked ROM과의 차이점은 벤더가 기록하는가 아니면 사용자가 기록하는가에 차이다.

 

EPROM(Erasable PROM)

기록된 PROM을 자외선을 활용하여 내용을 지우고 다시 쓸 수 있는 형태의 ROM이다.

 

EEPROM(Electrically Erasable PROM)

자외선을 사용하지 않아도 된다! 전기적으로 그 내용을 지우고 여러번 재사용할 수 있는 ROM이다. 자외선을 발산하기위한 EPROM Writer라는 기계도 필요없게 되었다. 가격은 당연히 상대적으로 비싸다.

 

플래시 메모리(Flash Memory)

최종적으로 진화한 ROM의 현대형태이다. EEPROM의 변형형태로 NAND 게이트를 직렬로 연결한 Read 저속 Write 고속 형태와 NOR 게이트를 병렬로 구성한 Read 고속 Write 저속 형태의 NOR 형태가 존재한다.

 

정리하면 다음과 같은 계층도를 가질 거 같다.


정리

이번시간에는 기억소자에 대해서 알아보았다. 휘발성 유무에 따라 RAMROM으로 분류를 하고 여라가지 형태의 RAMROM을 공부해 보았다.

 

다음시간에는

다음시간에는 필자도 잘 모르는 HDL과 프로그래머블 로직에 대해서 공부해 보겠다.

 

+ Recent posts