Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
メモリと遊んでみた
Search
akira345
August 02, 2015
Technology
1
33
メモリと遊んでみた
Dramの挙動が知りたくて、実際にDramチップを入手し、Arduinoを使いながら挙動を調べてみました。
akira345
August 02, 2015
Tweet
Share
More Decks by akira345
See All by akira345
Dockerを触ってみよう
akira345
0
45
アラフォー世代が基板を作ってみた(公開用)
akira345
0
100
ESP-WROOM-02でプチIoT
akira345
0
72
基板から回路図を起こしてみよう
akira345
0
1k
OSS翻訳プロジェクトに参加してみた
akira345
0
75
ジャンク解析入門
akira345
0
65
Lt駆動開発28 Windows版Dockerを試してみた。
akira345
0
52
Simの容量が気になって安眠できない
akira345
0
61
メモリと遊んでみた Pert2
akira345
0
52
Other Decks in Technology
See All in Technology
信頼性に挑む中で拡張できる・得られる1人のスキルセットとは?
ken5scal
2
530
TypeScriptの次なる大進化なるか!? 条件型を返り値とする関数の型推論
uhyo
2
1.7k
Terraform Stacks入門 #HashiTalks
msato
0
350
OCI 運用監視サービス 概要
oracle4engineer
PRO
0
4.8k
フルカイテン株式会社 採用資料
fullkaiten
0
40k
AGIについてChatGPTに聞いてみた
blueb
0
130
組織成長を加速させるオンボーディングの取り組み
sudoakiy
2
110
SREによる隣接領域への越境とその先の信頼性
shonansurvivors
2
520
Taming you application's environments
salaboy
0
190
第1回 国土交通省 データコンペ参加者向け勉強会③- Snowflake x estie編 -
estie
0
130
20241120_JAWS_東京_ランチタイムLT#17_AWS認定全冠の先へ
tsumita
2
250
これまでの計測・開発・デプロイ方法全部見せます! / Findy ISUCON 2024-11-14
tohutohu
3
370
Featured
See All Featured
Art, The Web, and Tiny UX
lynnandtonic
297
20k
Designing Experiences People Love
moore
138
23k
We Have a Design System, Now What?
morganepeng
50
7.2k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
44
2.2k
Faster Mobile Websites
deanohume
305
30k
Six Lessons from altMBA
skipperchong
27
3.5k
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
Done Done
chrislema
181
16k
Side Projects
sachag
452
42k
Reflections from 52 weeks, 52 projects
jeffersonlam
346
20k
5 minutes of I Can Smell Your CMS
philhawksworth
202
19k
A Philosophy of Restraint
colly
203
16k
Transcript
メモリと遊んでみた LT駆動開発 17 - 夏と花火と私の AKIRA345
概要 • メモリ(DRAM)の挙動が知りたくて、DRAM単品を入手し、 花火大会の当日1日篭って実験してみました。 • 1日実験した程度なのと、技術的詳細は省きます。 • 普段意識しない物理的なメモリの挙動について調べてみました。
メモリとは? • コンピュータが処理すべきデジタルデータをある期間だけ保持するのに使 う、部品、装置、電子媒体の総称。 • コンピュータの5大装置、「入力装置」「制御装置」「記憶装置」「演算装置」 「出力装置」のうちの「記憶装置」に相当するもの。(wikipediaより)
メモリの種類 今回はこれ。
DRAM? • コンピュータなどに使用される半導体メモリの1種である。 記憶素子であるRAMの1種で、リフレッシュ(記憶保持動作)を必要とするダ イナミックメモリによるRAMである。
原理 • 多分情報処理の授業でこんなのを習ったのではないでしょうか?? コンデンサとも呼ばれるキャパシタに電荷を蓄え、 この電荷の有無によって1ビットの情報を記憶する。 電荷は漏洩しやがて失われるために1秒間に数 回程、列単位でデータを読み出して列単位で再び 記録し直すリフレッシュが絶えず必要となる。 この煩雑な動作はたとえ外部から読み出しの必 要が無くとも記憶保持の間は常に必要である。
DRAMの原理を習ってからずーーーっと疑問だった • コンデンサの電荷が消失する前にリチャージが必要なのは何となくイメー ジがつくが、本当に読み出しに関係なく必要なのか?? • たとえば1MB(8Mbit)だけでも8,388,608bit • これだけのビット数を1秒間に数回も走査するの? • これ、下手すると走査だけで何も出来ないんじゃね?
ここで疑問が
ぼちぼち調べて数十年・・・ • DRAMにはリフレッシュが必要。扱いが面倒。という情報以外ろくに無い。 • Z80はリフレッシュ回路が内蔵されて楽だったとかはあるが、 リフレッシュ動作自体を説明した資料がない。 • どうやら、専用のICやらで制御していたようで、動作そのものはあまり気に しなかった??
結局調べることに。 • 実験用DRAMチップを入手 • 実験するにはなるべくシンプルなほうが良いので、小容量の単品チップを 探すも、もうそんな時代じゃないので割りと苦労・・・・ すると思ったが、(今は無き)某無線屋で大量在庫を発見(笑) がひとつ300円と地味に高かったので容量違いを2つばかし入手。
まずは使い方を調査 • ネットでググればデータシートが出てくるが・・・
行アドレス指定 列アドレス指定 何これ?? 出力データ?? Word?? 1Bit??
ぶっちゃけ良く分からん(汗 • アドレスバス、データバスは無いの? • アドレスを指定したらその中にあるデータが出てくるんじゃないの?? • なぜ1bit単位なの? • Word=Bit?? •
縦と横のアドレス数の最大値は? • 書き込み、読み込みだけでもいくつも種類がある。 • そもそも見方が分からん(汗
使い方調査・・・ • 中々しっくりくる解説が無い。 • 今さら聞けないメモリーの基礎知識 FP~BEDO DRAM編 http://ascii.jp/elem/000/000/597/597885/index-2.html • ①CPUがアドレス線にRowアドレスを渡す。
• ②CPUはRASを「Low」にして、Rowアドレスを渡したことをDRAMに通知する。 • ③DRAMはRASがLowになったことを検出。Row Address Bufferがアドレス線からアドレスを取得し、 RowアドレスとみなしてRow Decoderに渡す。 • ④CPUがアドレス線にColumnアドレスを渡す。 • ⑤CPUはCASをLowにして、Columnアドレスを渡したことをDRAMに通知する。 • ⑥DRAMはCASがLowになったことを検出。Column Address Bufferがアドレス線からアドレスを取 得し、ColumnアドレスとみなしてColumn Decoderに渡す。 • ⑦CASをLowにしてから一定時間後に、DRAMからデータがデータ線に渡される。CPUはこれを取 得する。
ここでARDUINOの登場 • とりあえず、縦、横のアドレスとRAS、CASを操作すればデータが読み書きで きるっぽいので、Arduinoでプログラムを組みながら試行錯誤。
・・・・・・・・
動かない! • デジタル機器は動く、動かないがハッキリしているので、 正解を当てないと動かない。 • アナログみたいに惜しかったらノイズが出たり何か光ったりなんてことがない。 • 一般家庭に測定器やデバックツールは無いので、 ひたすら推論に基づきトライ。 •
ヒントが無いので辛い・・・・
辛い試行錯誤の結果・・・ • 怪しいながらも一応読み書きすることに成功!! https://github.com/akira345/arduino_dram_test
分かったこと • $0000-$0123のようなアドレスではなく、縦横の物理的なメモリセル指定でアクセスする。 • データの入出力は1bit単位。 昔のSIMMはこれを8個並列に繋いで、縦横のアドレスを共通にして8bitにしていたようです。 • 読み書きにかかわらずリフレッシュが必要ではなく、 読み書きしていないbitはリフレッシュが必 要。
• ずっと読み書きしていると、それ自体がリフレッシュ動作となる。 • 範囲を絞れば、リフレッシュ間隔は長くても割りといける。ただし、リフレッシュせず、特定bitだけ 読み書きしていると、ほかのbitのデータが失われる • bitのセルは正方形。なのでアドレスの最大値は全bit数/2 • リフレッシュ動作はやはり重い処理だし、アクセス手順が煩雑なのもあって、徐々に改善され、 今のDDRに行き着く。 • メモリの電源切っても数秒はデータが飛ばない(!) • 昔のマイコンは制御用の専用ICを使っていたらしい。(ソフトウエアでの制御は重いので)
困ったこと • 1bit単位でしかアクセスできないので、データが化けたのか、元からその値 なのか分からない。(1 or 0 なので) • アクセスする際、遅い分は待ってくれるだろうと思ったけど、よく見ると最大 時間が規定されていて、
そもそもアクセス時間を計る手段が分からなかっ たので、単に動作が遅かった。というのに気づくのに随分嵌った。 • 初期のDRAMは古過ぎてアクセス方法やリフレッシュがすごく面倒だったの で断念。
DRAMのアクセスって結局こういうこと。 1 2 3 4 5 6 7 8 9
10 2 3 4 5 6 7 8 9 10 縦5、横5のセルにある データを読み書き
DRAMのリフレッシュ 10 10 10 10 10 10 10 10 10
10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 10 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 読み書きしている箇所は チャージされている。 (正確には読み込みだけ すればOK) リフレッシュは全アドレスに対し読み書きしてリチャージする。 (参考:http://news.mynavi.jp/news/2002/09/05/10.html)
まとめ • 文献や調査しても納得できないことは、自分の手と頭を使わないと納得で きない。 • 疑問を持ち続けて、調べるのは大事。 • 未知の分野では試行錯誤しかなく、今までの経験値、思考がものを言う。 • 結局、やって見ないと分からないという事。
時間が有ればデモ