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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
akira345
August 02, 2015
Technology
46
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
メモリと遊んでみた
Dramの挙動が知りたくて、実際にDramチップを入手し、Arduinoを使いながら挙動を調べてみました。
akira345
August 02, 2015
More Decks by akira345
See All by akira345
回路設計のバイブコーディング
akira345
0
100
ビジネス要件から逆算するマイクロサービスアーキテクチャ選定の「思考プロセス」
akira345
0
86
インシデント対応
akira345
0
550
えれくら!〜電気電子工作系制作・交流会〜#29
akira345
0
59
脱・同期処理!マイクロサービスにおける負荷分散の勘所
akira345
0
170
AWSデプロイツール紹介
akira345
0
91
40歳でやったこと
akira345
0
71
回路を読むために必要なこと
akira345
0
59
おれのAWSがこんなに辛い訳がない!!
akira345
0
65
Other Decks in Technology
See All in Technology
Breaking the Seal: Static Deobfuscation of Compiled V8 JavaScript Bytecode Malware
hshrzd
0
860
システム思考で問題に対処する
yussak
0
340
Master Dataグループ紹介資料
sansan33
PRO
1
4.8k
小粒でもパワフルなJS Runtime Antjsについて
comamoca
0
100
まちスペース®とデジタルツインと「まちづくり」
hiro_ogi
0
130
AI-DLC実践録_フルサイクル開発への挑戦
miyuc
0
260
ソフトウェアサプライチェーンの構造的リスクとコンテナ環境の保護
kyohmizu
4
610
【GCC2026】大規模言語モデルを活用した内製検索サービスの社内展開や業務活用
bandainamcostudios
PRO
0
260
ホームラボ紹介
y_sera15
0
210
攻撃と防御で学ぶAI時代のプロダクトセキュリティ演習
recruitengineers
PRO
9
3.1k
私がブラウザを自作したくなった理由
supurazako
1
270
Genie Codeハンズオン基礎編
taka_aki
1
130
Featured
See All Featured
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
How to train your dragon (web standard)
notwaldorf
97
6.8k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
How STYLIGHT went responsive
nonsquared
100
6.2k
Un-Boring Meetings
codingconduct
0
390
Chasing Engaging Ingredients in Design
codingconduct
0
280
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
170
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
350
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
700
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
4 Signs Your Business is Dying
shpigford
187
23k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
420
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)
まとめ • 文献や調査しても納得できないことは、自分の手と頭を使わないと納得で きない。 • 疑問を持ち続けて、調べるのは大事。 • 未知の分野では試行錯誤しかなく、今までの経験値、思考がものを言う。 • 結局、やって見ないと分からないという事。
時間が有ればデモ