일부 논리적 인 경우 데이터 라인에 이상한 "노치"가 표시되는 이유는 무엇입니까?


15

재 계산 재미를 위해 Z80 가정용 컴퓨터를 만들고 전자 설계의 기초를 가르치려고합니다. 개념 증명을 위해, 나는 이미 지난 몇 주 동안 브레드 보드에 기본 시스템을 성공적으로 조립했습니다.

현재 프로토 타입은 매우 간단합니다. I는 시스템 클럭으로서 74HCT04 피어스 발진기에 의해 구동되는 4 MHz의 결정을 사용한 투명 모드 (두 74HCT573 래치 LE16 비트 어드레스 버스 버퍼 높이)에 의해 제어되는 반대 방향에서 다른 두 74HCT573 RDNOT RD양방향 데이터로 버스 버퍼. I는 부착 이 100ns AT28C256 EEPROM (16 킬로바이트 - 디코드) 두 150 NS 시스템 버스에 8 킬로바이트 SRAM 칩. 나는 74HCT42를 사용하여 CS신호 를 생성하고 OEEEPROM의 WE제어를 위해 단 하나의 CS 신호 만 남겨두고 EEPROM 의 신호 를 낮음, 높음으로 고정 배선했습니다 .

브레드 보드의 모든 것이 시끄럽지 만 모든 단계를 완료 한 후 시스템이 완전히 작동하는 것처럼 보입니다. 이제부터 /를 SRAM에 기록 데이터를 판독하고 상기 EEPROM로부터 명령을 페치 할 수 있고, 또 다른 래치 74HCT573로 이루어지는 시리얼 포트를 가지고 D0연결되어 D0, LE되고 (NOT (IOREQ NAND WR)), 출력으로부터 나오는 Q1즉, 하나 개의 출력 포트 adrress 디코딩 로직이 없습니다. CPU / RAM을 많이 사용하는 벤치 마크 프로그램을 작성했으며 컴퓨터에서 예상 결과를 출력 할 수 있습니다. Memdumps는 또한 Z80이 EEPROM에서 모든 바이트를 올바르게 읽을 수 있으므로 모든 것이 작동하는 것으로 나타났습니다.

그러나 D0데이터 버스의 핀 을 조사하려고 할 때 , 명백한 논리적 인 1 출력에 대한 이상한 "노치"를보고있었습니다.

D0의 이상한 노치의 예

CSEEPROM 의 신호가 활성화 된 직후 일부 논리 1에 대해 항상 나타나는 것처럼 보입니다. 예를 들어, 여기에는 파란색 EEPROM CS 신호에 중첩 된 이상한 노치가 있습니다.

CS 신호에 겹쳐진 이상한 노치

나는 문제를 격리하려고 노력했기 때문에 SRAM의 모든 CS 핀을 HIGH로 배선하여 효과적으로 시스템에서 제거했습니다. 메모리 액세스가없는 간단한 테스트 프로그램을 작성했습니다.

.org 0x00
    di

    xor a
loop:
    out (0x00), a
    inc a

    jp loop

그러나 문제는 변경되지 않습니다, 이상한 "노치"여전히 항상 나타나지 일부 직후, 로직 1 MEMRQ(지금 본질적으로 하나의 칩 이후) 및 / 또는 CS낮은 (파란색) 간다.

SRAM의 모든 CS 핀은 HIGH이므로 시스템은 메모리로 AT28C256 EEPROM 칩만 있고 출력 포트로 래치 만 있습니다. 이 시스템에는 DMA 요청 중에 EEPROM을 즉석에서 다시 프로그래밍하기 위해 Atmega328p로 만든 시스템 내 프로그래머가 있지만 프로그래머의 모든 데이터와 주소 출력을 tristats했기 때문에 이것이 범인이라고 생각하지 않습니다. 프로그래머를 추가하기 전에도 노치를 보았습니다.

"노치"의 다른 예

따라서 "노치"는 opcode 페치주기 동안 작성되어야합니다. 그들은 무엇인가?

몇 가지 가설이 있습니다.

  1. 잘못된 것은 없습니다. 브레드 보드의 신호 무결성이 좋지 않기 때문입니다. 잘 설계되고 분리 된 PCB에서 자동으로 사라집니다 . 브레드 보드에는 임피던스 불일치, 반사, 기생 용량, 크로스 토크, EMI / RFI와 같은 모든 종류의 신호 무결성 문제가 있습니다. 보드를 가로 지르는 긴 버스 와이어는 문제를 어느 정도 악화시킵니다.

    사실이라면 "노치"의 특성을 설명 할 수 있습니까? 이 현상은 EE에 이름이 있습니까? 나는 전에 많은 오버 슈트와 링잉을 보았지만 "노치"를 본 적이 없다. 왜 내가 일부 논리적 수준 에서만 볼 수 있습니까?

  2. 타이밍. EEPROM 출력 또는 기타 논리 회로의 "정착 시간"이 짧아 버스에 이상한 영향을 줄 수 있습니까?

  3. 팬 아웃. 아마도 긴 버스는 많은 전류를 소비하고 높은 커패시턴스를 가지고 있기 때문에 EEPROM 출력이 버스를 높이는 데 어려움을 겪고 있었습니까? 그리고 아마도 오실로스코프 프로브가 버스를로드하고 있습니까?

  4. 데이터 경합을 유발하는 버스 경합 또는 기타 논리 오류. 아마 내가 생각 하는가? 버스의 다른 구성 요소가 격리되어있어 단일 AT28C256 EEPROM 또는 래치가 어떻게이 작업을 수행 할 수 있는지 알지 못했습니다. 그러나 배선 오류 또는 브레드 보드의 숨겨진 내부 단락으로 인해 여전히 가능하다고 생각합니다.

업데이트 : 이미 보드의 커패시터를 처음부터 분리하고 필터링했습니다. 보드에서 0.1 uF 디커플링 커패시터를 꽤 많이 사용했으며 CPU에는 디커플링을 위해 0.1 uF 및 0.01 uF 커패시터가 모두 있습니다. 현재 시스템에는 8 개의 보드가 있으며 각 브레드 보드에는 로컬 필터링을 위해 두 레일에 두 개의 4.7 uF 알루미늄 커패시터가 있습니다. 또한, devboard에서 얻은 전력에는 200 uF 탄탈륨 커패시터가 있습니다. 그러나 내가 말했듯이 문제는 여기에 있습니다.

그래도 적절한 지 확실하지 않습니다. 특히 브레드 보드의 칩 근처에 104 개의 커패시터를 배치하는 것이 어렵다는 점을 고려하십시오. 더 많은 것을 추가하면 문제를 해결할 수 있습니까?

내가 관심이있는 것은 문제의 근본 원인입니다. 단순히 브레드 보드의 부적절한 디커플링 또는 신호 무결성의 문제로 확인 될 수 있다면 문제 해결을 위해 시간을 낭비하거나 문제를 걱정할 수 있습니다. 최종 디자인은 PCB입니다. 그러나 나는 확실하지 않다.

감사.

Update2 : 내 생각에 Bruce Abbott의 의견이 정답을 받았고 문제가 해결되었다고 생각합니다! 내일까지는 테스트 할 수 없지만 범인은 Z80의 DRAM 리프레시입니다. 자세한 내용은 내 답변을 참조하십시오. 현재 새로운 답변이 필요하지 않으며 솔루션을 확인하면 본인의 답변을 수락합니다. 그래도 문제가 해결되지 않으면 질문을 업데이트하겠습니다. 모두의 도움에 감사드립니다.


방금 편집 내용을 보았습니다. 사용중인 부품의 사양 및 디자인 노트 / 응용 프로그램을 보면 이상적이라고 생각합니다. 장치의 커플 링 커패시터 이외의 구성 요소가 누락되었을 수 있습니다. 모든 사양을 준수 했습니까? 좋은 근본 원인 운동입니다. 현재 회로도 없이는 질문에 대답 할 수 없습니다.
KingDuken

6
EMI / 전력 문제를 클록 / 논리적 문제와 분리하는 데 도움이되는 한 가지 방법은 0.5MHz 또는 1MHz와 같이 느린 주파수 클록을 사용하는 것입니다. 이상한 글리치가 250ns에서 1us로 바뀌면 프로세서 작동을 기반으로합니다. 약 250ns 정도 남아 있으면 EMI / 전원 문제 일 수 있습니다. 버스에 풀업 / 다운 저항이 있습니까 (이는 3 상태 응답 일 수 있습니까)?
W5VO

1
프로세서 데이터 시트에서 데이터 버스의 풀업 또는 풀다운 저항을 권장 / 제안하는지 확인하십시오. 이는 3 상태 작동으로 인한 고장 가능성을 줄이는 데 도움이됩니다. 프로그램에 다른 "inc a"명령어를 추가 한 경우 어떤 명령어가 글리치를 유발했는지 알아낼 수 있습니다.
W5VO

1
"... 양방향 데이터 버스 버퍼로서 RD 및 NOT RD에 의해 제어되는 반대 방향의 다른 두 개의 74HCT573" -아마도? 제어 신호를 보여주는 회로도를 제공하십시오.
Bruce Abbott

5
M1 (opcode fetch)주기가 끝날 때마다 새로 고침으로 인한 것으로 의심됩니다. CS 및 데이터 버스 버퍼 인 에이블먼트를 생성하는 방법을 정확히 알아야합니다.
Bruce Abbott

답변:


13

모두의 도움에 감사드립니다. Bruce Abbott이 정답을 주었다고 생각합니다.내 침대에서 게시하고 있는데 내일까지는 아직 테스트 할 수 없지만아래의 분석은 그가 "새로 고침"이라는 단어를 언급했을 때 확인되었으며, 문제가 이미 해결 된 것 같습니다. Z80이 메모리를 새로 고치는 방법을 알고 있었지만 이전에는 완전히 잊어 버렸습니다.

... 양방향 데이터 버스 버퍼로 RD 및 NOT RD에 의해 제어되는 반대 방향의 다른 두 개의 74HCT573. "-아마도? 제어 신호를 보여주는 회로도를 제공하십시오.

M1 (opcode fetch)주기가 끝날 때마다 새로 고침으로 인한 것으로 의심됩니다. CS 및 데이터 버스 버퍼 인 에이블먼트를 생성하는 방법을 정확히 알아야합니다.

-브루스 애보트

양방향 데이터 버퍼에 의해 제어되고 RD그리고 NOT RD만약이 RD경우 액티브 로우이며, 버퍼를 구동하여 CPU의 데이터는 그렇지 RD높고, 이는 기록 / 출력 버퍼 드라이브 버스를 의미한다.

양방향 데이터 버퍼

그럼에도 불구하고 Z80은 opcode 페치 직후 DRAM 새로 고침을위한 메모리 판독을 수행합니다. 이번에 RD이고 HIGH그것의 방향을 반전하고, 버스를 구동하기 위해 버퍼를 일으키는 읽기 연산의에도 불구하고 그 결과는 버스 경합한다. 따라서 DRAM 갱신주기 동안 이상한 "노치"가 항상 나타나지만 일반적인 메모리 읽기 / 쓰기 또는 I / O는 아닙니다. 이것은 왜 "노치"가 항상 나타나지만 모든 논리적 인 것이 아닌 일부에만 나타납니다.

Z80 opcode 페치 타이밍 다이어그램

또한 SRAM을 새로 고칠 필요가 없으므로 시스템에서 DRAM 새로 고침이 완전히 쓸모가 없으며이 버스 경합으로 인해 명령이나 데이터가 손상되지 않아 시스템이 완전히 작동하는 것처럼 보입니다.

솔루션 : 구현 (RD AND REFRESH)(NOT (RD AND REFRESH). 다음 개정판에서는 BUSACKDMA 작동 중에도 데이터 버퍼가 버스를 구동하지 않는지 테스트 해야합니다.

업데이트 : 문제와 해결책을 확인할 수 있습니다. 새로운 회로도에 표시된대로 문제를 사용 WR하고 NOT WR대신 수정했습니다.(이 작업을 수행하지 마십시오! 이것은 잘못된 것 입니다. 업데이트 2 참조 ).

새로운 회로도 (잘못된)

이제 파형이 정상적으로 보입니다!

문제를 나타내는 새로운 파형이 수정되었습니다.

업데이트 2 : 위의 회로도도 깨졌습니다.이 답변을 읽는 사람이라면 사용하지 마십시오! 버스를 가정 할 경우 WRRD신호가 나쁜 정도가 비활성 상태이며, 버스를 가정 것은 RDWR비활성 상태도 나쁘다. 초기 테스트에 이전 프로그램을 사용했기 때문에 시스템이 작동하는 것처럼 보이지만 중요한 문제를 놓쳤습니다.

메모리 쓰기주기 동안 Z80 CPU 는 활성 상태가 되기 전에 버스 구동 하기 시작합니다 WR.이 시점에서 데이터 버퍼는 여전히 CPU쪽으로 데이터를 구동하고 있습니다.

Z80 메모리 읽기 / 쓰기 타이밍 다이어그램

Bruce Abbott는 정확합니다. 단일 버퍼를 뒤집는 대신 항상 각 버퍼를 제어하기 위해 독립적으로 사용 RD하고 WR신호를 보내는 것이 좋습니다 .

예를 들어

새로운 회로도 (고정되었지만 DMA는 처리되지 않았으므로 처리해야합니다.

이제 완벽하게 작동합니다.

마지막으로, 위의 회로도는 단순화 BUSACK된 것이며, DMA 동작 중에도 데이터 버퍼가 버스를 구동하지 않는지 테스트해야한다 .


6
상위 버퍼를 활성화하기 위해 반전 된 / RD 대신 / WR을 사용하는 것이 좋습니다. 이렇게하면 실제 읽기 또는 쓰기가 진행되고 있지 않으면 데이터 버스가 비활성화됩니다.
Bruce Abbott

8

모든 IC에 적절한 디커플링 커패시터가 있는지 확인하십시오. 각 IC의 전원에서 접지까지 100nF 세라믹은 리드를 가능한 짧게 유지하고 낮은 ESR 전해액은 전원 레일을 가로 질러 브레드 보드에서 100uF라고 말합니다.


디지털 IC에 대한 많은 불안정성을위한 솔루션 인 것 같습니다 :)
KingDuken

4
@KingDuken 절대적으로 저를위한 뜨거운 주제가 있습니다. 저의 친구가 한 번 빠져서 한 번 해고되었습니다. 현금 취급 기계에서 많은 불안정을 일으켰습니다.
RoyC

2
디커플링이 중요하지만 모든 것에 대한 답은 아닙니다. 파형과는 관련이 없을 것입니다.
pericynthion 2016 년

4

두 가지 가능성이 있습니다.

1) D0이 3 분할 됨

D0을 구동 한 것은 3 상태 (고 임피던스 모드)가되고 D0 네트 어딘가의 풀다운은 전압을 느리게합니다 (풀다운 저항과 IC 및 트레이스의 기생 커패시턴스에 의해 정의 된 시간 상수). 파형의 지수 특성은 선이 강한 것이 아니라 상대적으로 약한 풀다운에 의해 구동되고 있음을 나타냅니다.

다른 풀다운 저항을 라인에 추가하고 지수 파형이 0으로 빠르게되는지 확인하십시오.

이것이 반드시 문제가되는 것은 아니며 버스가 이것과 완벽하게 작동 할 수 있습니다.

2) 경합

당신의 가설 # 4. D0이 다른 로직 라인으로 단락 될 수도 있습니다. 이 경우에는 현재와 같이 비교적 긴 시간 상수를 갖는 지수 파형이 표시되지 않으므로 가능성이 낮습니다. 회로에서 다른 네트를 프로브하여 다른 동일한 파형을 검색하여 단락이 있음을 나타냅니다.

행운을 빕니다!

PS-이것은 신호 무결성 문제가 아닙니다. 펄스 폭이 너무 길어서

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