NAND의 주소 체계와 레지스터 크기
글쓴이: yohda / 작성시간: 화, 2019/04/02 - 6:03오후
제가 NAND를 공부하면서 궁금한 점이 있는데요,
왜 NAND는 바이트 단위 혹은 워드 단위의 데이터 버스를 지원하지 않는걸까요??
RAM or ROM처럼 다이렉트로 XIP(Excute In Place)로 실행되면 안되는 건가요??
그리고 또 궁금한 점이 있는데요,
NAND가 페이지 단위의 읽기/쓰기를 지원하고 CPU는 레지스터에 저장된 32비트 혹은 64비트 명령어 or 데이터를 처리한다고 알고 있습니다.
결국 데이터 과정은 반드시 레지스터로 데이터가 와야 되는거 같은데, 레지스터를 낸드의 페이지 단위로 크게 해서 낸드에서 받은 데이터를 레지스터로 한번에 옮겨서 처리할 수는 없을까요?
즉, 레지스터의 크기를 낸드의 페이지 단위만큼 크게 할 수는 없을까요??!! 이게 제 두번째 질문입니다!
레지스터는 비싸기 때문에 용량을 늘릴기 힘들다는 답변을 제외한 다른 답변을 듣고 싶습니다!!
Forums:
말씀하신 것들은 보조 기억 장치에 요구되는 덕목이
말씀하신 것들은 보조 기억 장치에 요구되는 덕목이 아닙니다.
보조 기억 장치는 대용량이면서 저렴해야 팔립니다.
hdd 랑 똑같이, 공장 출하시부터 bad block 이 존재할 수 있는게 당연하게 여겨질 수준으로 대용량이면서 저렴하면 날개돋힌 듯 팔리겠죠.
제 기억에, 상업적으로는 SMC(SmartMedia Card) 에서 출발했습니다.
알고계신 그 nand flash 칩의 핀들을 그대로 연결해서, 마치 지금의 SD 카드 마냥 얇고 넙적한 플라스틱 패키지 껍데기만 뒤집어 씌운겁니다.
애초에 nandflash 칩 자체가 SoC 의 GPIO 에 연결해서 그냥 쓸 정도로 간결하고 저렴한 인터페이스를 내세우니 딱히 뭐 더 붙일 것도 없죠.
이때, 다른 한편에선 DOC(DiskOnChip) 혹은 DOM(DiskOnModule)이라 불리는 제품이 잠깐 흥했었습니다.
내부 storage 는 nandflash 였지만, 제한적인 XIP 가 가능해서 부팅용 저장 장치로 사용할 정도가 되는 제품군도 있었습니다.
물론 비싸서 널리 안 팔렸죠.
아직도 있나 모르겠는데... 리눅스 커널의 inftl 이 이놈을 위한 open source 구현물입니다.
제품 제조사에선 독점 s/w 를 만들어서 NFTL 까지 다 뭉뚱그린 vfat 호환 파일시스템을 제공했지만,
이것도 유료 제품인데다 무엇보다도 소스 비공개라서 부트 로더 수준에서 뭔가 읽고 쓰려는 작업을 할 때 상당히 곤란했고.
아무튼 이렇게 저렇게 nandflash 가 급속히 떠오르면서 SoC 에 nandflash controller 가 내장되는 게 대세가 됐고,
곧이어 nandflash 로 부터 부팅을 할 수 있는 기능까지 SoC 에 추가되기 시작했습니다 (사실 SoC 내부에 비밀스런 bootROM 과 자그마한 on-chip-sram 이 내장되는 것이지만).
극초기의 nandflash controller 는 I/O 정도나 어느 정도 도와주는 수준이었지만,
h/w ECC 기능도 있는 놈이 나오는 것은 순식간 이었고,
요즘엔 DMA 가 당연시 되면서 더 정밀한 자체 ECC 를 지원하게 되고...
아무튼, nandflash 그 자체의 기능이 모든 면에서 모두를 만족시키는게 가능할 리 없으므로,
nandflash 를 사용한 SD card, USB stick, SSD 등 처럼 다양한 것들이 등장했고,
이런 다양한 것들이 나오는 가장 결정적 이유는 nandflash 자체가 매우 저렴해서 자기들의 부가가치 창출이 쉽기 때문이겠죠.
두번째 질문은 무엇을 말씀하시는 것인지 도통 이해가 안됩니다.
답변에 감사합니다!
먼저 답변에 감사드립니다!!
그렇다면 bushi님께서 말씀하시는 부분은 NAND가 XIP가 가능해지면, 비용적인 문제 때문에 상용화가 힘들다는 말씀이신가요??!!
nand flash 가 시장에 등장한 시점에서 그
nand flash 가 시장에 등장한 시점에서 그 때까지 상종가를 치던 (XIP 자체엔 아무 제한이 없는) nor flash 가 망했죠.
Quote:그리고 또 궁금한 점이 있는데요,
냄비에서 요리를 한 뒤 그릇에 담아서 숟가락으로 떠먹는 거 너무 번거롭지 않아요? 숟가락을 냄비만하게 만들어서 한번에 먹으면 좋을 텐데, 안 그래요?
물론 냄비만한 숟가락은 비싸겠죠. 하지만 어쨌든 만들 수 있잖아요? 왜 그렇게 안 하는 걸까요?
제 질문에 직접 답해보세요. 그러면 제가 귀하의 답변에서 단어만 적절히 바꿔서 왜 CPU 레지스터가 낸드 페이지 크기가 될 수 없는지 설명해 보겠습니다.
답변에 감사합니다!
먼저 답변에 감사드립니다!!
저의 개인적인 추측으로 말씀드리면, 첫 번째로 CPU자체의 크기가 커질 수 있기 때문에 그런거 같습니다.
많이 저장할 수 있다는 것은 그만큼 크기도 커질 수 있다는 것이기 때문에 CPU의 크기가 커지는 것은 임베디드 같은 소형화가 중점적인곳에는 레지스터를 크게 할 수없다고 생각합니다.
그리고 두 번째로, 버스의 크기 문제인데요,
사실 두 번째 추측은 첫 번째에서 파생된다고 생각합니다.
일반적으로 현재 쓰는 64비트 환경에서 버스에 64개의 주소선이 존재하는데,
페이지 단위가 되버리면, 예를 들어, 페이지가 2KB이면 2048인데
주소선의 개수를 저렇게 하면 소형화하는 정말 힘들것이라 개인적으로 생각됩니다.
댓글 달기