FC2カウンター FPGAの部屋 MicroBlaze MCSをテストする6(FITを使用する)

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

FPGAの部屋

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

MicroBlaze MCSをテストする6(FITを使用する)

MicroBlaze MCSをテストする5(Project Navigatorでシミュレーション編)”の続き。

前回、GPOは動いているということがわかった。PITはその後のシミュレーションでも動作させることができなかった。
そこで、FITを使用することにした。今回もProject Navigator 13.4 でテストを行った。

・MicroBlaze MCSのIPをダブルクリックして、設定用のダイアログを出して、FITタブをクリックする。Use Timerをチェックして、Number of Clocks Between Strobes をシミュレーションのために100をセットする。Generate Interruptにチェックを入れた。
MB_MCS_76_120204.png

・これでもう一度、MicroBlaze MCSを生成した。結構長い時間が掛かる。30分くらいかかる感じ?

・FITが入っていたので、トップのVerilogファイル (MicroBlaze_MCS_Test.v) を書き換えた。下にソースを示す。

module MicroBlaze_MCS_Test(
    input     wire clk,
    input    wire reset,
//     input    wire UART_Rx,
//     output    wire UART_Tx,
    output    wire [7:0] LED_out
    );
    
    wire PIT1_Interrupt;
    wire PIT1_Toggle;
    wire INTC_IRQ;
     wire [7:0]    GPI1;
     wire FIT1_Interrupt;
     wire FIT1_Toggle;
    
    assign GPI1 = {6'd0, FIT1_Toggle, PIT1_Toggle};
    
    MB_MCS mcs_0 (
      .Clk(clk), // input Clk
      .Reset(reset), // input Reset
//        .UART_Rx(UART_Rx), // input UART_Rx
//        .UART_Tx(UART_Tx), // output UART_Tx
      .FIT1_Interrupt(FIT1_Interrupt), // output FIT1_Interrupt
      .FIT1_Toggle(FIT1_Toggle), // output FIT1_Toggle
      .PIT1_Enable(1'b1), // input PIT1_Enable
      .PIT1_Interrupt(PIT1_Interrupt), // output PIT1_Interrupt
      .PIT1_Toggle(PIT1_Toggle), // output PIT1_Toggle
      .GPO1(LED_out), // output [7 : 0] GPO1
        .GPI1(GPI1), // input [7 : 0] GPI1
      .INTC_IRQ(INTC_IRQ) // output INTC_IRQ
    );
endmodule


・これで、インプリメントを行った。なお、”source ipcore_dir/microblaze_mcs_setup.tcl”は、BMMファイルのマージとngdbuild "-bm" option の付加を行うようだ。今回のBMMファイルは1つだけなので、最初に一回やれば良いようだ。(コメントで教えて頂きました)ただ、MicroBlaze MCS IPを2つ入れていて、少なくともその内の1つの内蔵のRAM領域を変更した場合には(8Kバイトから16Kバイトとか)、BMMファイルを再度マージするために、もう一度、実行する必要があると思う。

#インプリメント後のFF使用数は728 out of 54,576、LUT使用数は944 out of 27,288、RAMB16BWERs使用数は4 out of 116だった。

・”microblaze_mcs_data2mem SDK/Atlys_LED_Test/Debug/Atlys_LED_Test.elf”を実行して、ソフトウェアをビットファイルやシミュレーション用の記述に入れた。

・ISimでシミュレーションを行った。その際のソフトウェアを下に示す。GPI1の2ビット目の反転を見てLED+1するソフトウェアだ。GPI1の2ビット目はFIT1_Toggle だ。

#define    GPO1_ADDR            0x80000010
#define GPI1_ADDR            0x80000020
#define COUNT_VALUE            100

int main()
{
    unsigned int b_GPI1 = 0;
    unsigned int c_GPI1 = 0;
    unsigned int led = 0x55;
    
    *(volatile unsigned int *)(GPO1_ADDR) = led;
    
    while(1){
        c_GPI1 = 0x2 & (*(volatile unsigned int *)(GPI1_ADDR));
        if (c_GPI1 != b_GPI1){
            *(volatile unsigned int *)(GPO1_ADDR) = led++;
        }
        b_GPI1 = c_GPI1;
    }
}


・ISimのシミュレーション結果を下に示す。FITは動作している。
MB_MCS_78_120205.png

・今度は実機でLEDの動作を見るために、正規の状態にMicroBlaze MCSの設定を戻した。MicroBlaze MCSのIPをダブルクリックして、設定用のダイアログを出して、FITタブをクリックする。Number of Clocks Between Strobesに100000000をセットした。
MB_MCS_77_120204.png

すると、LEDが1秒ごとに+1されて動作した。やっと動いた。。。それにしてもPITは動かないのだろうか?どなたかPITが動いた方がいらしたらお知らせ下さい。よろしくお願いします。

(2011/02/05:追記)どうやら、カウンタの値はリードできないけれど、トグル出力と割り込み出力は皆さん、出ているようです。もう一度確かめてみます。。
  1. 2012年02月05日 05:20 |
  2. MicroBlaze MCS
  3. | トラックバック:0
  4. | コメント:4

コメント

commentPIT1ですが動いています。トグル出力と割り込みを確認していました。
Counter Registerが0のままで動かないと判断されているのだと思います。
XDMでレジスタリードしたところ0しか読めないようです。
CoreGenのリードの許可のチェックを変更しましたが変化有りませんでした。
  1. 2012/02/05(日) 20:23:52 |
  2. URL |
  3. 磯村 剛 #-
  4. [ 編集 ]

そうですか。PITのトグル出力と割り込みは出てましたか?私のところはシミュレーションで、いくらやっても出ませんでした。情報有り難うございました。
  1. 2012/02/05(日) 20:54:29 |
  2. URL |
  3. marsee #f1oWVgn2
  4. [ 編集 ]

失礼しました。トグル出力にはLEDを接続していて、Preload Registerの値で点滅周期が変わり
Control Registerへの書き込みで点滅のON/OFFがコントロール出来るのでこの部分は問題無いようです。
カウントを止めれば読めるのか思い確認しましたが、相変わらず0のままでした。
XDMで確認していますが動作を見る限り書き込みは出来ていますし、
IOBusにアクセスすると追加したロジックの値が読めるので確認手段に問題は無いように思います。
実チップでトグル出力は変化しませんか?
  1. 2012/02/05(日) 22:06:54 |
  2. URL |
  3. 磯村 剛 #-
  4. [ 編集 ]

情報有難うございます。
シミュレーションではトグルしてないように見えます。実機では確認していません。いずれにせよPITはまだおかしいみたいので、アップデートがあってからもう一度確かめてみようと思います。
PITはペンディングにしようと思います。
  1. 2012/02/05(日) 22:16:51 |
  2. URL |
  3. marsee #f1oWVgn2
  4. [ 編集 ]

コメントの投稿


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

トラックバック URL
http://marsee101.blog19.fc2.com/tb.php/2056-94dffad9
この記事にトラックバックする(FC2ブログユーザー)