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
38
メモリと遊んでみた
Dramの挙動が知りたくて、実際にDramチップを入手し、Arduinoを使いながら挙動を調べてみました。
akira345
August 02, 2015
Tweet
Share
More Decks by akira345
See All by akira345
脱・同期処理!マイクロサービスにおける負荷分散の勘所
akira345
0
79
AWSデプロイツール紹介
akira345
0
46
40歳でやったこと
akira345
0
21
回路を読むために必要なこと
akira345
0
11
おれのAWSがこんなに辛い訳がない!!
akira345
0
18
Dockerを触ってみよう
akira345
0
79
アラフォー世代が基板を作ってみた(公開用)
akira345
0
140
ESP-WROOM-02でプチIoT
akira345
0
100
トランジスタの働き(超入門編)
akira345
0
13
Other Decks in Technology
See All in Technology
プロファイルとAIエージェントによる効率的なデバッグ / Effective debugging with profiler and AI assistant
ymotongpoo
1
810
Observability — Extending Into Incident Response
nari_ex
2
740
AIの個性を理解し、指揮する
shoota
3
620
データエンジニアとして生存するために 〜界隈を盛り上げる「お祭り」が必要な理由〜 / data_summit_findy_Session_1
sansan_randd
1
920
re:Invent 2025の見どころと便利アイテムをご紹介 / Highlights and Useful Items for re:Invent 2025
yuj1osm
0
650
Amazon Q Developer CLIをClaude Codeから使うためのベストプラクティスを考えてみた
dar_kuma_san
0
320
東京大学「Agile-X」のFPGA AIデザインハッカソンを制したソニーのAI最適化
sony
0
190
AIエージェントを導入する [ 社内ナレッジ活用編 ] / Implement AI agents
glidenote
1
150
NOT A HOTEL SOFTWARE DECK (2025/11/06)
notahotel
0
2.5k
Mackerelにおけるインシデント対応とポストモーテム - 現場での工夫と学び
taxin
0
110
戦えるAIエージェントの作り方
iwiwi
21
10k
AI連携の新常識! 話題のMCPをはじめて学ぶ!
makoakiba
0
180
Featured
See All Featured
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Practical Orchestrator
shlominoach
190
11k
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
Into the Great Unknown - MozCon
thekraken
40
2.1k
The Cost Of JavaScript in 2023
addyosmani
55
9.1k
How to Think Like a Performance Engineer
csswizardry
27
2.2k
Large-scale JavaScript Application Architecture
addyosmani
514
110k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Scaling GitHub
holman
463
140k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
2.9k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
127
54k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.7k
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)
まとめ • 文献や調査しても納得できないことは、自分の手と頭を使わないと納得で きない。 • 疑問を持ち続けて、調べるのは大事。 • 未知の分野では試行錯誤しかなく、今までの経験値、思考がものを言う。 • 結局、やって見ないと分からないという事。
時間が有ればデモ