【FPGA/HDL】Microblaze MCSを使ってLチカ日記2日目:Microblaze MCS のIP Coreの組み込み

投稿日:2019年2月8日
最終更新日:2019年2月9日

今回やること

前回はVivadoを最新版にして力尽きたので、今回からやっと本題のMicroblaze MCSに入っていく。まずは既存のLチカRTLに、Microblaze MCSのIP Coreを組み込んでいく。

 

環境

Windows10
Vivado HLx 2018.3: WebPACK
ZYBO

 

Microblaze MCSを新規作成

まずは、IP CatalogからMicroblaze MCSを作成する。下の画像のように、Microblazeで検索すれば出てくるので、ダブルクリックする。

Microblaze MCSの設定画面が出てくるので、周波数をZYBOの125MHzに設定。

追記:画像では「Debug」の「Enable Debug Support」がNONEになっていますが、ここをDEBUG&UARTに変更しておいてください。変更しないと、最後にJTAGでソフトウェアを書きこむときにErrorが出ます。これについては日記の最後にデバッグ編として紹介する予定なので、あえてこのままにしています。

次にGPOタブを選択する。Zynqに接続されたLEDは4つあるので、それぞれ別個に制御できるようにbit幅を4に設定する。

これで設定は完了。思ったより簡単だった。後はデフォルトのままOKを押していき、Generateを押せばIPが生成される。生成されたIPはmodule化されて、IPファイルの中のverilogファイルでmoduleのinput/outpuポートを確認することができる。

 

Microblaze MCSをトップモジュールに組み込む

以前verilogで作成したトップモジュールMzybo_top.vの中のLEDを点滅させたコードをコメントアウトし、以下のように変更した。MicroblazeからのGPOをLEDに接続し、制御できるようにしている。

module zybo_top(
input CLK,
input RST,
output reg [3:0] LED
);
/*
parameter LED_COUNTER_1SEC = 26'd124999999;
reg [25:0] counter_1sec;
always @ (posedge CLK) begin
if (RST)
counter_1sec <= 26'd0;
else if (counter_1sec == LED_COUNTER_1SEC)
counter_1sec <= 26'd0;
else
counter_1sec <= counter_1sec + 26'd1;
end
always @ (posedge CLK) begin
if (RST)
LED <= 4'b0000;
else if (counter_1sec == LED_COUNTER_1SEC)
LED <= ~LED;
end
*/
wire [3:0] w_gpio_out;
// Microblaze MCS
microblaze_mcs_0 mcs0 (
.Clk (CLK),
.Reset (RST),
.GPIO1_tri_o (w_gpio_out)
);
// Control LED
always @ (posedge CLK) begin
if (RST)
LED <= 4'b0000;
else
LED <= w_gpio_out;
end
endmodule
view raw zybo_top.v hosted with ❤ by GitHub

この状態でSynthesis、Implementation、Generate Bitstreamを実行すれば、ハードウェアは完成。思ったより簡単だった。次回はMicroblaze MCSのGPIOを制御するファームウェアを作成して、LEDを光らせる。

 

参考文献

公式のドキュメントが以下にあるので、参照しながら進めてます。
https://japan.xilinx.com/support/documentation-navigation/design-hubs/dh0020-microblaze-hub.html

 

ZYBOで遊ぼう日記まとめ

ZYBO関係の記事は、大まかな内容ごとに以下にまとめています。
https://wakky.tech/zybo/

 

0

投稿者: wakky

映画と旅行が大好きなエンジニア。お酒、ゲーム、読書も好き。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください