매우 간단한 비동기 DRAM 컨트롤러를 어떻게 구현할 수 있습니까?


9

베어 본 비동기 DRAM 컨트롤러를 구축하는 방법을 알고 싶습니다. 가정용 복고풍 컴퓨터 프로젝트에 사용하고 싶은 30 핀 1MB SIMM 70ns DRAM (패리티 포함 1Mx9) 모듈이 있습니다. 불행히도 그들에 대한 데이터 시트가 없으므로 IBM 의 Siemens HYM 91000S-70"DRAM 운영 이해" 에서 왔습니다 .

내가 끝내고 싶은 기본 인터페이스는

  • / CS : 입력, 칩 선택
  • R / W : 입력, 읽기 / 쓰기 금지
  • RDY : 출력 준비 완료
  • D : 인 / 아웃, 8 비트 데이터 버스
  • A : 20 비트 주소 버스

새로 고침은 여러 가지 방법으로 매우 간단 해 보입니다. 행 주소 추적을 위해 오래된 카운터를 사용하여 CPU 클럭 LOW (이 특정 칩에서 메모리 액세스가 수행되지 않는) 동안 분산 (인터리브) RAS 전용 새로 고침 (ROR)을 수행 할 수 있어야합니다. JEDEC에 따라 모든 행을 적어도 64ms마다 새로 고쳐야한다고 생각합니다 (Seimens 데이터 시트에 따라 8ms 당 512 개, 즉 표준 1 / 6us의 표준 새로 고침). 다른 질문. 나는 읽고 쓰는 것이 간단하고 정확하며 내가 기대하는 것을 결정하는 데 더 관심이 있습니다.

먼저 그것이 어떻게 작동하는지 생각하고 지금까지 생각해 낸 잠재적 인 해결책에 대해 빨리 설명하겠습니다.

기본적으로 열의 절반과 행의 절반을 사용하여 20 비트 주소를 절반으로 분할합니다. / CAS가 LOW가 될 때 / W가 HIGH이면 행 주소, 열 주소를 스트로브하고 읽습니다. 그렇지 않으면 쓰기입니다. 쓰기 인 경우 데이터는 해당 시점까지 데이터 버스에 이미 있어야합니다. 일정 시간이 지난 후, 읽기 인 경우 데이터를 사용할 수 있거나 쓰기 인 경우 데이터가 기록 된 것입니다. 그런 다음 반 직관적으로 "사전 충전"기간에 / RAS 및 / CAS를 다시 HIGH로 설정해야합니다. 이것으로 사이클이 완료됩니다.

따라서 기본적으로 각 전환 사이에 일정하지 않은 특정 지연으로 여러 상태를 통한 전환입니다. 거래의 각 단계 기간에 따라 순서대로 색인 된 "테이블"로 나열했습니다.

  1. t (ASR) = 0ns
    • / RAS : H
    • CAS : H
    • A0-9 : RA
    • / W : H
  2. t (RAH) = 10ns
    • / RAS : L
    • CAS : H
    • A0-9 : RA
    • / W : H
  3. t (ASC) = 0ns
    • / RAS : L
    • CAS : H
    • A0-9 : CA
    • / W : H
  4. t (CAH) = 15ns
    • / RAS : L
    • CAS : L
    • A0-9 : CA
    • / W : H
  5. t (CAC)-t (CAH) =?
    • / RAS : L
    • CAS : L
    • A0-9 : X
    • / W : H (사용 가능한 데이터)
  6. t (RP) = 40ns
    • / RAS : H
    • CAS : L
    • A0-9 : X
    • / W : X
  7. t (CP) = 10ns
    • / RAS : H
    • CAS : H
    • A0-9 : X
    • / W : X

내가 언급하는 시간은 다음 다이어그램에 있습니다.

타이밍 다이어그램

(CA = 열 주소, RA = 행 주소, X = 상관 없음)

그것이 정확하지 않더라도 그것은 그런 식이며 같은 종류의 솔루션이 효과가 있다고 생각합니다. 그래서 지금까지 몇 가지 아이디어를 생각해 냈지만 마지막 아이디어 만 잠재력이 있으며 더 나은 아이디어를 찾고 있다고 생각합니다. 새로 고침, 빠른 페이지 및 패리티 검사 / 생성을 무시하고 있습니다.

가장 간단한 해결책은 카운터 출력과 ROM 출력을 사용하는 것입니다. 여기서 카운터 출력은 ROM 주소 입력이고 각 바이트는 주소가 해당하는 시간 동안 적절한 상태 출력을 갖습니다. ROM이 느리기 때문에 작동하지 않습니다. 사전로드 된 SRAM조차도 가치가 너무 느릴 것 같습니다.

두 번째 아이디어는 GAL16V8 또는 무언가를 사용하는 것이었지만 충분히 이해하지 못한다고 생각합니다. 프로그래머는 매우 비싸며 프로그래밍 소프트웨어는 폐쇄 소스 및 Windows 전용입니다.

내 마지막 아이디어는 실제로 효과가 있다고 생각하는 유일한 아이디어입니다. 74ACT 로직 제품군은 전파 지연이 낮고 클럭 주파수가 높습니다. 나는 읽기를 생각하고 있어요 및 쓰기 일부와 함께 할 수 CD74ACT164E의 시프트 레지스터와 SN74ACT573N .

기본적으로 각 고유 상태는 5V 및 GND 레일을 사용하여 자체적으로 고정 된 래치를 갖습니다. 각 시프트 레지스터 출력은 하나의 래치의 / OE 핀으로갑니다. 데이터 시트를 올바르게 이해하면 각 상태 간의 지연은 1 / SCLK 일 수 있지만 PROM 또는 74HC 솔루션보다 훨씬 낫습니다.

그렇다면 마지막 접근 방식이 효과가 있습니까? 이 작업을 수행하는 데 더 빠르거나 작거나 일반적으로 더 좋은 방법이 있습니까? IBM PC / XT가 DRAM과 관련하여 7400 칩을 사용했지만 톱 보드 사진 만 보았으므로 어떻게 작동하는지 잘 모르겠습니다.

ps FPGA 나 최신 uC를 사용하여 "속임수"가 아닌 DIP에서이 기능을 수행하고 싶습니다.

pps 아마도 동일한 래치 방식으로 게이트 지연을 직접 사용하는 것이 더 좋습니다. 시프트 레지스터와 직접 게이트 / 전파 지연 방법은 온도에 따라 달라질 수 있지만이를 받아들입니다.

앞으로이 발견 누군가를 위해, 이 논의 빌 허드와 앙드레 Fachat 사이는 DRAM 테스트를 포함하여이 스레드에 나와있는 다른 문제에 언급 된 디자인의 여러 다룹니다.


1
레트로 컴퓨터에서 어떤 CPU를 사용할 예정입니까?
익명

6502, 메모리는 분명히 뱅킹됩니다.
Anthony

자전거를 발명 ​​할 수 없습니까? DRAM을 사용하여 이미 사용 가능한 디자인이 있습니까? 이 컴퓨터 제품군에는 익숙하지 않지만 C64는 잘 일치해야합니다. 그러나 원래 RAM을 제어하기 위해 6567 "VIC"칩을 사용합니다. 그러나 다시, 나는 그 이후로 당신이하고 싶은 일과 관련된 프로젝트가 있다고 확신합니다.
익명

3
약간 뒤틀린 제안 : Z80에는 새로 고침 논리를 처리하기에 충분한 DRAM 컨트롤러가 내장되어 있습니다. (여전히 주소 멀티플렉서가 필요했습니다)
Brian Drummond

3
@BrianDrummond 제발, 어두운쪽으로가는 것은 권장하지 않습니다. 좋은 점은 없습니다.
파이프

답변:


6

IBM Personal Computer XT 기술 참조 매뉴얼 (부록 D)에는 IBM PC / XT에 대한 전체 회로도가 있으며 온라인에서 찾을 수 있습니다.

여기서 문제는 메모리 읽기 또는 쓰기시 활성화되는 스트로브 라인이 주어지면 RAS, CAS 및 주소 멀티플렉서에 대한 제어 라인 (MUX)을 생성하려고한다는 것입니다. 간단하게하기 위해 스트로브, RAS 및 CAS가 모두 활성 수준이라고 비현실적으로 가정합니다.

이시기에 다른 컴퓨터의 PC / XT 회로도와 회로도를 보면 대략 다음과 같은 세 가지 기본 전략이 있습니다.

  • RAS 용 스트로브를 사용하십시오. RAS에서 지연 라인 (출력이 입력의 시간 지연 버전 인 부분)을 사용하여 MUX를 생성하고 다른 지연 라인을 사용하여 CAS에 사용되는 RAS의 최신 버전을 생성하십시오. 이 전략은 PC / XT 및 TRS-80 모델 II에서 사용됩니다.

    예시적인 (현대) 지연 라인 부분은 Maxim DS1100입니다.

  • RAS에는 스트로브를 사용하고 MUX 및 CAS에는 스트로브를 사용하지만 지연 라인 대신 고속 시프트 레지스터를 사용하여이를 수행하십시오. 이 전략은 TRS-80 모델 I 및 Apple II에서 사용됩니다.

  • 맞춤형 IC를 사용하십시오. 이것이 Commodore 64의 전략입니다.


분명히 어제 부록 D가없는 XT TR 만 찾았습니다. 나는 지금 그것을 얻었다, 이것은 위대하다. 나는 이러한 지연 라인 IC가 존재하는지 알지 못했고 온도를 어떻게 처리했는지 궁금했습니다. 현대적인 예를 언급 해 주셔서 감사합니다. 여러 솔루션의 경우 +1
Anthony

5

귀하의 질문은 실제 문제가 무엇인지 확실하지 않을 정도로 복잡하지만 시도 할 것입니다!

내가 찾을 수있는 "가장 깨끗한"6502 기반 DRAM 디자인은 Commodore PET 2001-N 에서 나온 것 입니다. 1502에서 6502를 실행하지만 DRAM 로직은 16MHz에서 클럭되므로 모든 타이밍을 생성 할 수 있습니다.

세부 사항을 분석하지는 않았지만 주요 동작은 74164 시프트 레지스터에 연결된 74191 4 비트 카운터에서 발생하는 것으로 보입니다. 이것은 R / W 라인에 의해 제어되는 74157 MUX로 들어가는 8 개의 개별 라인을 출력합니다. MUX의 출력은 최종 RAS / CAS 신호를 생성하기 위해 7474 플립 플롭과 일부 이산 로직으로 들어갑니다. 다음은 참조 회로도에서 관련 페이지로 연결되는 발췌문입니다.

PET 2001-N 참조 페이지 6

새로 고침은 별도의 카운터로 처리되며 각 주소 줄은 "실제"주소 또는 새로 고침 주소를 선택하는 멀티플렉서에 연결됩니다.

이 논리의 일부는 비디오 서브 시스템에 대한 타이밍을 생성하는 것으로 보입니다. 특정 요구에 맞게 단순화 할 수는 있지만 고주파수 카운터, 시프트 레지스터 및 멀티플렉서와 ​​비슷한 것이 유용 할 수 있다고 생각합니다.


이것은 내가 생각한 것이지만 MUX 또는 2 대신 여러 개의 래치를 브레인 스토밍 할 정도로 멍청했습니다. 16Mhz 클럭은 a) 내가 방금 발견 한 CPU 클럭보다 훨씬 높지만 의미가 있습니다 .b) 위상은 최소 ~ 62ns + 전파 지연이 느리다고 생각할 수 있지만 지금은 느립니다. IBM PC / XT와 동일한 순서로 표시됩니다.
Anthony

Apple II는 14.318MHz 비디오 클럭을 사용하여 CPU와 비디오 사이의 메모리를 경합없이 반 주기로 번갈아 공유하고 타이밍을 공유하는 것과 매우 유사합니다. 비디오 새로 고침 활동은 메모리를 새로 고치는 역할도하기 때문에 별도의 새로 고침 카운터가 필요하지 않습니다.
Dave Tweed

-2

ps FPGA 나 최신 uC를 사용하여 "속임수"가 아닌 DIP에서이 기능을 수행하고 싶습니다.

나는 프로젝트의 정신과 비 공상 부품을 사용하려는 당신의 욕구를 완전히 이해하지만, 내가 당신이라면 FPGA 방식으로 갈 입니다.

몇 가지 이유:

  1. 완벽한 학습 기회입니다. DRAM 컨트롤러를 설계하는 것은 "hello-world"프로젝트가 아니며 그 후에 FPGA를 "가능"하다고 자신있게 말할 수 있습니다.
  2. 특히 메모리가 오래된 DRAM 칩인 경우이 메모리에서 모든 성능 비트를 압축 할 수 있습니다. 집에서 만든 6502 기반 PC를 보유 할뿐만 아니라 가장 빠른 6502 기반 PC를 보유 할 수도 있습니다.
  3. 문제를 디버그하거나 CPU가 발행 한 메모리 작업을 통계하는 것이 훨씬 쉬울 수 있습니다. 병렬 버스에서 로직 애널라이저를 사용할 수 있지만 결코 재미가 없습니다 (내 친구는이 라인을 따라 무언가를합니다-그는 사이클 정확한 시뮬레이션을 8088로 작성하고 싶어하기 때문에 메모리 액세스 및 타이밍에 대한 통계를 수집해야합니다 패턴. 그는 원래 칩 세트 (8288, 8280, 8237)을 사용하며 채널의 많은 로직 분석기를 사용하지만, 자신의 경험에서 나는 당신을 말할 수 있다 ) 드래그.

2
이것이 의견이 아닌 답변인지 잘 모르겠습니다. 1) 그는 FPGA를 배우고 싶다고 말하지 않습니다. 2) 80 년대 DRAM은 디스크리트 로직에 비해 이미 느리다. 3) 디버깅이 어려울 수 있습니다. FPGA 또는 소프트웨어로 모든 것을 구현하지 않는 이유는 무엇입니까? RAM을 전혀 사용하지 않는 이유는 ... :)
pipe

1
@pipes : 맞아요. 현재 FPGA를 배우는 데 시간을 보내고 싶지 않습니다. 나는 두 번째 무관 한 아날로그 프로젝트로 이미 내 판에 충분했습니다. FPGA와 PLD는 일반적으로 언젠가는 어떻게 사용하는지 배울지라도이 시점에서 방해가되지 않는 것처럼 느낍니다.
Anthony

1
@pipe : 특히 보드에 특별히 숙련되지 않은 경우, 보드를 재배 선하는 것은 종종 어렵고 시간이 많이 걸리고 실망 스럽습니다. 디자인의 일부에 상당히 간단한 PLD (예 : 22V10)를 사용하면 더 쉽게 조정할 수 있습니다.
supercat
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.