#FPGAの書き込みの仕組み
Atlas-SoCではSDカードからFPGAを書くようだ。
linuxが起動する前のu-bootの起動時に書き込むとログが出ている。
SDカードのFAT16領域の
ATLAS_SOC_GHRD/output_files/ATLAS_SOC_GHRD.rbf
が読み込まれているようだ。
#GUIで作ってみる
CUIのスクリプトを実行した後に出てくる
ATLAS_SOC_GHRD.qpf
をquartusで開き、コンパイルする。
成功するとsofファイルが出てくる。
SDカードにもsofファイルが入ってるけど、sofは使われていないようだ。
ログにあるようにrbfファイルが必要。
File - Convert Programming Files
でsofファイルからrbfに変換する。
できたファイルをSDカードのFAT16領域に置くと、SDカードからの起動時に読み込まれるようになる。
でも、デフォルトで作るとこんな風にエラーが出る。
スクリプトでは作られているのでどうやって作っているか調べてみる。
mks/quartus.mkにあった。
$$(QUARTUS_RBF_$1): %.rbf: %.sof
$(ECHO) $$(QUARTUS_RBF_$1)
quartus_cpf -c -o bitstream_compression=on $$< $$@ 2>&1 | tee logs/$$(notdir $$@).log
compressonをかける必要があるようだ。
GUIのPropertiesでcompressonを有効にする。
これでLinuxが起動するようになった。
#FPGAデータを変えてみる
起動するだけでおもしろくないのでLEDが勝手にチカチカするように変更してみる。
ghrd_top.vのLEDに接続している部分の
assign fpga_led_pio = fpga_led_internal;
をコメントアウトして、以下に書き換える。
reg [31:0] led_test;
assign fpga_led_pio = led_test[31:24];
always @(posedge fpga_clk1_50)
begin
led_test <= led_test+1;
end
50MHzを分周するので1秒だと25bitぐらい必要。
今回は32bitのカウンタの上位8bitをLEDに表示するようにした。
これをコンパイルして変換したrbfファイルをSDカードに書き込み、
電源を入れ直してu-bootが起動すると勝手にLEDがピコピコするようになる。
AtlasのWebインターフェイスは動かなくなるけどね。