NAND의 주소 체계와 레지스터 크기

yohda의 이미지

제가 NAND를 공부하면서 궁금한 점이 있는데요,

왜 NAND는 바이트 단위 혹은 워드 단위의 데이터 버스를 지원하지 않는걸까요??

RAM or ROM처럼 다이렉트로 XIP(Excute In Place)로 실행되면 안되는 건가요??

그리고 또 궁금한 점이 있는데요,

NAND가 페이지 단위의 읽기/쓰기를 지원하고 CPU는 레지스터에 저장된 32비트 혹은 64비트 명령어 or 데이터를 처리한다고 알고 있습니다.

결국 데이터 과정은 반드시 레지스터로 데이터가 와야 되는거 같은데, 레지스터를 낸드의 페이지 단위로 크게 해서 낸드에서 받은 데이터를 레지스터로 한번에 옮겨서 처리할 수는 없을까요?

즉, 레지스터의 크기를 낸드의 페이지 단위만큼 크게 할 수는 없을까요??!! 이게 제 두번째 질문입니다!

레지스터는 비싸기 때문에 용량을 늘릴기 힘들다는 답변을 제외한 다른 답변을 듣고 싶습니다!!

bushi의 이미지

말씀하신 것들은 보조 기억 장치에 요구되는 덕목이 아닙니다.
보조 기억 장치는 대용량이면서 저렴해야 팔립니다.
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 자체가 매우 저렴해서 자기들의 부가가치 창출이 쉽기 때문이겠죠.

두번째 질문은 무엇을 말씀하시는 것인지 도통 이해가 안됩니다.

yohda의 이미지

먼저 답변에 감사드립니다!!

그렇다면 bushi님께서 말씀하시는 부분은 NAND가 XIP가 가능해지면, 비용적인 문제 때문에 상용화가 힘들다는 말씀이신가요??!!

bushi의 이미지

nand flash 가 시장에 등장한 시점에서 그 때까지 상종가를 치던 (XIP 자체엔 아무 제한이 없는) nor flash 가 망했죠.

익명 사용자의 이미지

Quote:
그리고 또 궁금한 점이 있는데요,

NAND가 페이지 단위의 읽기/쓰기를 지원하고 CPU는 레지스터에 저장된 32비트 혹은 64비트 명령어 or 데이터를 처리한다고 알고 있습니다.

결국 데이터 과정은 반드시 레지스터로 데이터가 와야 되는거 같은데, 레지스터를 낸드의 페이지 단위로 크게 해서 낸드에서 받은 데이터를 레지스터로 한번에 옮겨서 처리할 수는 없을까요?

즉, 레지스터의 크기를 낸드의 페이지 단위만큼 크게 할 수는 없을까요??!! 이게 제 두번째 질문입니다!

레지스터는 비싸기 때문에 용량을 늘릴기 힘들다는 답변을 제외한 다른 답변을 듣고 싶습니다!!

냄비에서 요리를 한 뒤 그릇에 담아서 숟가락으로 떠먹는 거 너무 번거롭지 않아요? 숟가락을 냄비만하게 만들어서 한번에 먹으면 좋을 텐데, 안 그래요?

물론 냄비만한 숟가락은 비싸겠죠. 하지만 어쨌든 만들 수 있잖아요? 왜 그렇게 안 하는 걸까요?

제 질문에 직접 답해보세요. 그러면 제가 귀하의 답변에서 단어만 적절히 바꿔서 왜 CPU 레지스터가 낸드 페이지 크기가 될 수 없는지 설명해 보겠습니다.

yohda의 이미지

먼저 답변에 감사드립니다!!

저의 개인적인 추측으로 말씀드리면, 첫 번째로 CPU자체의 크기가 커질 수 있기 때문에 그런거 같습니다.

많이 저장할 수 있다는 것은 그만큼 크기도 커질 수 있다는 것이기 때문에 CPU의 크기가 커지는 것은 임베디드 같은 소형화가 중점적인곳에는 레지스터를 크게 할 수없다고 생각합니다.

그리고 두 번째로, 버스의 크기 문제인데요,

사실 두 번째 추측은 첫 번째에서 파생된다고 생각합니다.

일반적으로 현재 쓰는 64비트 환경에서 버스에 64개의 주소선이 존재하는데,

페이지 단위가 되버리면, 예를 들어, 페이지가 2KB이면 2048인데

주소선의 개수를 저렇게 하면 소형화하는 정말 힘들것이라 개인적으로 생각됩니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.