8085 마이크로 프로세서에서 클럭 주파수가 2로 나누어 진 이유는 무엇입니까?


16

생성 된 클럭 주파수가 6.144MHz이지만 내부적으로 (8085 프로세서) 3.072MHz 만 사용하는 이유는 무엇입니까? 또한 시계에서 6.144의 특정 값으로 이어집니다.

yahoo에서 답을 찾았습니다 .... http://answers.yahoo.com/question/index?qid=20080810090119AAurr2i

그러나 나는 아직도 그것을 잘 얻지 못했다는 것을 인정해야합니다. 이 중 몇 줄을 버리시겠습니까?


2
야후 응답은 매우 가난합니다. 작가를 알고 있으면 용서해주십시오.
Kortuk

흠, 이번 학기에는 마이크로 프로세서를 가져 왔기 때문에 그것이 얼마나 잘못되었을 지 전혀 모른다. 나는 여기에 대답이 있다고 생각합니다 ... 감사합니다.
loxxy

1
MC6800은 훨씬 더 까다로 웠습니다. 그것은 일 필요 개의 클럭 입력 (phi1가 PHI2는 CA에 180 ° 위상 시프트) 한 비 중첩을 , 즉 하나의 단계는 다른이 상승시켰다 전에 일부 NS에 대한 낮은되어야했다. 이러한 클럭 신호를 생성하기 위해 추가 발진기 IC (MC6810?)가있었습니다.
Curd

1
@Curd Nasty 타이밍과 공급 레일 (매우 드문 경우) 모두에 매우 근접하게 스윙해야했습니다. pdf.datasheetarchive.com/indexerfiles/Scans-000/… MC6871. MC6810은 128 x 8 (!) 정적 RAM 칩입니다.
Spehro Pefhany

답변:


15

클록을 2로 나누는 한 가지 이유는 50 % 듀티 사이클 구형파를 얻는 것입니다. 8085는 내부적으로 두 클럭 에지를 모두 사용하며 사이클의 절반이 다른 클럭 에지보다 훨씬 짧은 경우에는 작동하지 않을 수 있습니다.

8085가 처음 등장했을 당시, 그처럼 통조림으로 만들어진 훌륭한 발진기는 흔하지 않았으며, 사람들은 종종 이산 결정, 커패시터 및 논리 게이트에서 클록 회로를 함께 뭉쳤습니다. 2로 나누면 상승 간격과 하강 간격이 동일하게 유지됩니다.

6.144MHz의 경우, 최소 38400까지 일반적인 보드 율 값을 얻기 위해 정수로 나눌 수 있습니다.


후속 ...

8085에 대한 인텔 데이터 시트를 보면 세 가지 흥미로운 진술이 있습니다.

  1. 8085는 8224 클럭 생성기 및 8228 시스템 컨트롤러가 8080A에 제공 한 모든 기능을 통합합니다

  2. X1 및 X2 : 크리스탈, LC 또는 RC 네트워크에 연결되어 내부 클록 생성기를 구동합니다. 입력 주파수는 2로 나누어 프로세서의 내부 작동 주파수를 제공합니다.

  3. CLK : 시스템 클록으로 사용하기위한 클록 출력. CLK주기는 X1, X2 입력주기의 두 배입니다.

따라서 클럭의 홀수 에지를 사용하여 내부적으로 물건을 옮기는 것에 대한 추측은 8085를 설계 할 때 인텔이 해당 기능을 칩에 통합하여 특수 클럭 컨트롤러의 필요성을 대체하고 있음이 분명해졌습니다. CLK로 출력하기 전에 X1-X2 타임베이스를 반으로 나누면 시스템 이 다른 경우에도 좋은 듀티 사이클을 얻을 수 있습니다.


1
종종 마이크로 컨트롤러의 다른 단계는 로직 지연으로 인해 위상이 맞지 않아야합니다. 고속 발진기를 사용하고 서로 다른 로직 세트에 대해 두 개의 서로 다른 에지를 나누고 사용하면 디바이스 비용을 크게 줄일 수 있습니다. JustJeff는 표준 클럭 속도의 배수 인 오실레이터를 사용합니다. 고속 전송을 매우 쉽게 할 수 있습니다.
Kortuk

2
듀티 사이클 문이 확실합니까? 명령 사이클에 여러 클럭 사이클 (예 : 페치 사이클과 실행 사이클로 구성된 하나의 명령 사이클)이 필요할 수 있다는 인상을 받았습니다. 나는 확신도 현대의 PICS는 데이터 시트에 걸쳐 모든 FOSC / 4이 이유있는 4 단계의 명령 사이클이있어
ajs410

1
@ ajs410-8085는 명령을 완료하는 데 여러 클럭 사이클이 필요합니다. 그 당시의 모든 8 비트 마이크로 (내가 알고있는)는 적어도 두 개의 시계를 사용하여 아무것도하지 않았습니다. 내가 여기서 말하는 것은 순전히 칩 내부입니다. 이 오래된 짐승의 블록 다이어그램을 보면 내부 버스, 임시 레지스터 등이 있으며 두 가장자리를 모두 사용하고 있다고 추측합니다. 모든 외부 버스 사이클은 동일한 극성의 에지 사이에서 실행됩니다.
JustJeff

6

이 칩이 디자인 될 당시 사람들은 CPU에서 가능한 적은 수의 트랜지스터를 사용하여 사용 가능한 칩에 맞도록 충분히 작게 만들었습니다.

나는 그 시대의 CPU에있는 실질적으로 모든 "레지스터"(프로그래머가 볼 수있는 명령어 세트 레지스터와 내부 마이크로 아키텍처 래치 둘 다)가 투명한 게이트 D 래치 또는 이와 유사한 것으로 데이터를 저장했다고 생각한다. 요즘에는 칩에 트랜지스터가 많이 있으므로 두 배나 많은 트랜지스터를 사용하더라도 풀 마스터 슬레이브 D 플립 플롭을 사용하는 것이 더 간단합니다.

많은 명령어는 일부 레지스터 A에서 데이터를 가져 와서 다른 데이터와 ALU와 결합한 후 결과를 레지스터 A에 다시 저장합니다. 레지스터 A가 전체 마스터-슬레이브 D 플립 플롭으로 구현 된 경우 매우 쉽습니다.

그러나 레지스터 A가 투명 게이트 D 래치 인 경우 겹치지 않는 클럭이 필요합니다. 한 클럭에 펄스를 사용하여 어딘가 중간 결과를 어딘가에 저장하고 (레지스터 A가 출력 상수를 유지하는 동안) 다른 클럭에 펄스를 사용하여 레지스터 A에 새로운 값을로드합니다 (중간 레지스터가 출력 상수를 유지함).

2 상 클럭이 필요합니다. 겹치지 않는 2 상 클록 (트랜지스터가 부족한 시대)을 만드는 가장 쉬운 방법은 입력 클록을 가져 와서 2로 나누는 작은 외부 회로였습니다.

시간이 지남에 따라 사람들은 IC에 점점 더 많은 트랜지스터를 포장하는 방법을 알아 냈습니다. 따라서 CPU를 설계하는 사람들은 전체 컴퓨터 시스템에서 CPU 주변에 점점 더 많은 것들을 CPU 칩에 통합했습니다.

Wikipedia clock signal article 의 라인 사이를 읽으면서 8085와 6502를 디자인 한 사람들과 그 시대의 다른 칩을 이전 세대의 통합 CPU보다 조금 더 여유가 있다는 인상을 받았습니다. 그 방의 사용은 그 작은 외부 회로를 칩에 두는 것이 었습니다. 그러나 모든 레지스터를 이전과 동일한 게이트 D 래치로 유지했습니다.

그래서 클럭 주파수가 2로 나뉩니다. 첫 번째 외부 클럭 펄스는 phase_one 내부 클럭 신호에서 펄스를 생성하여 중간 결과 레지스터를 업데이트하고 외부 클럭에서 두 번째 펄스는 phase_two 내부 클럭 신호에서 펄스를 생성하여 프로그래머가 볼 수있는 레지스터를 업데이트 할 수 있습니다.


래치를 다시로드하지 않고 몇 마이크로 초 이상지나 가지 않으면 회로를 더욱 단순화하여 "래치"가 단일 트랜지스터 패스 게이트 및 인버터에 지나지 않습니다.
supercat

1
위의 글을 쓴 후 6502의 디자인을 조사했습니다. 많은 내부 버스는 한 클럭 위상에서 무조건 높은 상태로 구동되고 다른 클럭 위상 동안 선택된 레지스터는 적절한 비트를 낮출 수 있습니다. 예를 들어 버스로 출력 할 수있는 5 개의 레지스터가있는 경우 이는 각 레지스터의 출력에 풀업 장치가 필요하지 않고 각 레지스터에 스위치 풀업 장치 1 개와 2 개의 직렬 배선 트랜지스터 2 개만 사용할 수 있음을 의미합니다. 필요한 경우 버스를 아래로 당깁니다. 나는 8085가 거의 확실히 비슷한 속임수를 사용할 것으로 기대합니다.
supercat

2

명령주기를 여러 클록 주기로 나누는 데는 여러 가지 이유가 있습니다. 좋은 예는 메인 메모리 버스에 액세스하는 것입니다.

대부분의 최신 프로세서는 Von-Neumann 아키텍처입니다. 즉, 그들의 코드와 데이터는 모두 동일한 메모리 칩에 존재합니다. 명령을 읽으려면 해당 명령이 메모리에서 변수를로드 할 것입니다. 그것은 두 개의 메모리 액세스입니다. 그러나 대부분의 메모리는 단일 포트 일뿐입니다 (즉, 사이클 당 하나의 읽기 또는 쓰기 만 수행 할 수 있음). 그렇다면 명령어 읽고 변수를 어떻게 읽습니까?

해결책은 2 단계 명령주기를 사용하는 것입니다. 첫 번째 단계는 메모리에서 명령어를 가져오고 두 번째 단계는 주 메모리에서 변수를 읽거나 쓸 수 있습니다.

일부 구형 칩은 더 발전했습니다. 당시 칩에 16 비트의 주소 지정 가능 메모리가 있지만 외부 주소 버스가 8 비트 인 경우 주소 래치 활성화에 익숙 할 것입니다. 한 클록 사이클은 16 비트 주소의 상위 8 비트를 전송하고 다음 클록 사이클은 하위 8 비트를 전송합니다. 세 번째 사이클은 변수를 메모리에서 읽고 쓸 수 있습니다.

명령 사이클이 여러 클럭 사이클 인 다른 더 좋은 이유가 있습니다. 가장 좋은 이유 중 하나는 파이프 라이닝입니다. 이것은 현대 프로세서가 칩에서 사용 가능한 모든 실행 장치를보다 완전히 활용하기 위해 사용하는 트릭입니다. 예를 들어, 하나의 명령이 실행되는 동안 다음 명령이 동시에 페치됩니다.


3
OP가 왜 여러 클럭에 걸쳐 명령을 분산시켜야하는지 묻지 않고 8085가 의도 한 것을 취하는 것과는 반대로 2X 클럭 (내부 분할)을 공급하도록 설계된 이유를 묻습니다. 직접 클럭 주파수.
JustJeff

1
그러나 당신이 지시에 대해 말한 모든 것이 있습니다.
JustJeff

1

내부적으로 8085A의 코어에는 2 상 클럭이 필요합니다. 두 클럭 위상을 유도하는 내부 로직은 입력 클럭을 2로 나눕니다. 앞서 언급했듯이 6.144MHz 입력 클럭을 사용하는 이유는 보드 속도 목적으로 칩이 6MHz에서 제대로 작동하는 것입니다. 이 칩은 실제로 6MHz 크리스털을 필요로하는 3MHz 등급이지만,보다 빠른 전송 속도를 제공하는 6.144MHz로 즐겁게 동작합니다 (Uart는 8085를 구동하는 오실레이터의 6.144MHz 또는 8085의 CLK 출력에서 ​​3.072MHz로 클럭 될 수 있음) 사용 가능한 많은 전송 속도를 제공). 나는 아직도 이러한 구식 칩을 사용하여 일부 로봇에서 특수 기능을 수행합니다. 나는 자체 발진기로 Uarts를 클럭킹하고 2.8MHz로 칩을 작동시키는 6.4MHz 발진기로 8085A를 클럭킹한다. 3. 2MHz는 초음파 트랜스 듀서를위한 40KHz 클록을 제공하기 위해 훌륭하게 나뉩니다. 내 '보트에서 더 현대적인 IC 장치를 사용하는 것이 더 합리적이지만, 실제로 놀고있는 오래된 8085, Z80, 63C09 및 63C09E, 68B09 및 68B09E 등이 있습니다.


0

시계는 이벤트가 발생하기를 원하는 순간입니다. 이제 더 많은 시간이 주어지면 마이크로 프로세서 내의 서로 다른 회로간에 상호 작용이 발생하여 단락이 발생할 수 있으므로 디지털 회로에서 레벨 트리거링을 선호하지 않습니다. EDGE TRIGGERING을 진행합니다. 이제 마이크로 프로세서는 에지 트리거링이 언제 발생했는지 알 수 없습니다. 1 또는 0 만 이해합니다. 따라서 클럭 에지가 감지 될 때마다 1과 0을 생성하려면 플립 플롭이 필요합니다. 따라서 플립 플롭을 사용해야한다. 결과적으로 클럭 주파수는 2로 나뉩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.