FC2カウンター FPGAの部屋 2012年02月06日
FC2ブログ

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

FPGAの部屋

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

MicroBlaze MCSをISE WebPACKから使用する3

今回は前回までと異なり、ISE12.4にインストールされてるmb-gcc を使ってMicroBlaze のソフトウェアをコンパイルする。cygwinからmb-gccを起動してMicroBlaze MCSを動作することができた。
ISEのgccソフトウェアをコピーして使っている。”カスタム設計の MicroBlaze”さんか”ISE WebPACKでも使用できるMicroBlazeコアとGCCコンパイラ”辺りを参照。

ポイントは mb-gcc のオプションに -mlittle-endian を付けることだった。ビッグエンディアンだと思っていたのだが、リトルエンディアンだったのかな?AXI4はリトルエンディアンと教えてもらった。Spartan-6なので、AXI4バスでリトルエンディアンなのか?
LogiCORE IP MicroBlaze Micro Controller System (v1.0) の21ページ Table 6: Internal MicroBlaze Parameters Settings によると、C_ENDIANNESSパラメータはデフォルト1で、Select endianness (1 = Little endian)だそうだ。ビッグエンディアンにも出来るということだろう。C_I_AXIはデフォルト0でPLBバスのようだ)

・Cygwinでの実行例。Makefile は、”ひでみのアイデア帳”のMakefileを参考にさせていただいた。
MB_MCS_79_120206.png

(追加)Makefile を貼っておきます。

# PROJECT: Build New MicroBlaze
# ----------------------------------------------------------------------
#
# Copyright (C) 2011-2012 H.Ishihara, http://www.aquaxis.com/
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
# For further information please contact.
#   http://www.aquaxis.com/
#   info(at)aquaxis.com or hidemi(at)sweetcafe.jp

TARGET=Atlys_LED_test.elf
SRCDIR=./
OBJDIR=./

SRCS=    $(SRCDIR)Atlys_LED_test.c
OBJS=    $(OBJDIR)Atlys_LED_test.o

CC=mb-gcc
CFLAGS=-O2 -mlittle-endian -Wl,-Map=Atlys_LED_test.map
LDFLAGS1=-Wl,-s

$(TARGET) : $(OBJS)
    $(CC) $(CFLAGS) $(LDFLAGS1) $(OBJS) -o $(OBJDIR)$(TARGET) $(LDFLAGS2)

$(OBJDIR)Atlys_LED_test.o: $(SRCDIR)Atlys_LED_test.c $(INCS)
    $(CC) $(CFLAGS) -c $< -o $@

clean:
    rm -f Atlys_LED_test.elf $(OBJDIR)*.o Atlys_LED_test.map


・Atlys_LED_test.elf が出来ていた。
MB_MCS_80_120206.png

・Atlys_LED_test.elf を MB_MCS_led_test2フォルダの下にコピーして、Project Navigator のTCL ConsoleタブのCommand> で”microblaze_mcs_data2mem Atlys_LED_Test.elf”を実行する。
MB_MCS_82_120206.png

・これでISimを起動して、シミュレーションを行うとLED_out[7:0] の途中で 55 に変化したので、動作している。前回のシミュレーション結果と異なるのは、FITのカウント値に100000000をセットしてあるからだ。
MB_MCS_81_120206.png

・ビットファイルをAtlysにダウンロードしたら、LED+1が表示された。。。成功。。。

(2012/02/07:追加)
PITのPIT_InterruptとPIT_Toggleも動いていました。カウンタの値は読めないようです。
MB_MCS_83_120207.png

この時のソフトウェアのAltys_LED_Test.cを下に貼っておきます。

// 
// Atlys_LED_test.c
//
// AltysボードのLEDを1秒ごとに+1するソフトウェア
// 初めは割り込みを使わないで実行する
//

#define    GPO1_ADDR            0x80000010
#define GPI1_ADDR            0x80000020
#define PIT1_PRELOAD_ADDR    0x80000040
#define PIT1_COUNTER_ADDR    0x80000044
#define PIT1_CONTROL_ADDR    0x80000048

#define COUNT_VALUE            100

int main()
{
    unsigned int b_GPI1 = 0;
    unsigned int c_GPI1 = 0;
    unsigned int led = 0x55;
    
    *(volatile unsigned int *)(PIT1_PRELOAD_ADDR) = COUNT_VALUE; // 100MHzで1秒
    *(volatile unsigned int *)(PIT1_CONTROL_ADDR) = 0x3// Timer Enable, Auto Reload
    
    *(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;
    }
}


  1. 2012年02月06日 21:06 |
  2. MicroBlaze MCS
  3. | トラックバック:0
  4. | コメント:0

Altium Designer でIntegrated Library を作る2(PCBライブラリ編1)

Altium Designer でIntegrated Library を作る1(回路図ライブラリ編)”の続き。

前回は回路図ライブラリを作成したので、今回はPCBのライブラリを作成する。1つはウィザードを使わないで、自分でパッドを貼ってDIP16パッケージを作成する。もう1つはウィザードを使用して、SO16 (SOP16?) パッケージを作成する。
それでは、DIP16パッケージから作成する。

・ProjectsタブのIntegrated_Libraryプロジェクトで右クリックして、右クリックメニューから、新規ドキュメントをプロジェクトに追加 -> PCBライブラリを選択する。
Altium_Desiger2_43_120205.png

・PcbLib1.PcbLib ができた。ここで、Gキーを押して、グリッドを20milに設定する。

Qキーを押して、単位をmm に変更した。

・配置メニューからパッドを選択する。原点に配置する。

・クリックしないまま、TABキーを押して、デジグネータを1に設定する。
Altium_Desiger2_44_120205.png

・OKボタンをクリックする。Top Layerにパッドを配置した。次々をパッドを配置する。パッドの番号は自動的にインクリメントされる。16個のパッドを置いたところ。
Altium_Desiger2_45_120205.png

*今おいたパッドはスルーホールだが、パッドのダイアログで、配置レイヤをTop Layer にすると表面実装用のパッドになる。サイズと形状の形状をRoundからRectangular とかに変更して、パッドのサイズを変えれば、表面実装用のパッドになる。
Altium_Desiger2_46_120205.png

・Top Overlayタブを選択して、シルクを描く。配置メニューからラインを選択して、箱を書いた。
Altium_Desiger2_47_120206.png

・配置メニューから円を選んで、1番ピンマークを書く。Gキーでグリットを一時的に10mil に変更して、円を描き、またグリットを20mil に戻した。
Altium_Desiger2_48_120206.png

・コンポーネントの名前をDIP16marseeに変更する。左のコンポーネントのPCBCOMPONENT_1をダブルクリックする。

・PCBライブラリ コンポーネント・ダイアログが開く。名称にDIP16marsee、部品高に5.3mm、内容説明を入力する。
Altium_Desiger2_49_120206.png

・DIP16MARSEEのPCBシンボルができた。セーブしておく。
Altium_Desiger2_50_120206.png

Altium Designer でIntegrated Library を作る3(PCBライブラリ編2)”に続く。

  1. 2012年02月06日 04:48 |
  2. Altium Designer
  3. | トラックバック:0
  4. | コメント:0