FC2カウンター FPGAの部屋 2017年07月04日
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

SDK における inbyte() の使用

Vivado のSDK でベアメタルのアプリケーションソフトを作っているときに、キー入力を使用するが、その際にfgetc() , scanf() などを使用してキー入力すると、リターンキーが押されるまで処理が戻ってこなかったりする。それだと都合が悪い場合は、fflush(stdin) を使用すると思う。

Xilinx のSDKでは inbyte() という、1バイトのキー入力ルーチンがある。ブロックされて、1文字入力するまで戻ってこないが、リターンキーを待ってはいないので、一文字入力すると関数コールから帰ってくる。(ベアメタルのみでLinuxでは使えません。Linuxでのノンブロッキングのキー入力については、「Linux の C 言語でノンブロッキングキー入力をする」を参照してください)

    while(1){
        print("********************** LED4 TEST Start ***********************\n\r");
        print("TeraTerm: Please Set Local Echo Mode.\n\r");
        print("Press '1' to show all registers\n\r");
        print("Press '2' to set LED4 Enable or Disable(Toggle, Command Register)\n\r");
        print("Press '3' to set LED Counter Load Register (4bits, Please input hexadecimal)\n\r");
        print("Press '4' to set LED Interval Register (32bits, Please input decimal)\n\r");
        print("Press '5' to exit\n\r");
        print("Selection : ");
        inbyte_in = inbyte();
        print(" \r\n");
        print(" \r\n");

        switch(inbyte_in) {
            case '1' : // Show all registers
                val = (int)Xil_In32((u32)XPAR_LED4IP_0_S_AXI_BASEADDR);
                printf("Command Register is %x\r\n", val);
                val = (int)Xil_In32((u32)(XPAR_LED4IP_0_S_AXI_BASEADDR+4));
                printf("LED Counter Load Register is %x\r\n", val);
                val = (int)Xil_In32((u32)(XPAR_LED4IP_0_S_AXI_BASEADDR+8));
                printf("LED Monitor Register is %x\r\n", val);
                val = (int)Xil_In32((u32)(XPAR_LED4IP_0_S_AXI_BASEADDR+0xc));
                printf("LED Interval Register is %d (decimal)\r\n", val);
                break;
            case '2' : // Set LED4 Enable or Disable(Toggle, Command Register)


メニューを表示して、inbyte() でキー入力を待つ。1文字の数字を押してすぐに、その処理ルーチンに飛ぶようになっている。数字を入力して、リターンキーを押さなくて済むので便利だ。
  1. 2017年07月04日 05:15 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

手書き数字認識用畳み込みニューラルネットワーク回路の製作5(SDK)

手書き数字認識用畳み込みニューラルネットワーク回路の製作4(Vivadoプロジェクト)”の続き。

前回は、手書き数字認識用四角枠表示回路(IP)と、手書き数字を認識する畳み込みニューラルネットワークIP を使用してカメラで撮影した画像の内の四角枠の領域の手書き数字を認識するPYNQボード用のVivado 2017.2プロジェクトを作成した。今回は、SDKを使用してカメラ画像を表示してみよう。

Vivado プロジェクトのインプリメントが成功したので、ハードウェアをエクスポートして、SDK を立ち上げた。

FASTX コーナー検出の時に使用していた cam_disp_axis.c はそのまま使用できるので、cam_disp_axis アプリケーション・プロジェクトを作成して、cam_disp_axis.c をソースコードとして、src フォルダにコピーした。
hand_draw_num_66_170702.png

SDK のXilinx Tools メニューから、Program FPGAを選択して、Zynq をコンフィギュレーションした。
cam_disp_axis.elf を起動したらカメラ画像が表示された。
hand_draw_num_67_170704.jpg

次回は、アプリケーションソフトを作成して、四角枠を表示して、その枠内の手書き数字の値をLED に表示してみたい。
  1. 2017年07月04日 05:03 |
  2. DNN
  3. | トラックバック:0
  4. | コメント:0