石黒/Docs/パルテノン関連
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[石黒/Docs]]
*Wiki [#we5f6e0f]
http://parthenon.nshimizu.com/lecture/index.php
*環境設定の方法 [#u6d04ba9]
[[石黒/日誌/2013-03-29]]
LiveCygwinを使うのだ
* Wikiを参考にFPGAにプログラムを書き込んでみる [#t52d39d0]
普通にWS等からコピーしてきた場合、~/DE2_115と~/FPGA2013/DE2_115という二か所に同じディレクトリがあるかもね。''今回は~/FPGA2013/DE2_115と~/FPGA2013/snx2013''をつかう。'''~/DE2_115/に間違って行かないこと!'''
+FPGAボード(''DE2-115'')に電源とパソコンをつなぐ。このときUSBはボード上で"BLASTER"につなぐ。
+~/FPGA2013/snx2013に入って
% make snxc2/snxc snxasm2/snxasm
+ ~/FPGA2013/DE2_115/rtlに入って
% make
% make download
+ ~/FPGA2013/DE2_115/programsに入って
% make download
+ 同じディレクトリにある、実行してみたい演習ファイルを指定して書き込んでみる
(01swToLedR.scを実行してみたかったら)
% make 01swToLedR.write
** ドライバが入らない(Win7) [#f0638de6]
+スタート->コンピュータの上で右クリック、プロパティを選ぶ
+コントロールパネルのウィンドウが出るので左のほうのデバイスマネージャをクリック
+USB-Blasterに△が出てると思うので、右クリックしてドライバーソフトウェアの更新 を選ぶ
+コンピュータを参照してドライバーソフトウェアを検索 をクリック
+C:\altera\12.0\quartus\drivers\usb-blaster を参照すればインストールできる
** make downloadでエラーが出る [#ee098ff6]
% make download
quartus_pgm -c "USB-Blaster [USB 1-1.4]" -m JTAG -o "p;synth/DE2_115.sof"
Error (213013): Programming hardware cable not detected
make: *** [config-n] Error 3
*** Makefile修正 [#h2346f93]
DE2_115/rtl/Makefileを以下のように修正
- CABLE = "USB-Blaster [USB 1-1.4]"
+ CABLE = "USB-Blaster"
** JTAG関連のエラーが出る [#jdf1b27f]
ボードが間違ってる。DE2-115を使わないとだめ。青い箱のDE2は古い。
** なんかうまくいかない [#ee58148d]
春休みのパルテノン講習会で生成したバイナリやらasmが残っているのでは?学内WS環境でmakeしたものはLiveCygwin上では動かない。それぞれのディレクトリに移った時点で
% make clean
をしてからmakeをやりなおすこと。
* 進め方 [#l371418e]
+lecture/soc.pdf が説明書。p.10以降の資料集からが本編。どんな入力装置、出力装置があって、それぞれを操作するにはどのようなコードを書けばよいのか?
+memory mapped I/Oを理解しよう。宮崎先生の授業の第1回スライド p.27, 28でやったやつだ http://web-int.u-aizu.ac.jp/~miyazaki/comparch-13/lecture/comparch-1-intro.pdf
+DE2_115/programs/以下に*.scがたくさんある。それぞれ基本的な機能のチュートリアルになっているのでpdfと合わせて理解する。
+機能を組み合わせたプログラムを考案してみる。先のチュートリアルのコードの改造から始めるとやりやすい。
**mem[]を操作するのが目的 [#k4ffe5e4]
mem[]配列に入出力デバイスが1:1で紐付けされている。
mem[0xA000]= [(なし), (なし), ..., (なし), (3番目のキー), (2), (1), (0)]
mem[0xA001]= [(15番目のスイッチ), (14), ... (0)]
...
という感じで、1ビットごとに意味がある。そこの位置のビットの0,1を読み書きして操作する。だから直接10進数の今までのプログラミングの要領でmem[LED] + iとかやるようなことは無い。+とか*よりもビット演算(&, |, <<, >>)が多い。
**ビットで考える [#f480bb85]
mem[]の値は各ビットがそれぞれ1:1でデバイスに繋がっている。10進数での値にあまり意味は無い。
***読むとき [#c1cac87b]
0xなんとか という16進数表記になっているのを、瞬時に01のビット並びに変換してどれがHigh, Lowなのかイメージして読む。
***書くとき [#ndbcd46c]
10進数の即値で代入したり加算したりはしない。0xなんとかの形で|をしたり、>>,<<でビットシフトしたりして各桁のHigh, Lowを変える。
**&, |の意味 [#w1b3b480]
AND, ORは論理式では対称な関係で使っていたが、SNXCの中では使われる場面が違う。
- &は値をマスクして、一部分だけの情報を取り出すために使う(mem[KEY]&0x8は左から4つ目のキーに着目するという意味)
- |は値に別な値を加算して、桁を埋めるときに使う
**いろいろできないことが多い [#g55c3a35]
SNXCはCの"サブセット"なのでいろんな構文や機能が''無い''。
SNX2/snxc2/SPEC.txt
に、使える構文が簡潔に書かれている。
***コメント [#ra517ac1]
使えない。結構つらいので、makeを改変して、コンパイル前に除去するようにしてみた。
program/Makefileの44行目を変更:
- $(SNXC) < $< | tee $@
+ sed -e 's|//.*||' $< | $(SNXC) | tee $@
こうすれば、C++とかJavaの、//コメント みたいな書き方ができるようになる。/* 〜 */はまだ無理。
&color(#f00){追記: バージョンが上がって、現在//コメントは普通に使えるかもしれない!};
***変数 [#q43f38b8]
:aからzまでの1文字|''必ずグローバル変数になってしまうので注意!''ループ用にiをいろんなところで使うというようなことができない
:普通のやつ|宣言不要。いきなり使える。逆にint valueとかするとエラーになる
:配列|配列の場合は int array[3]とかしなければならない
:mem[]配列|これだけスペシャルな変数として、最初からある
もう少しルールがあるけれど、SPEC.txtに書いてるので省略。
***制御文 [#p4e55166]
- else ifは無い(elseはある)。ついでに&&, ||は使わないので if() if()と続けて書いたりしてやる
- do whileは無い(whileはある)
- switchは無い
&color(#f00){追記: バージョンが上がって、現在&&, ||は使えるかもしれない(未確認)};
***演算子 [#oe099cac]
- /, %が無い。なので自分でdiv(), mod()とかを作ってやる
- +=とかが無いのでa = a + 2;とかする。(++, --はある)
**くどいようだが [#ta8e8ccd]
動かないときはmake cleanしてから。
あと、リセットボタン(一番右下)も試そう。
このふたつで結構はまった。
終了行:
[[石黒/Docs]]
*Wiki [#we5f6e0f]
http://parthenon.nshimizu.com/lecture/index.php
*環境設定の方法 [#u6d04ba9]
[[石黒/日誌/2013-03-29]]
LiveCygwinを使うのだ
* Wikiを参考にFPGAにプログラムを書き込んでみる [#t52d39d0]
普通にWS等からコピーしてきた場合、~/DE2_115と~/FPGA2013/DE2_115という二か所に同じディレクトリがあるかもね。''今回は~/FPGA2013/DE2_115と~/FPGA2013/snx2013''をつかう。'''~/DE2_115/に間違って行かないこと!'''
+FPGAボード(''DE2-115'')に電源とパソコンをつなぐ。このときUSBはボード上で"BLASTER"につなぐ。
+~/FPGA2013/snx2013に入って
% make snxc2/snxc snxasm2/snxasm
+ ~/FPGA2013/DE2_115/rtlに入って
% make
% make download
+ ~/FPGA2013/DE2_115/programsに入って
% make download
+ 同じディレクトリにある、実行してみたい演習ファイルを指定して書き込んでみる
(01swToLedR.scを実行してみたかったら)
% make 01swToLedR.write
** ドライバが入らない(Win7) [#f0638de6]
+スタート->コンピュータの上で右クリック、プロパティを選ぶ
+コントロールパネルのウィンドウが出るので左のほうのデバイスマネージャをクリック
+USB-Blasterに△が出てると思うので、右クリックしてドライバーソフトウェアの更新 を選ぶ
+コンピュータを参照してドライバーソフトウェアを検索 をクリック
+C:\altera\12.0\quartus\drivers\usb-blaster を参照すればインストールできる
** make downloadでエラーが出る [#ee098ff6]
% make download
quartus_pgm -c "USB-Blaster [USB 1-1.4]" -m JTAG -o "p;synth/DE2_115.sof"
Error (213013): Programming hardware cable not detected
make: *** [config-n] Error 3
*** Makefile修正 [#h2346f93]
DE2_115/rtl/Makefileを以下のように修正
- CABLE = "USB-Blaster [USB 1-1.4]"
+ CABLE = "USB-Blaster"
** JTAG関連のエラーが出る [#jdf1b27f]
ボードが間違ってる。DE2-115を使わないとだめ。青い箱のDE2は古い。
** なんかうまくいかない [#ee58148d]
春休みのパルテノン講習会で生成したバイナリやらasmが残っているのでは?学内WS環境でmakeしたものはLiveCygwin上では動かない。それぞれのディレクトリに移った時点で
% make clean
をしてからmakeをやりなおすこと。
* 進め方 [#l371418e]
+lecture/soc.pdf が説明書。p.10以降の資料集からが本編。どんな入力装置、出力装置があって、それぞれを操作するにはどのようなコードを書けばよいのか?
+memory mapped I/Oを理解しよう。宮崎先生の授業の第1回スライド p.27, 28でやったやつだ http://web-int.u-aizu.ac.jp/~miyazaki/comparch-13/lecture/comparch-1-intro.pdf
+DE2_115/programs/以下に*.scがたくさんある。それぞれ基本的な機能のチュートリアルになっているのでpdfと合わせて理解する。
+機能を組み合わせたプログラムを考案してみる。先のチュートリアルのコードの改造から始めるとやりやすい。
**mem[]を操作するのが目的 [#k4ffe5e4]
mem[]配列に入出力デバイスが1:1で紐付けされている。
mem[0xA000]= [(なし), (なし), ..., (なし), (3番目のキー), (2), (1), (0)]
mem[0xA001]= [(15番目のスイッチ), (14), ... (0)]
...
という感じで、1ビットごとに意味がある。そこの位置のビットの0,1を読み書きして操作する。だから直接10進数の今までのプログラミングの要領でmem[LED] + iとかやるようなことは無い。+とか*よりもビット演算(&, |, <<, >>)が多い。
**ビットで考える [#f480bb85]
mem[]の値は各ビットがそれぞれ1:1でデバイスに繋がっている。10進数での値にあまり意味は無い。
***読むとき [#c1cac87b]
0xなんとか という16進数表記になっているのを、瞬時に01のビット並びに変換してどれがHigh, Lowなのかイメージして読む。
***書くとき [#ndbcd46c]
10進数の即値で代入したり加算したりはしない。0xなんとかの形で|をしたり、>>,<<でビットシフトしたりして各桁のHigh, Lowを変える。
**&, |の意味 [#w1b3b480]
AND, ORは論理式では対称な関係で使っていたが、SNXCの中では使われる場面が違う。
- &は値をマスクして、一部分だけの情報を取り出すために使う(mem[KEY]&0x8は左から4つ目のキーに着目するという意味)
- |は値に別な値を加算して、桁を埋めるときに使う
**いろいろできないことが多い [#g55c3a35]
SNXCはCの"サブセット"なのでいろんな構文や機能が''無い''。
SNX2/snxc2/SPEC.txt
に、使える構文が簡潔に書かれている。
***コメント [#ra517ac1]
使えない。結構つらいので、makeを改変して、コンパイル前に除去するようにしてみた。
program/Makefileの44行目を変更:
- $(SNXC) < $< | tee $@
+ sed -e 's|//.*||' $< | $(SNXC) | tee $@
こうすれば、C++とかJavaの、//コメント みたいな書き方ができるようになる。/* 〜 */はまだ無理。
&color(#f00){追記: バージョンが上がって、現在//コメントは普通に使えるかもしれない!};
***変数 [#q43f38b8]
:aからzまでの1文字|''必ずグローバル変数になってしまうので注意!''ループ用にiをいろんなところで使うというようなことができない
:普通のやつ|宣言不要。いきなり使える。逆にint valueとかするとエラーになる
:配列|配列の場合は int array[3]とかしなければならない
:mem[]配列|これだけスペシャルな変数として、最初からある
もう少しルールがあるけれど、SPEC.txtに書いてるので省略。
***制御文 [#p4e55166]
- else ifは無い(elseはある)。ついでに&&, ||は使わないので if() if()と続けて書いたりしてやる
- do whileは無い(whileはある)
- switchは無い
&color(#f00){追記: バージョンが上がって、現在&&, ||は使えるかもしれない(未確認)};
***演算子 [#oe099cac]
- /, %が無い。なので自分でdiv(), mod()とかを作ってやる
- +=とかが無いのでa = a + 2;とかする。(++, --はある)
**くどいようだが [#ta8e8ccd]
動かないときはmake cleanしてから。
あと、リセットボタン(一番右下)も試そう。
このふたつで結構はまった。
ページ名: