FC2カウンター FPGAの部屋 PlanAheadについて

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

FPGAの部屋

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

PlanAhead14.1でChipScope Proを試してみた2(ChipScope Analyzer)

PlanAhead14.1でChipScope Proを試してみた1(ChipScope の設定)”の続き。

前回では、ChipScope の設定を行ったが、まだ続きがある。その後にインプリメントを行った。

前回は、PlanAheadに戻るとChipScope のタブが増えていたというところまでだったが、ChipScopeの設定には、どのくらいのメモリ量にするとか、クロックの立ち上がりでサンプルするか、立下りでサンプルするか?といった設定項目がある。それを設定しよう。ちなみにChipScopeのウインドウは、Toolsメニューにあるので、選択すると表示することができる。

・ChipScopeウインドウで、cs_ila_0 を選択し、下のInstance Properties よりDebug Core Optionsを選択する。メモリ量は1024で、立ち上がりエッジサンプルだった。max_sequence_levels は1でトリガ・シーケンスは1個だけだ。
PlanAhead141_145_120525.png

・次にChipScopeウインドウで、TRIG0をクリックする。Debug Port Properties よりOptions をクリックする。トリガのカウント値やトリガを掛けるタイプ、トリガユニットの数などを設定する。
PlanAhead141_146_120525.png

・これでChipScopeの設定が終了したので、インプリメントとビットストリームの生成を行った。終了後のPlanAheadの画面を下に示す。ChipScopeのネットリストを表示している。u_icon だ。
PlanAhead141_132_120524.png

・Atlysボードの電源をONする。

・左のProgram and Debug からChipScope Analyzer をクリックする。
PlanAhead141_133_120525.png

・ChipScope Analyzerが立ちあがった。左上のOpen Cable/Search JTAG Chain アイコンをクリックする。
PlanAhead141_134_120525.png

・ダイアログが出て、Spartan-6デバイスがつながっていると表示されるので、OKボタンをクリックする。
PlanAhead141_135_120525.png

・ChipScope Analyzer にSpartan-6が認識される。FLASH ROMでSpartan-6はブートしているので、ブート時のコンフィグレーションにChipScopeが入っていたようだ。それを表示している。
PlanAhead141_136_120525.png

・今回追加したChipScope回路が入ったコンフィグレーションをSpartan-6 FPGAにロードする。左上のProjectウインドウのDEV:0 MyDevice0(XC6SLX45) の右クリックメニューからConfigure... を選択する。
PlanAhead141_147_120525.png

・ダイアログが出る。大丈夫だと思うが、最初なので、念のためClean previous project setting にチェックを入れて、OKボタンをクリックする。
PlanAhead141_137_120525.png

・ビットストリームがダウンロードされた。もう一度、ChipScope Analyzer にSpartan-6が認識されたダイアログが出るので、OKボタンで終了させる。

・最初は右のウインドウが真っ白だが、左のTrigger Setup とWaveform をダブルクリックすると右のウインドウに表示される。
PlanAhead141_138_120525.png

・Trigger Setup ウインドウでawvalid が1に時にトリガが掛かるように設定する。Positionも50と設定して、トリガ位置が左はじから50クロック目に設定した。
PlanAhead141_139_120525.png

・トリガをスタートさせると、トリガが掛かってWaveウインドウにAXI4マスタのバス波形が表示された。
PlanAhead141_140_120525.png

・ついでに説明すると、AXI4バスのマスタ・デバイスがWriteトランザクションを実行した時の最初の部分が下の図になる。
PlanAhead141_141_120525.png

・AXI4バスのマスタ・デバイスがWriteトランザクションを実行した時の最後の部分が下の図になる。
PlanAhead141_142_120525.png

・ちなみに、バースト長はM系列による擬似ランダムになっているので、短いバースト長もある。
PlanAhead141_143_120525.png

・ChipScopeを削除する場合は、ChipScopeウインドウを表示して、cs_ila_0_0の右クリックメニューからDelete... を選べば削除することができた。ビットストリームからChipScopeを抜く場合はもう一度インプリメントを走らせる必要があると思う。
PlanAhead141_148_120525.png

・これでChipScopeは削除されたが、ChipScopeが入った状態でSynthesized Designを開いて、Tools メニューからSet up ChipScope... を選択した時のウィザードに、Reuse existing cores if possible があるので、これを選択すれば再利用可能な状態になるかもしれない。(未確認)
PlanAhead141_144_120525.png
  1. 2012年05月26日 05:24 |
  2. PlanAheadについて
  3. | トラックバック:0
  4. | コメント:0

PlanAhead14.1でChipScope Proを試してみた1(ChipScope の設定)

今回は、PlanAhead14.1でChipScope Proを試してみた。

マニュアルは、日本語では、”PlanAheadソフトウェア チュートリアル ChipScopeを使用したデバッグ UG677 (v13.1) 2011 年 3 月 1 日”、英語では、”PlanAhead Tutorial Debugging with ChipScope UG677 (v14.1) April 24, 2012”を参考にした。
PlanAheadのプロジェクトは、”PlanAhead14.1で、XPS入りのISE14.1のプロジェクトをインポートしてみた2(解決編)”で使用した。AXI4バス・スレーブIP、AXI4バス・マスタIPを使用したキャラクタ・ディスプレイ・コントローラの回路を使用する。

・インプリメントまで終わっていたので、Synthesis まで戻すためにOpen Synthesized Design をクリックする。
PlanAhead141_115_120524.png

・インプリメント・デザインを閉じてシンセサイズ・デザインを開くか?というダイアログが出る。
PlanAhead141_116_120524.png

・Tools メニューからSet up ChipScope... を選択する。
PlanAhead141_117_120524.png

・Set up ChipScopeダイアログが開いて、設定をはじめる。最初にImport existing ChipScope CDC file のチェックボックスがあるので、以前作成したChipScopeの設定ファイルを使う場合はこれをチェックするんだと思う。今回は新規作成なので、チェックしないままNext>ボタンをクリックした。
PlanAhead141_118_120524.png

・Add/Remove Nets... ボタンをクリックした。
PlanAhead141_119_120524.png

・フィルタに*cdctest_axi_master_0* を設定して、ネットをフィルタする。見たいネットをクリックして、矢印ボタンをクリックして右のウインドウに移した。その際にUnique Nets Only を外したほうが、そのモジュールの信号が表示量が多くなるので、チェックを外しておく。
PlanAhead141_120_120524.png

・元のダイアログに戻ると、先ほど選んだ信号が入っていた。ここにリストされている信号全てがTRIGとDATAに設定されている。DATAはタイミングチャートとして表示される信号のことで、TRIGは波形キャプチャのトリガー条件とすることが出来る信号のことだ。
PlanAhead141_121_120524.png

・すべての信号を選択して、右クリックメニューからSelect Clock Domain... を選択する。
PlanAhead141_122_120524.png

・Global Clock をUnique Nets Only のチュックを外して、Findボタンで検索する。system_i/cdctest_axi_master_0/ACLK があったのでクリックして、OKボタンをクリックした。
PlanAhead141_123_120524.png

・Clock Domain にsystem_i/cdctest_axi_master_0/ACLK が入力されている。
PlanAhead141_124_120524.png

・すべての信号でトリガー掛ける必要はないので、一旦全信号を選択して、右クリックメニューからSet DATA_only を選択した。
PlanAhead141_125_120524.png

・前信号がDATAのみとなった。
PlanAhead141_126_120524.png

・awvalid だけTRIGも入れたいので、awvalid のみを選択して、右クリックメニューからSet TRIG and DATAを選択した。
PlanAhead141_127_120524.png

・awvalid のみTRIGとDATAの両方にチェックが付いた。
PlanAhead141_128_120524.png

・Next>ボタンをクリックして、Finishボタンをクリックした。
PlanAhead141_129_120524.png

・PlanAheadに戻るとChipScope のタブが増えていた。
PlanAhead141_130_120524.png

  1. 2012年05月25日 05:36 |
  2. PlanAheadについて
  3. | トラックバック:0
  4. | コメント:0

XPS入りのPlanAhead14.1プロジェクトを作る4(シミュレーション)

XPS入りのPlanAhead14.1プロジェクトを作る3(SDK)”の続き。
(2012/05/23に追記しました。ソフトウェアをロードした状態でシミュレーションすることができました)

今度は自分で作ったXPS入りのPlanAhead14.1プロジェクトでシミュレーションをしてみた。普通の作り方はシミュレーションを行なってからインプリメントすると思う。しかし、XPSで作ったプロジェクトは規模が大きくなりやすいし、前回32ビット版Windowsでは(たぶん?)シミュレーションできなかったので、自作IPは単体シミュレーションしておいて、全体としてはインプリメントするほうが良いと思う。

さて、最初にテストベンチファイルを作成するのだが、PlanAheadではProject Navigator に付いていたテストベンチのテンプレートを作成する機能が見当たらない。そこで、”Vimをインストールした”でインストールしてあったVimを使用してテストベンチのテンプレートを作成することにした。

・Vimを立ちあげて、トップファイルのsystem_stub.v をオープンして、HDLメニューからVerilog Testbench を選択したらテストベンチのテンプレートが作成された。
PlanAhead141_103_120521.png

・クロックの周期の半分を32から5 に変更し、tb_system_stub.v をしてセーブした。

・PlanAheadのFileメニューのAdd Sources... を選択して出てきたダイアログのAdd or Create Simulation Sources を選択して、tb_system_stub.v をプロジェクトに追加した。
PlanAhead141_104_120521.png

・PlanAheadのプロジェクトにtb_system_stub.v が追加された。
PlanAhead141_105_120521.png

・左のウインドウでProject Manager -> Run Behavioral Simulation をクリックした。

・Launch Run Behavioral Simulationダイアログが表示された。sim1を確認して、Launchボタンをクリックした。
PlanAhead141_106_120521.png

・エラーが出てしまった。
PlanAhead141_107_120521.png

・エラーの内容を見るとclk とrst がないと言われている。clk の宣言はCLKでされていた。clk を大文字に修正した。rst はそもそも宣言がないので、RESETに修正した。Vimのテストベンチ・テンプレート作成上のバグかな?
PlanAhead141_108_120521.png

・ISimが起動してシミュレーションが実行された。更に信号を追加して100usec までシミュレーションした。
PlanAhead141_109_120521.png

sim_1の環境にaxi_timer_test.elf が入っていても、ソフトウェアをロードしていないんじゃないか?と思う。axi_timer_0のシミュレーション結果を見てもaxi4_liteバスのWriteが出ていない。ソフトウェアで初期化をしているはずなんだけど。。。

・simulation でワーニングが大量に出いた。その中で最初のワーニングに従って、コンパイル時のオプションを追加してみることにした。
PlanAhead141_110_120521.png

・Run Behavioral Simulation をクリックした後のLaunch Run Behavioral SimulationダイアログのOptions...ボタンをクリックして、CompilationタブのMore Fuse Options に-mt off -v 1 を追加した。
PlanAhead141_111_120521.png

シミュレーションをしてみたが変化なし。ELFファイルはロードしてくれないのだろうか?
Xilinxのサイトからマニュアルを漁ってみたが記述が見つからない。何か情報がある方は教えて下さい。

(2012/5/23:追記)
シミュレーションにソフトウェアがロードされていない原因がわかりました。
色々ファイルを見てみたんですが、Atlys_EDK_test_PA\Atlys_EDK_test_PA.sim\sim_1\runme.bat がPlanAheadが生成したISim simulation Script でした。見てみると、data2mem でmb_bootloop_le.elf がロードされていました。(axi_timer_test.elfではなく)

ToolsメニューからAssociate ELF Files... を選択して、ダイアログを開くとsim_1には、mb_bootloop_le.elf が関連付けられていました。
PlanAhead141_112_120523.png

Sourcesウインドウにはsim_1 にはaxi_timer_test.elf が関連付けられているように表示されていたんですが。。。
PlanAhead141_105_120521.png

必ず、Associate ELF Files... で確認する必要がありますね。

・さて、sim_1 にaxi_timer_test.elf を関連付けました。axi_timer_test.elf があるパスは、Atlys_EDK_test_PA\Atlys_EDK_test_PA.sdk\SDK\SDK_Export\axi_timer_test\Debug です。
PlanAhead141_113_120523.png

・もう一度、左のウインドウでProject Manager -> Run Behavioral Simulation をクリックしました。

・Launch Run Behavioral Simulationダイアログが表示されるので、sim1を確認して、Launchボタンをクリックしてシミュレーションのコンパイルを開始させます。

・ISimが立ちあげて、1usec シミュレーションを行いましたが、まだaxi_timer_0 にWirte するところが見えないので、更に10usec シミュレーションを行いました。

・axi_timer_0 に初期設定を書き込むところが見えました。
axi_timer_test.c のaxi_timer_0 に初期設定を行う部分のコードです。

// AXI_TIMER define
#define AXI_TIMER_0_TCSR0    XPAR_AXI_TIMER_0_BASEADDR    // Control/Status Register 0
#define AXI_TIMER_0_TLR0    XPAR_AXI_TIMER_0_BASEADDR+0x4    // Load Register 0
#define AXI_TIMER_0_TCR0    XPAR_AXI_TIMER_0_BASEADDR+0x8    // Timer/Counter Register 0
#define AXI_TIMER_0_TCSR1    XPAR_AXI_TIMER_0_BASEADDR+0x10    // Control/Status Register 1
#define AXI_TIMER_0_TLR1    XPAR_AXI_TIMER_0_BASEADDR+0x14    // Load Register 1
#define AXI_TIMER_0_TCR1    XPAR_AXI_TIMER_0_BASEADDR+0x18    // Timer/Counter Register 1

#define ENABLE_ALL_TIMERS                (0x1<<10)
#define ENABLE_PULSE_WIDTH_MODULATION    (0x1<<9)
#define    TIMER_INTERRUPT                    (0x1<<8)
#define ENABLE_TIMER                    (0x1<<7)
#define ENABLE_INTERRUPT                (0x1<<6)
#define LOAD_TIMER                        (0x1<<5)
#define AUTO_RELOAD_HOLD_TIMER            (0x1<<4)
#define ENABLE_EXT_CAPTURE_TRIG            (0x1<<3)
#define ENABLE_EXT_GENERATE_SIG            (0x1<<2)
#define DOWN_UP_COUNT_TIMER                (0x1<<1)
#define TIMER_MODE_CAP_GENE                (0x1)

int interrupt = 0;

void axi_intc_init() {
    *(volatile unsigned int *)(MICROBLAZE_0_INTC_IER) = 0x1;    // int0 enable
    *(volatile unsigned int *)(MICROBLAZE_0_INTC_MER) = 0x3;    // IRQ Enable
}

void axi_timer_init(){
    *(volatile unsigned int *)(AXI_TIMER_0_TLR0) = 100000000// 100MHzで1秒
    *(volatile unsigned int *)(AXI_TIMER_0_TCSR0) = ENABLE_ALL_TIMERS | LOAD_TIMER; // TLR0へロード
    *(volatile unsigned int *)(AXI_TIMER_0_TCSR0) = ENABLE_ALL_TIMERS | ENABLE_TIMER | ENABLE_INTERRUPT | DOWN_UP_COUNT_TIMER; // GenerateモードでDWONカウント、割り込みあり
}


axi_timer_init()がaxi_timer_0 の初期化ルーチンです。AXI_TIMER_0_TLR0にカウント値を書いてから、一度、AXI_TIMER_0_TCSR0にAXI_TIMER_0_TLR0にカウント値をロードする値を書いて、もう一度、TIMER_0_TCSR0にカウントのモードを書いています。
ISimのその部分の波形を下に示します。
PlanAhead141_114_120523.png

上の波形では、下に示す順番でaxi_timer_0 のレジスタに書き込む様子が見えると思います。
1.0x41c00004(AXI_TIMER_0_TLR0)番地に、0x05f5e100(十進数で100000000)をWrite
2.0x41c00000(TIMER_0_TCSR0)番地に、0x00000420をWrite
3.0x41c00000(TIMER_0_TCSR0)番地に、0x000004c2をWrite

これで、ソフトウェアをロードした状態で、回路全体のシミュレーションをすることができました。
  1. 2012年05月22日 05:51 |
  2. PlanAheadについて
  3. | トラックバック:0
  4. | コメント:0

PlanAhead14.1で、XPS入りのISE14.1のプロジェクトをインポートしてみた3(シミュレーション)

PlanAhead14.1で、XPS入りのISE14.1のプロジェクトをインポートしてみた2(解決編)”の続き。

今回は全体シミュレーションしてみることにした。

・左のウインドウでProject Manager -> Run Behavioral Simulation をクリックした。

・Launch Run Behavioral Simulationダイアログが表示された。Launchボタンをクリックした。
PlanAhead141_101_120520.png

・エラーが出てしまった。
PlanAhead141_100_120520.png

エラーはsystem_cdctest_axi_master_0_wrapper のcdctest_axi_master のコンポーネント宣言中のgeneric のC_INTERCONNECT_M_AXI_WRITE_ISSUING がcdctest_axi_master のgeneric にないというエラーだった。
system_cdctest_axi_master_0_wrapper のcdctest_axi_master のコンポーネント宣言中のgeneric宣言を下に示す。

generic (
C_INTERCONNECT_M_AXI_WRITE_ISSUING : INTEGER;
C_M_AXI_THREAD_ID_WIDTH : integer;
C_M_AXI_ADDR_WIDTH : integer;
C_M_AXI_DATA_WIDTH : integer;
C_M_AXI_SUPPORTS_READ : integer;
C_M_AXI_SUPPORTS_WRITE : integer;
C_M_AXI_AWUSER_WIDTH : integer;
C_M_AXI_ARUSER_WIDTH : integer;
C_M_AXI_WUSER_WIDTH : integer;
C_M_AXI_RUSER_WIDTH : integer;
C_M_AXI_BUSER_WIDTH : integer;
C_M_AXI_TARGET : std_logic_vector(31 downto 0);
C_M_AXI_BURST_LEN : integer;
C_OFFSET_WIDTH : integer
);


cdctest_axi_master のgeneric宣言を下に示す。

generic(
C_M_AXI_THREAD_ID_WIDTH : integer := 1;
C_M_AXI_ADDR_WIDTH : integer := 32;
C_M_AXI_DATA_WIDTH : integer := 32;
C_M_AXI_AWUSER_WIDTH : integer := 1;
C_M_AXI_ARUSER_WIDTH : integer := 1;
C_M_AXI_WUSER_WIDTH : integer := 1;
C_M_AXI_RUSER_WIDTH : integer := 1;
C_M_AXI_BUSER_WIDTH : integer := 1
);


cdctest_axi_master のgeneric宣言の数は、system_cdctest_axi_master_0_wrapper のcdctest_axi_master のコンポーネント宣言中のgeneric宣言よりも数がだいぶ少ない。
cdctest_axi_master は、ar37425でXilinxからダウンロードしたテンプレートを使用している。(”AXI4バスのマスタIPのテスト1(構想編)”参照)
そう言えば、”AXI4マスタIPのパラメータ”で調べたパラメータよりだいぶgeneric の数が少ないなとは思っていた。
とにかく、両方のgeneric文を調べて無い宣言をcdctest_axi_master のgeneric宣言に追加しようと思う。
cdctest_axi_master のgeneric宣言を下のように変更した。

entity cdctest_axi_master is
generic(
C_INTERCONNECT_M_AXI_WRITE_ISSUING : INTEGER;
C_M_AXI_THREAD_ID_WIDTH : integer := 1;
C_M_AXI_ADDR_WIDTH : integer := 32;
C_M_AXI_DATA_WIDTH : integer := 32;
C_M_AXI_SUPPORTS_READ : integer;
C_M_AXI_SUPPORTS_WRITE : integer;
C_M_AXI_AWUSER_WIDTH : integer := 1;
C_M_AXI_ARUSER_WIDTH : integer := 1;
C_M_AXI_WUSER_WIDTH : integer := 1;
C_M_AXI_RUSER_WIDTH : integer := 1;
C_M_AXI_BUSER_WIDTH : integer := 1;
C_M_AXI_TARGET : std_logic_vector(31 downto 0);
C_M_AXI_BURST_LEN : integer;
C_OFFSET_WIDTH : integer
);


・もう一度、Behavioral Simulation を実行した。

・やはりエラー。Signal EXCEPTION_ACCESS_VIOLATION だそうで、これはどうしたら良いかわからないので、諦めることにした。
PlanAhead141_102_120520.png

残念ながら、全体シミュレーションは失敗してしまった。

(追加)
多分原因はWindows XP 32ビット版でメモリが少ないせいだと思います。いよいよ、Windows 7 64ビット版に載せ換えないとダメかも知れません。
Spartan-6 FPGA コネクティビティ キット TRD - Windows で ISim を実行すると「ERROR:Simulator:754 - Signal EXCEPTION_ACCESS_VIOLATION received」というエラー メッセージが表示される
  1. 2012年05月20日 06:04 |
  2. PlanAheadについて
  3. | トラックバック:0
  4. | コメント:0

PlanAhead14.1で、XPS入りのISE14.1のプロジェクトをインポートしてみた2(解決編)

PlanAhead14.1で、XPS入りのISE14.1のプロジェクトをインポートしてみた”の続き。

前回、XPSプロジェクトが含まれたISE14.1のプロジェクトをPlanAhead14.1にインポートしてみたが、論理合成でsystem がunknown moduleで論理合成が止まってしまった。新しい知見を得て、うまく行きそうだったので、もう一度やってみた。

改善点はXPSプロジェクトを立ちあげて、ProjectメニューからClean All Generate Filse を選択して、すべての生成ファイルをクリアしたことだ。
PlanAhead141_98_120519.png

こうすると、PlanAhead14.1でXPSプロジェクトが含まれたISE14.1のプロジェクトをインポートして、論理合成、インプリメント、ビットファイルの生成まで完了できた。
PlanAhead141_99_120519.png

エラーが出ているが、これは、ISE14.1のプロジェクトからインポートした時のエラーだ。エラーが出ても問題ないようだ。

iMPACTでビットファイルをダウンロードすると、キャラクタ・ディスプレイ・コントローラのテスト回路が問題なく動作した。
cdctest_axi_master_19_120404.jpg

PlanAhead14.1を使うことにした。
  1. 2012年05月19日 05:47 |
  2. PlanAheadについて
  3. | トラックバック:0
  4. | コメント:0

XPS入りのPlanAhead14.1プロジェクトを作る3(SDK)

XPS入りのPlanAhead14.1プロジェクトを作る2(XPSの設定、インプリメント)”の続き。

PhanAhead14.1プロジェクトでXPSプロジェクトを作製して、インプリメント、ビットファイルの生成まで成功した。今回はハードウェア設定をエクスポートして、SDKを使ってLEDを+1するソフトウェアを作製する。

・FileメニューからExport -> Export Hardware... を選択した。

・ダイアログが開く。Launch SDKにチェックを入れて、OKボタンをクリックした。
PlanAhead141_82_120518.png

・SDKが起動した。
PlanAhead141_83_120518.png

LEDを+1して表示するソフトウェアを作製する。と言っても、ソフトウェアは、”AtlysボードでXPSプロジェクトを試す2(ソフトウェアを試す)”で作っているので、SDKでプロジェクトを作成して入れるだけのはずだ。

・FileメニューのNew -> C Xilinx Projectを選択して、Cプロジェクトを作成する。

・New Projectダイアログが立ち上がる。Project name:にaxi_timer_testと入力し、Select Project TemplateからEmpty Applicationを選択した。Next->ボタンをクリックした。
PlanAhead141_84_120518.png

・Create a new Board Support Package projcetのProject name:をAtlys_bsp_0に変更した。Finishボタンをクリックした。
PlanAhead141_85_120518.png

・Project ExplorerにAtlys_bsp_0とaxi_timer_testが追加された。
PlanAhead141_86_120518.png

・axi_timer_testの下のsrcに、”AtlysボードでXPSプロジェクトを試す2(ソフトウェアを試す)”で作ったaxi_timer_test.cをドラッグアンドドロップした。まだ、Altys用に変更していないので、エラーが出ている。
PlanAhead141_87_120518.png

・xparameters.h を見ながらLEDを制御するGPIOの定義を変えたらコンパイルが通った。axi_timer_test.elf が生成された。
PlanAhead141_88_120518.png

・Xilinx ToolsメニューからProgram FPGAを選択した。

・Program FPGAダイアログでSoftware Configuratioで、ElF File to Initialize in Block RAMで、axi_timer_test.elfを選択した。Programボタンを押して、Atlysボードにソフトウェア入りのビットファイルをダウンロードした。
PlanAhead141_89_120518.png

・結果はエラーだった。やはり、Data2MEMでエラーだった。ISE13.4から直ってない~。
PlanAhead141_90_120518.png

ISE13.4のSDKでのData2MEMエラーは、”MicroBlaze MCSをテストする4(SDK編2)”を参照のこと。
ISE13.4でSDKのソフトウェアデバックをどうやったかというと、iMPACTでソフトウェアの入ってないビットファイルをコンフィグレーションしてから、SDKのデバックでELFファイルだけロードしてデバックすることが出来た。
今回はソフトウェアにバグは無いと思うので、PlanAheadプロジェクトににELFファイルを入れてビットファイルを作り直そうと思う。

・PlanAheadでaxi_timer_test.elfをプロジェクトに入れるには、Add Sources...ではなくて、ToolsメニューからAssociate ELF_ Files... を選択した。

・Associate ELF Filesダイアログが開く。右端の...ボタンをクリックしてELFファイルを指定する。
PlanAhead141_91_120518.png

・Add ELF Filesボタンをクリックした。
PlanAhead141_92_120518.png

・axi_timer_test.elfを指定して、OKボタンをクリックした。
PlanAhead141_93_120518.png

・Associate ELF fileダイアログにaxi_timer_test.elfが追加された。OKボタンをクリックした。
PlanAhead141_94_120518.png

・Associate ELF Filesダイアログにaxi_timer_test.elfが設定された。OKボタンをクリックした。
PlanAhead141_95_120518.png

・PlanAheadのSourcesウインドウでLibraryタブをクリックすると、axi_timer_test.elfが設定されているのがわかる。
PlanAhead141_96_120518.png

・左のFlow Navigator のProgram and Debug -> Gnerate Bitstream をクリックして、再度ビットファイルを生成した。
(最後に *** Running data2mem
with args -bm "system_stub_bd.bmm" -bt "system_stub.bit" -bd "H:\HDL\FndtnISEWork\Spartan6\Atlys\test\Atlys_EDK_test_PA\Atlys_EDK_test_PA.srcs\sources_1\imports\Debug\axi_timer_test.elf" tag system_i_microblaze_0 -o b "download.bit" -p xc6slx45csg324-2 が実行されてソフトウェアがロードされたようだ。

・左のFlow Navigator のProgram and Debug -> iMPACT をクリックしてiMPACT を起動した。

・iMPACT で、Atlys_EDK_test_PA\Atlys_EDK_test_PA.runs\impl_2\download.bit をAtlysボードにダウンロードしたらLED+1ソフトウェアが動作した。system_stub.bit では動作しなかった。これはソフトウェアを入れる前のビットファイルということだ。
PlanAhead141_97_120518.png

これでXPS入りのPlanAhead14.1プロジェクトが完成した。
  1. 2012年05月18日 05:49 |
  2. PlanAheadについて
  3. | トラックバック:0
  4. | コメント:0

XPS入りのPlanAhead14.1プロジェクトを作る2(XPSの設定、インプリメント)

”XPS入りのPlanAhead14.1プロジェクトを作る1(プロジェクトの生成)”の続き。

前回は、XPS (Xilinx Platform Studio) のプロジェクトが出来たところまでだったが、PlanAhead14.1でインプリメントをしてみた。
XPSプロジェクト入りPlanAhead14.1のマニュアルがあった。それは、”PlanAhead User Guide UG632 (v14.1) April 24, 2012”だ。まだUSのXilinxサイトにしかなかった。これの82ページの”Managing Embedded Processor Sources”にやり方が書いてある。

・前回の最後の図はXPSのプロジェクトだった。(Bus Interfacesタブ)
PlanAhead141_67_120516.png

・Portsタブをクリックした。External Ports にCLK(CLK_PとCLK_Nがあって差動入力になっているので後で修正する)RESET、それにLEDが出力されている。microblaze_0_intcとLEDSにはクロックが接続されていた。

・Portsタブの下半分。axi_timer にもAXIバスのクロックが接続されたいた。
PlanAhead141_69_120516.png

・Addressesタブ。すべてのモジュールにアドレスが割り振られている。
PlanAhead141_70_120516.png

Portsタブでclock_generator_0 のCLKINがCLK_P, CLK_Nの差動入力になっていた。これをシングルエンド入力に変更する。

・CLK_Pをクリックして、clock_generator_0_CLKIN_pin を選択した。(これは必要なかったようだ。後で消してしまった)
PlanAhead141_71_120517.png

・CLK_Nを削除した。
PlanAhead141_72_120517.png

・External Ports のCLK_Nを右クリックメニューのDelete External Port を選択して削除する。

・External Ports のclock_generator_0_CLKIN_pin もDelete External Port を選択して削除した。

・CLK_PをCLKに名前を変更して、Connected Portの辺りをクリックして、clock_generator_0のCLKINを選択した。
PlanAhead141_73_120517.png

・External Ports のLEDS_TRI_O をLed に名前を変更した。

・これでCLKのGUIでの変更は終了した。
PlanAhead141_74_120517.png

・system.mhs を左上のProjectウインドウから起動した。system.mhs の16行目にDIFFERENTIAL_POLARITY = P,という記述があったので削除した。
PlanAhead141_75_120517.png

次にucfファイルを下のように設定した。 ucf ファイルはデフォルトのタイミング制約のみとした。(ここでピン配置制約を書くとGUIで設定できなかったり、DRCが掛からなかったりするので、PlanAheadで制約したほうが良いという結論になった)
PlanAhead141_76_120517.png

・ProjectメニューからDesgin Rule Check を実行したら問題なく通った。これでXPSを終了した。
PlanAhead141_77_120517.png

・PlanAheadに戻って、systemを選択して右クリックメニューからGenerate... を選んだらHDLじゃないとエラーになってしまった。そこで、systemを選択して右クリックメニューからCreate Top HDL を選択した。
PlanAhead141_78_120517.png

・system_stub.v という名前のトップのVerilogファイルが生成された。
PlanAhead141_79_120517.png

・FileメニューからAdd Sources...を選んで、system_stub.ucf を作り、下に示す制約を入れた。
PlanAhead141_81_120517.png

NET "CLK" LOC = "L15" | IOSTANDARD = LVCMOS33; # Bank = 1, Pin name = IO_L42P_GCLK7_M1UDM, Type = GCLK, Sch name = GCLK
NET "RESET" LOC = "T15" | IOSTANDARD = LVCMOS33; # Bank = 2, Pin name = IO_L1N_M0_CMPMISO_2, Sch name = M0/RESET
NET "Led<0>" LOC = "U18" | IOSTANDARD = LVCMOS33; # Bank = 1, Pin name = IO_L52N_M1DQ15, Sch name = LD0
NET "Led<1>" LOC = "M14" | IOSTANDARD = LVCMOS33; # Bank = 1, Pin name = IO_L53P, Sch name = LD1
NET "Led<2>" LOC = "N14" | IOSTANDARD = LVCMOS33; # Bank = 1, Pin name = IO_L53N_VREF, Sch name = LD2
NET "Led<3>" LOC = "L14" | IOSTANDARD = LVCMOS33; # Bank = 1, Pin name = IO_L61P, Sch name = LD3
NET "Led<4>" LOC = "M13" | IOSTANDARD = LVCMOS33; # Bank = 1, Pin name = IO_L61N, Sch name = LD4
NET "Led<5>" LOC = "D4" | IOSTANDARD = LVCMOS33; # Bank = 0, Pin name = IO_L1P_HSWAPEN_0, Sch name = HSWAP/LD5
NET "Led<6>" LOC = "P16" | IOSTANDARD = LVCMOS33; # Bank = 1, Pin name = IO_L74N_DOUT_BUSY_1, Sch name = LD6
NET "Led<7>" LOC = "N12" | IOSTANDARD = LVCMOS33; # Bank = 2, Pin name = IO_L13P_M1_2, Sch name = M1/LD7


・Systhesis -> Run Synthesis をクリックして、論理合成を実行した。

・Implementation -> Run Implementation をクリックして、インプリメントを実行した。

・Program and Debug -> Generate Bitstream をクリックして、ビットファイルの生成を行った。
PlanAhead141_80_120517.png

Messages に以前のエラーやワーニングが通算して表示されているのは頂けないと思う。今回の実行した分だけ表示するようにできないのかな?
  1. 2012年05月17日 06:05 |
  2. PlanAheadについて
  3. | トラックバック:0
  4. | コメント:0
»