FC2カウンター FPGAの部屋 キャラクタROMをAXI4 Lite Slave として実装する8(SDK2)
fc2ブログ

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

FPGAの部屋

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

キャラクタROMをAXI4 Lite Slave として実装する8(SDK2)

キャラクタROMをAXI4 Lite Slave として実装する7(SDK1)”の続き。

前回はXMDを使用してキャラクタROMのドットデータをReadしたが、今度はソフトウェアを作成して表示した。前回確認できたがaxi_uartlite がstdin, stdoutに割り振られていたので、TeraTerm を起動してXPAR_CHAR_ROM_AXI_LITE_0_S_AXI_RNG00_BASEADDRからのアドレスのオフセット値を入力して、そのアドレスのキャラクタROMのドットデータを表示した。
TeraTermの設定メニューの端末の設定は以前と同様とした。下の図に示す。
AXI_P_Monitor_19_120605.png

TeraTermを立ちあげてシリアルに接続して前回同様にアドレスオフセット0x600, 0x604をReadした。
AXI_Lite_Slave_44_120619.png

XMDでReadした時と同様に、0x18, 0x24をRead出来た。

下にソフトウェアを示す。

/* * char_rom_axi_lite_test.c * *  Created on: 2012/06/17 *      Author: Masaaki */

#include "xbasic_types.h"
#include "xio.h"
#include "mb_interface.h"
#include "xparameters.h"
#include "stdio.h"

int main()
{
    unsigned char c;
    unsigned char hex_char[20];
    unsigned int addr, cr_data;
    int j;

    for(;;){
        xil_printf("Please input Character ROM Address ");
        for(j=0; j<19; j++){
            c = getc(stdin);
            if (c == '\r'){
                hex_char[j] = c;
                break;
            }else
                hex_char[j] = c; // 文字列に代入
        }
        addr = 0;
        for(j=0; j<19; j+=2){ // 文字の解析
            if (hex_char[j] == '\r')
                break;
            else{
                addr = addr << 4// 4ビット左シフト
                if (hex_char[j]>=0x30 && hex_char[j]<=0x39// 数字
                    addr += hex_char[j] - 0x30;
                else if (hex_char[j]>=0x41 && hex_char[j]<=0x46// A ~ F
                    addr += hex_char[j] - 0x41 + 10;
                else if (hex_char[j]>=0x61 && hex_char[j]<=0x66// a ~ f
                    addr += hex_char[j] - 0x61 + 10;
            }
        }
        xil_printf("\n");
        cr_data = *(volatile unsigned int *)(XPAR_CHAR_ROM_AXI_LITE_0_S_AXI_RNG00_BASEADDR+addr);
        xil_printf("Character ROM Data = %x\n", cr_data);
    }
}


なぜ文字の解析で j を +2 するかというと、getc()で1文字読んだ後に必ず 0 が入っているからだ。6、0と入力すると、'6', 0, '0', 0 と文字列に入っている。
  1. 2012年06月19日 04:50 |
  2. AX4 Lite Slave IPの作製
  3. | トラックバック:0
  4. | コメント:2

コメント

comment
getc()の戻り値がintなので unsigned charに直接代入は拙いと思います。
0が余分に入るのはそのためだと思います。
  1. 2012/06/21(木) 08:16:57 |
  2. URL |
  3. #-
  4. [ 編集 ]

こんにちは。
int に直しても同じでした。(0が入っています)
そもそも、Cでは自動的にint にキャストされて演算された後で、unsigned char に代入されるのではないでしょうか?
  1. 2012/06/21(木) 19:14:19 |
  2. URL |
  3. marsee #f1oWVgn2
  4. [ 編集 ]

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
https://marsee101.blog.fc2.com/tb.php/2176-c7cb52bf
この記事にトラックバックする(FC2ブログユーザー)