전원을 켤 때 SRAM이 비어 있지 않습니다. 이것이 정상입니까?


19

마침내 Z80 메모리 보드를 완성했지만 카운터가 필요에 따라 증가하지 않고 제어에서 빠르게 나선형으로 빠져 나가서 제대로 작동하지 않는 것에 실망했습니다 (일부 LED에 연결된 주소 라인으로 간단한 NOP 테스트). 그러나 나는 단락과 모든 적절한 연결을 공개하지 않기 위해 약 30 분의 연속성 테스트를 포기한 사람이 아니며 결국 SRAM 칩이 모두 0으로 저장된 상태에서 전원이 켜져 있는지 확인하려고 생각했습니다. 나는 SRAM (비 휘발성이 아닌 한, 내 특정 칩이 아닌 경우가 아니라면)이 전력 손실시 모든 내용을 잃을 것이라는 것을 잘 알고있다. 힘. 내가 사용하는 SRAM은 전원이 재설정 될 때마다 1과 0으로 무작위로 채워진 것 같습니다. 데이터를 기억하지 않습니다. 그러나 빈로드되지 않습니다. 전원을 켤 때 ROM에 작은 프로그램을 작성하여 모든 0을 RAM에로드 할 수 있기 때문에 실제로 문제가되지는 않지만 SRAM이 어떻게 작동하는지 여부를 여전히 알고 싶습니다. 감사!

편집 : ROM을 사용하여 SRAM에 0을로드 한 후 시스템이 제대로 작동했음을 언급하는 것을 잊었습니다. 그래서 이것이 실제로 문제였습니다.


7
SRAM power up을 사용하여 난수를 생성 할 수 있습니다. 이것은 무작위 시드가 하나만 필요한 경우 일반적으로 수행하는 방법입니다.
b degnan

6
@bdegnan 어쩌면. SRAM의 전원 공급 상태는 특정 부품에 대해 다소 예측 가능한 경향이 있습니다.
duskwuff

답변:


36

초기 상태를 프로그래밍하지 않은 경우 다소 임의적입니다. 이것은 다른 SRAM 구현에 따라 다를 수 있습니다. "공백"이라고도합니다. 어떤 사람들은 랜덤이 모든 0보다 "공백"이라고 생각할 수 있습니다.

SRAM 메모리는 메모리를 백투백 인버터에 저장합니다.

간단한 스램

이것은 쌍 안정 시스템을 형성합니다 (전이성이 나뉘어있는 두 개의 매우 안정적인 상태). 따라서 전원을 켤 때 백투백 인버터는 간단히 준 안정화됩니다.

이는 전압이 상승 (켜진 후)되기 때문에 백투백 인버터의 NMOS와 PMOS가 모두 동일하게 켜져 서 두 비트 노드를 공급 전압의 절반으로 유지합니다 (이것은 준 안정 상태입니다). 결국 일부 열 잡음 (또는 변형을 일으키는 모든 프로세스)은이 값을 조금씩 올리거나 내립니다. 이 시점에서 비트 노드는 쌍 안정 상태 중 하나에 스냅됩니다.

  • 예를 들어Q=Q=Vsupply2
  • 다음으로 Q의 일부 열 잡음은 전압을 까지 증가시킵니다.Vsupply2+δ
  • 이제 NMOS 공급 Q '가 조금 더 켜집니다. 그리고 PMOS 공급 Q '는 조금 더 꺼져 있습니다. 따라서 Q '는 에서 로 내려갑니다 . V s u p p l yVsupply2Vsupply2δ
  • 다음으로, FET의 구동 Q 노드의 게이트에서의 전압이 감소하기 때문에, PMOS는 약간 더 켜지고 (그리고 NMOS는 더 많이 꺼진다). 이로 인해 Q가 공급으로 더 증가합니다. 그리고 이것은 Q '를 0에 빠르게, Q를 1에 스냅합니다.

사실, "지문과 난수의 소스로서 파워 업 SRAM 상태" 라는 논문 도 있습니다.

이 논문에 포함 된 매우 유용한 도표는 다음과 같습니다. 점선은 공급 전압이 상승하는 것을 나타냅니다.

파워 업시 전이성

  • 왼쪽에는 모든 것이 동일합니다. 이 경우 온도 또는 다른 수의 요인으로 인한 임의의 변동이 비트 노드를 한 상태 또는 다른 상태로 충돌시킵니다.
  • 오른쪽에는 특정 상태에서 초기화 될 가능성이 훨씬 크도록 (의도적으로 또는 다르게) 기울어 진 비트 노드가 있습니다.

현재 사용중인 SRAM의 각 비트 노드가 제조 된 방법에 따라 위의 두 상황 중 하나 이상이 발생합니다. 두 경우 모두, 의도적으로 SRAM을 기울이지 않으면 초기 출력이 다소 무작위로 나타납니다. 왼쪽 상황에서, 각각의 후속 파워 업은 더 많은 랜덤 패턴을 생성 할 것입니다. 오른쪽 상황에서 초기 시작은 무작위로 보입니다. 그러나 전원을 추가로 공급하면 SRAM이 특정 상태를 더 많이 유지하는 경향이 있습니다.


실제로 그것이 무작위로로드되는 이유라고 생각했습니다. 회로의 일부로 NOR 래치를 사용했으며 전원을 켤 때 임의로 재설정됩니다. 감사!
KeatonB

SRAM 칩이 알려진 상태에서 작동하도록 설계 할 수 있다고 생각했습니다. 너는 할수 있니?
John Dvorak

2
@ JanDvorak : 그렇습니다. 그러나 이것이 SRAM에서 일반적으로 수행되는 것을 의미하지는 않습니다. 나는 그것이 더 많은 비용과 목적으로 생각할 것입니까? 소비자들에게 필요한 초기 상태는 거의 없습니다.
jbord39

@ jbord39 부트 로더를 메모리에 굽는 데 도움이되고 OS에서로드 할 추가 ROM 칩을 피할 수 있습니까? 비용 절감에 도움이 될까요?
John Dvorak

2
@JanDvorak : 특정 애플리케이션의 경우 비트 셀이 특정 상태에서 시작되도록 왜곡되거나 바이어스 될 수 있습니다. 그러나 각 고객마다 서로 다른 초기 상태가 필요하기 때문에 실제로 비용은 가치가 없습니다. ROM과 같은 외부 회로로 초기화하는 것이 훨씬 쉽고 비용 효율적입니다. 원하는 초기 상태 또는 다른 방식으로 레코딩 할 수 있도록 프로그래밍 가능한 회로를 구축 할 수 있다고 생각합니다. 그러나 RAM에 쓰거나 읽을 회로가 이미 명확하게 있으면 비싸게 들립니다. 따라서 원하는 상태를 작성하십시오.
jbord39

5

몇 년 동안 SRAM과 함께 일한 결과, 매번 거의 동일한 임의의 모양의 내용으로 전원이 켜지는 장치를 보았지만 임의의 내용으로 보일 것입니다. 전원 차단주기가 충분히 짧으면 (전원 공급 장치 특성 및 바이 패스 커패시터의 수 및 값에 따라) 내용이 손상 되더라도 이전에 기록 된 데이터의 큰 조각이 전원주기를 통해 SRAM에 남아있을 수 있습니다.


2

단일 비트는 6 개 이상의 트랜지스터의 회로에서 SRAM에 저장된다. SRAM에 대해 정의 된 전원 켜기 리셋 동작을 원하는 경우 각 RAM 셀에는 6 개 이상의 트랜지스터 만 필요합니다. 필요한 칩 면적은 실질적으로 더 클 것이고 SRAM 칩은 더 비쌀 것이다. 이것은 동시에 모든 비트의 병렬 전원 켜기 재설정입니다. 직렬 재설정에는 oszilator, 주소 카운터 및 전원을 켜는 동안 모든 RAM 비트 또는 바이트를 순차적으로 재설정하기에 충분한 시간이 필요합니다. 직렬 전원 켜기 재설정이 완료되기 전에 프로세서가 SRAM에 액세스하면 오류가 발생하고 데이터가 손실되거나 변경 될 수 있습니다.

여러 RAM 영역에 대한 자세한 메모리 매핑을 갖춘 마이크로 프로세서 용 프로그래밍 환경이 있습니다. 응용 프로그램의 요구에 따라 전원 켜기 재설정이 있거나없는 영역을 정의 할 수 있습니다. 동일한 SRAM 내에서 여러 다른 영역이 가능합니다. 프로그램 시작시 항상 전체 SRAM을 재설정 할 필요는 없습니다.


3
일부 트랜지스터를 다른 트랜지스터보다 약간 크게 만들면 1 대 0의 확률이 왜곡됩니다. 많은 부분에서 트랜지스터는 제조 공차 내에서 균형을 이룰 것입니다. 즉, 일부 비트는 0으로 바이어스되고 다른 비트는 1로 바이어스됩니다. 스타트 업 동작을 한 방향으로 압도적으로 편향시키기 위해서는 크기 차이가 매우 커야한다고 생각합니다. RAM 제조사는 어떤 이유가 있다면 일관되게 쉽게 일관되게 바이어스 할 수 있지만, 불균형 한 RAM은 셀을 바람직하지 않은 방향으로 전환하기 위해 추가 전류를 소비 할 것이다.
supercat
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.