PL側にLEDがないので、秋月電子でLEDを購入したが、PL側にLEDがあるというtwitterのコメント見つけたので、試してみる。
Ultra96 の 回路図見てたら RADIO LED0/1 なるものを A9, B9 端子に見つけた。完全に見落としていたがPLにもLEDいたのかな? ちょっと光らせてみよう。— Ryuji Fuchikami (@Ryuz88) March 7, 2020
回路図みると、RADIO_LED0とRADIO_LED1が、LEDに接続されているように見える。
そして、それらは、BAKK26のIO_L9N_AD3N_26 A9と、IO_L9P_AD3P_26 B9に接続されている。
では、このqiitaの記事に従って、Lチカを試してみる。
https://qiita.com/iwatake2222/items/a3b935a4e4dbd41593e1
最初に、ultra96のチュートリアル01をベースに、Vivadoの設計を行う。
https://www.element14.com/community/docs/DOC-91053/l/01ultra96vivadointro2018201zip
以下は、そこからの追加分を記載する。
Diagramから、+ボタンを押して、gpioで検索
AXI GPIOをダブルクリックすると、AXI GPIOが追加される。Run Connection Automationをクリックする。
どれをAutoか?と聞かれるので、全部Autoにしておく。そしてOKを押す
なんとなく配置された
ここからが…。というか、よくわからず、進んだ。
しかし、右↑に、Run Connection Automationが、まだでてる。。。もう一度、Run Connection Automationをクリックする。HPM1_FPDの接続を聞かれる。。。とりあえずOKとする。
今回は、LEDは2個しかないので、GPIOも2端子だけ必要になる。そのため、AXI GPIOをクリックして、設定を開き、Widthを32→2に変更する。LEDの点灯なので、All Outputをチェックしちゃう。
次に、出力する端子名を調べる。Flow Navigator→RTL ANALYSIS→Open Elaborated Design→Schemticをクリックする。。
そうすると、GPIOの接続端子が、gpio_rtl_tri_oだとわかる。
端子の結果を踏まえて制約ファイルとしてテキストエディタで保存する。
以下がテキストファイルの中身です。
回路図で見たPIN番号 A9とB9をgpio_trl_tri_oに接続するとします。
あと、LEDの電圧を1.8Vにしておきました。(適当です)
———————–ここから
set_property PACKAGE_PIN A9 [get_ports {gpio_rtl_tri_o[0] }]; # “E8.CSI0_MCLK”
set_property PACKAGE_PIN B9 [get_ports {gpio_rtl_tri_o[1] }]; # “E8.CSI0_MCLK”
set_property IOSTANDARD LVCMOS18 [get_ports -of_objects [get_iobanks 26]]
ここまで————————-
でこのファイルを.xdcの拡張子として保存します。
そして、Block Design→Source→Constraints→Add Sourceを選択して、先ほどのファイルを選択します。
そして、Flow Navigatorから、Generate Bitstreamを選択して、bitstreamを作成します。
そして、File→export→Hardware、include bitstreamを選択して、exportします。
また、Block Design→Addres Editorで、GPIOのアドレスを調べておきます。
見てみると、0xa0000000に配置されていることがわかります。
次に、XSDKを起動して、ソフトウェアを作成します。ソフトウェアは、チュートリアル02をベースに実行します。
https://www.element14.com/community/docs/DOC-91052/l/02ultra96vivadohelloworld2018201zip
以下、が作成したソースコードです。0xa0000000をON・OFFしています!
————-ここから
#include “sleep.h”
int main()
{
init_platform();
uint32_t *ptr = (uint32_t*)(0xa0000000);
print(“Hello World1nr”);
xil_printf(“%xn”, *ptr);
*ptr = 0x00;
sleep(1);
*ptr = 0x03;
sleep(1);
*ptr = 0x00;
sleep(1);
*ptr = 0x03;
sleep(1);
*ptr = 0x00;
sleep(1);
*ptr = 0x03;
sleep(1);
*ptr = 0x00;
sleep(1);
*ptr = 0x03;
sleep(1);
*ptr = 0x00;
sleep(1);
*ptr = 0x03;
sleep(1);
*ptr = 0x00;
sleep(1);
*ptr = 0x03;
sleep(1);
print(“Hello World2nr”);
cleanup_platform();
return 0;
}
記念に写真を載せます!
ついたとき
消灯したとき