月別アーカイブ: 2016年7月

観測者から見た運動

今回はうって変わって物理のお話し。

昔、このあたりについて理解が不足していたせいでよくわからなかった覚えがある。そこでまとめておこうと思った。

我々が物理、特に力学を扱う場合に重要なことは観測者がどのような運動をしているかだ。世の中の大学や高専、高校などでの授業ではどのような扱いを受けているのかよくわからないが、少なからず観測者を意識せずに物理をやることはできない。

観測者の問題が如実に表れてくるのはおそらく相対論にかかわる話を扱うときだろう。しかしここではニュートン力学に絞る。ニュートンの運動方程式とはよく知られているように次式を指す。

$$F=m\frac{d^2x}{dt^2}=m\frac{dv}{dt}$$

この中で$$x$$だとか$$v$$などというのは、観測者に影響される量だ。観測者が座標系を決めているため$$x$$の大きさには違いが出てくるはずだし、$$v$$も観測者の運動の状態で変わるだろう。しかし、観測者が等速直線運動をしているときに限れば、この方程式は不変である。すなわち観測者が一定の速度$$u$$で運動していれば

$$F=m\frac{d^2(x-ut-x’)}{dt^2}=m\frac{d(v-u)}{dt}=m\frac{dv}{dt}$$

である。ただしここで$$x’$$は観測者の初期位置だと思ってほしい。観測者はそこを最初の原点だとみなして観測している。するとこれより、ニュートン力学では等速直線運動による運動の見え方の変化は,運動の本質には無関係であることがわかる.すなわち,今対象としている系全体の速度が定数分変化したところで,結局は運動の状態は変わらないということだ.別の言い方をするとニュートン力学ではその分の自由度*1があるともいえる.これはあたかもエネルギーに定数分の任意性が有ることに似ている.実際これらは無関係ではない.エネルギーの定数分の任意性(これは基準点をどこに選ぶかという話)は,観測者の原点と速度の任意性と直結している*2.

ニュートン力学における等速直線運動にまつわる自由度というのは,ニュートンの運動方程式の形が変化しないというところにその理由がある.逆に言えば運動方程式の形が変化してしまうような場合は,無視することはできない.例えば観測者が円運動を行った場合,円運動では必ず加速度が観測者にかかってしまう.加速度の場合,運動方程式における二次微分というフィルターを通り抜けて,方程式中に最終的に残ってしまうので,等速直線運動の時のような自由度がないことになる.

ニュートン力学において,速度や位置のようなものが方程式に現れてきた時には,それらの変数自身が持つ自由度のせいで,その値自体に重要な意味があることは少ない*3.例えば速度が入ってくる有名なものといえば,運動量保存則が有るだろう.あまり難しいことを考えてもしょうがないので,質点系で考える.今考えている系の中に$$N$$個の質点があり,これらはそれぞれ質量$$m_i$$,速度$$v_i$$を持って運動しているとする.ここに外力が働かなければ

$$\Sigma^{N}_{k=1} m_k v_k(t)=C$$

という関係が成り立つ.ここで変数$$C$$は定数である.この式は一見形式だっていてわかりづらいし,それにそれぞれの速度$$v_i$$を定数分だけ変化させた場合,右辺の$$C$$が変化してしまうことは明らかだ.すると,先程述べた定数分だけの自由度がないように見える.しかし,それはこの式に対する理解が不足しているためにそう見えるだけである.この式の両辺をすべての質点の質量の和で割ることで

$$\frac{\Sigma^{N}_{k=1} m_k v_k(t)}{\Sigma^{N}_{k=1} m_k}=\frac{C}{\Sigma^{N}_{k=1} m_k}$$

ここで,左辺の式を眺めると,これは重心の速度$$V$$と等しいことがわかるので

$$\frac{\Sigma^{N}_{k=1} m_k v_k(t)}{\Sigma^{N}_{k=1} m_k}=\frac{C}{\Sigma^{N}_{k=1} m_k}=V$$

が成り立つ.よって,先ほど定義した定数$$C$$は質点の質量の和を$$M$$とすると,$$MV$$に等しいことがわかる.よって定数$$C$$も,定数と言っておきながら観測者が変化すれば,それに合わせて変化する必要があるということが読み取れる.また以上から,運動量保存則とは外力が働かなければ,重心は等速直線運動をしているはずという当たり前のことを言っているに過ぎない事もわかる.

ニュートン力学では基本的に,運動量保存則以外の場合でも,速度や変位に任意性が有る.これらの任意性が損なわれる珍しい例は,観測者が加速度を受けるような運動を行っている場合くらいだ.そもそも観測者の移動速度や,その変位があくまで等速直線運動の枠を出ないのであれば,それらの情報が運動方程式の中に出て来るというのは基本的にあってはいけない.等速直線運動というのは,観測者が停止している場合も含めていることを考えれば当然だ.

大体において,運動というのは観測者がいて初めて成り立つものだということに注意しなければならない.誰かが観測して初めて速度だとか位置だとかがわかるのだ.我々は地球の上に生きているから,まるで地表に対する速度やら位置が,運動に対する尺度になるような気がしてくるわけだが,例えば真っ暗の宇宙の中に放り出されることを考えてみれば,自分がどっちの方向に進んでいるのかすら,比較物がなければわかりっこないことに気がつく.宇宙は極端な例だが,例えば目隠しされて電車に載せられた場合を考えてみると,それが進んでいるのか止まっているのかは,電車の加減速を体で感じることができるからわかるのである.揺れを感じさせない電車があるとすれば,その中で自分がある瞬間に進んでいるのか止まっているのかを確認するには,窓の外を見て景色のようすを見る以外に方法はない.それに,停止しているように見えている地表だって,実際は自転により高速に回転している.我々は周りと比較する以外には,自分が停止しているのか動いているのかわからないのである.

しかし我々の直感に近く,さらに一見正しいように見えるニュートン力学が,厳密には誤っていることを相対論や,量子力学を通してすでに知っているわけである.従って,ニュートン力学における速度の任意性が崩れ去る場合がある.それがローレンツ力だ.ローレンツ力は電磁気学における力の方程式

$$F=q(E+v\times B)$$

の第二項から来ている.これは例えば磁石をおいて,そこを横切るように電子が移動した場合などに掛かる力だが,磁石に対する相対速度を定義しても,この問題を解決することはできない.これについてあまり詳しいことを書くと相対論の話をしなければならなくなるので,今回は控えるが,その裏にある仕組みはそんなことで解決できるような簡単な話ではない.

この記事で言いたかったことは,ニュートンの運動方程式には速度と変位に任意性が有ること,またそれを意識することでニュートン力学についての理解が深まるということだ.機会があれば,回転系についても触れようかと思っている.

*1 一般に自由度とは,物体が有る制約下にあるとき,制約外にある次元の数を指す.例えば剛体の重心がある回転軸で固定されていれば,その剛体は回転に伴う1次元だけの自由度が有るという.本文中ではこの意味ではなく,物体の運動とは本質的に関係がない任意性のある量という意味で自由度を用いている.従ってここでは自由度と任意性は同等の意味であると受け取ってもらって構わない.

*2 わかりづらいような気がしたので補足する.この話の流れでは一見,等速直線運動している観測者が,突然今までとは異なる方向と速度で,等速直線運動をしなおす場合を説明しているようにも見える.ここで言う,等速直線運動をしている観測者に運動の状態が寄らないというのは,複数の等速直線運動をしている観測者がいた時,どの観測者から見ても運動の本質が変わらないということを言っているのであって,観測者の状態は変わってはいけない.そこだけ注意.当然,観測者の等速直線運動の状態が変わったら,力がかかっているように見えるので,ここでの話はなりたたない.

*3 この表現は誤解を与えそうなので補足しておく.ニュートンの運動方程式では微分が入っているので,速度や変位の変化には意味がある.ここで言いたいのは,値の大きさそのものに深い意味はないということだ.それに2つの物体間での差などを論じる際には,観測者とは無縁なので,その場合では値の大きさに意味が出て来ることに注意.

内容についてどう思いますか?
  • いいね (1)
  • だめ (0)

FPGAでCPUを実装して、テトリスを動かした

先に断っておくが、以前のブログは残してあるというか放置してある。単純に新しいサーバを借りたので、以前のブログから移ったので放置状態になっているだけだ。おそらく更新することはないので、向こうは気にしなくて構わない。

また、今回の記事では自作CPUを作成したことについて話すつもりだが、私は決してハードウェア設計について詳しいわけでも何でもない。むしろ今回作成したものが初めてといっていいだろう。したがってハードウェア設計に通じた人であれば、眉唾物な内容である可能性がある。よって、ここで書いている内容を絶対のものと信じず、むしろ疑ってかかってほしい。ここの内容に騙されたといわれても、私は責任をとれない。

さて、私の大学では研修Aと呼ばれる、各研究室で課題を設定される必修単位がある。私の研究室では、この研修の半分の時間を使ってCPUを作成し、もう半分は好きなものをFPGAで作るということになっている。後半の自由課題は前半で作ったCPUと関連させる必要はない。したがって比較的自由に好きなものを作れるのだが、私は前半の課題で設計したCPUを強化させることとした。

そもそも、前半で作成するCPUはとてもCPUと呼べるような代物ではない。具体的にはパタヘネに掲載されているシングルサイクルプロセッサからパイプラインまでの内容をFPGAで実装するという内容なので、ほとんどの命令はサポートしないし、ピン入出力さえ行うことができないお粗末なものである。例外もないので割り込み処理もできず、仮想メモリもサポートしないのでOSすら乗らない。しかし、最小限の骨組みだけでも作成することで、CPUの動作の基本原理を学ぼうというところにその趣旨があるのだろう。実際、パタヘネを参考にすれば、必要なデータパスはすべて掲載されているので、私がわざわざここで説明しなくても誰でも作ることができる。おそらく最大の問題はむしろFPGAのボードを手に入れるほうではないだろうか。

しかし、私はとてもじゃないがそんなのでは満足できなかった。せっかくCPUを作るなら最低限OSの動作保証をするべきだろうということで、そこからOSが動作するのに必要な機能をどんどん実装していくことにした。最終的な目標はOS動作だが、研修Aの時間で作ることができなかったため、続きは今後個人的にやっていくこととした。したがって現段階ではCPUの動作のみしか確認していない。とりあえずデモとしてテトリスを作成し、これをgccでクロスコンパイルしたものを動作させた結果の動画を掲載する。

画面のすぐ前にあるキーボードの隣にあるのがFPGA(DE0-CV)であり、これに液晶と手前のキーボードが接続されている。今回参考したアーキテクチャはパタヘネに合わせてMIPSだが、その中でも簡単なものとしてR3000プロセッサという、プレイステーションにも搭載されたものをまねて作成した。せっかく作ったのでソースコードを上げようかと思ったが、とりあえず中身があまりきれいではないので、一度全体を作り直そうかと思っているところである。でき次第アップロードしようかと思っている。

参考にした文献を一応挙げておくと、

これが和書としては詳しい。ただし古い本であるので、もしかしたら手に入れるのが難しいかもしれない。と思ったらAmazonには中古が大量にあるようだ。ちなみに私は大学の図書館で手に入れたので購入していない。

また

MIPS32™ Architecture For Programmers Volume I: Introduction to the MIPS32™Architecture

でグーグルで検索してみると、いろいろpdfが出てくるだろう。これらを参考にすればMIPSについてはずいぶんな情報を得られるはずである。もちろんパタヘネも役立つはずである。特にパタヘネの命令表は非常に見やすく便利である。

まだまだFPGAが高価なためか、ネット上にはFPGAにまつわる情報がほかの組み込み系(例えばマイコンで自作するといったような)の話題と比べると少ないように感じる。今後技術的な内容については、ソースコードを直していく際に触れていく予定なので、それがそれらに対する一助になれば幸いである(といっても私のやる気がなくなればそれで終わってしまうわけだがw)。

続き書きました.

FPGAでCPUを実装する(1)

内容についてどう思いますか?
  • いいね (7)
  • だめ (2)