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
37
メモリと遊んでみた
Dramの挙動が知りたくて、実際にDramチップを入手し、Arduinoを使いながら挙動を調べてみました。
akira345
August 02, 2015
Tweet
Share
More Decks by akira345
See All by akira345
脱・同期処理!マイクロサービスにおける負荷分散の勘所
akira345
0
70
AWSデプロイツール紹介
akira345
0
43
40歳でやったこと
akira345
0
16
回路を読むために必要なこと
akira345
0
7
おれのAWSがこんなに辛い訳がない!!
akira345
0
15
Dockerを触ってみよう
akira345
0
76
アラフォー世代が基板を作ってみた(公開用)
akira345
0
130
ESP-WROOM-02でプチIoT
akira345
0
98
トランジスタの働き(超入門編)
akira345
0
9
Other Decks in Technology
See All in Technology
RSCの時代にReactとフレームワークの境界を探る
uhyo
11
3.5k
slog.Handlerのよくある実装ミス
sakiengineer
4
480
メルカリIBISの紹介
0gm
0
430
AIエージェント開発用SDKとローカルLLMをLINE Botと組み合わせてみた / LINEを使ったLT大会 #14
you
PRO
0
130
未経験者・初心者に贈る!40分でわかるAndroidアプリ開発の今と大事なポイント
operando
6
750
[ JAWS-UG 東京 CommunityBuilders Night #2 ]SlackとAmazon Q Developerで 運用効率化を模索する
sh_fk2
3
460
Django's GeneratedField by example - DjangoCon US 2025
pauloxnet
0
160
「どこから読む?」コードとカルチャーに最速で馴染むための実践ガイド
zozotech
PRO
0
570
スクラムガイドに載っていないスクラムのはじめかた - チームでスクラムをはじめるときに知っておきたい勘所を集めてみました! - / How to start Scrum that is not written in the Scrum Guide 2nd
takaking22
2
210
20250912_RPALT_データを集める→とっ散らかる問題_Obsidian紹介
ratsbane666
0
100
Bedrock で検索エージェントを再現しようとした話
ny7760
2
110
TS-S205_昨年対比2倍以上の機能追加を実現するデータ基盤プロジェクトでのAI活用について
kaz3284
1
230
Featured
See All Featured
Why Our Code Smells
bkeepers
PRO
339
57k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
1.1k
Building a Modern Day E-commerce SEO Strategy
aleyda
43
7.6k
Bash Introduction
62gerente
615
210k
A Modern Web Designer's Workflow
chriscoyier
696
190k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
36
2.5k
Building Better People: How to give real-time feedback that sticks.
wjessup
368
19k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.6k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.1k
Navigating Team Friction
lara
189
15k
A better future with KSS
kneath
239
17k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
131
19k
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)
まとめ • 文献や調査しても納得できないことは、自分の手と頭を使わないと納得で きない。 • 疑問を持ち続けて、調べるのは大事。 • 未知の分野では試行錯誤しかなく、今までの経験値、思考がものを言う。 • 結局、やって見ないと分からないという事。
時間が有ればデモ