FC2カウンター FPGAの部屋 2012年05月

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

FPGAの部屋

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

AXI Performance Monitor IPを試してみた2(SDK)

AXI Performance Monitor IPを試してみた1(インプリメント)”の続き。

前回は、AXI Performance Monitor をXPSプロジェクトに入れて設定し、PlanAheadに戻ってインプリメントを行った。今回はSDKを起動して、XMDでAXI Performance Monitor が動作しているどうかを確認する。

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

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

・SDKが立ち上げた。
AXI_P_Monitor_9_120530.png

・Xilinx ToolsメニューからProgram FPGAを選択した。(ビットファイルをダウンロードするため)

・Program FPGAダイアログで、そのまま、Programボタンを押して、Atlysボードにビットファイルをダウンロードした。
AXI_P_Monitor_10_120530.png

・結果はエラーだった。やはり、Data2MEMでエラーだった。

・仕方が無いので、またiMPACTを起動してビットファイルをダウンロードした。ビットファイルは、tlys_XPS_CDC_SVGA_141_PA.sdk\SDK\SDK_Export\Atlys_XPS_CDC_SVGA_141_hw_platformの下にあるsystem.bitだ。
AXI_P_Monitor_11_120530.png

・Xilinx Cプロジェクト(axi_perf_mon_test) と作って、その中にaxi_perf_mon_test.c を生成した。これはデバックモードににするため、コンパイル出来ればなんでも良い。下のリストに示す。Cソフトウェアを生成した。(この辺は前から嫌というほどやってきたので省略する)

/*
 * axi_perf_mon_test.c
 *
 *  Created on: 2012/05/31
 *      Author: Masaaki
 */

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

int main()
{
    unsigned int data;

    data = *(volatile unsigned int *)(XPAR_AXI_PERF_MON_0_BASEADDR);

    return 0;
}



・2つダイアログが出てきたが、デバックモードになった。XMDのウインドウを右はじに移動した。(コマンドの履歴が見えるように)
AXI_P_Monitor_13_120531.png

AXI Performance Monitor のベースアドレスは、”AXI Performance Monitor IPを試してみた1(インプリメント)”のXPSプロジェクトのAddresses タブに示されている様に0x41d00000 にマップしてある。
このAXI Performance Monitor にはレジスタがたくさんある。

C_BASEADDR +0x0000 にControl Registerがあって、レジスタ群のイネーブルやリセットを行う。Control Registerの図を”LogiCORE™ AXI Perf Mon IP (v1.00.a)”(以下マニュアルとする)のFigure 2: Control Registerから引用させていただく。
AXI_P_Monitor_15_120601.png

Control Register(32ビット長)のビット割り当てを下に示す。
ビット9:Metrics_Cnt_Reset でMetric Counter群をリセットする。
ビット8:Metrics_Cnt_En でMetric Counter群をリセットする。
ビット1:Global_Clk_Cnt_Reset でフリーランニングしているGlobal Clock Counter をリセットする。
ビット0:Global_Clk_Cnt_En でフリーランニングしているGlobal Clock Counter をイネーブルする。

すべてのレジスタを列挙する。すべてのレジスタのビット長は32ビット。(LogiCORE IP AXI Performance Monitor v1.00.a Product Guide PG037 May 22, 2012 を参照してレジスタを追加した)

C_BASEADDR +0x0000 : Control Register
C_BASEADDR +0x0004 : Read Latency Range A Register
C_BASEADDR +0x0008 : Read Latency Range B Register
C_BASEADDR +0x000C : Read Latency Range C Register
C_BASEADDR +0x0010 : Read Latency Range D Register
C_BASEADDR +0x0014 : Write Latency Range A Register
C_BASEADDR +0x0018 : Write Latency Range B Register
C_BASEADDR +0x0024 : Metric Selector register
C_BASEADDR +0x0028 : Sample Interval MSB
C_BASEADDR +0x002C : Sample Interval LSB
C_BASEADDR +0x0030 : Sample Interval Control Register
C_BASEADDR +0x0040 : Global Interrupt Enable Register
C_BASEADDR +0x0044 : Interrupt Enable Register
C_BASEADDR +0x0048 : Interrupt Status Register
C_BASEADDR +0x1000 : Metric Counter 0 (High)
C_BASEADDR +0x1004 : Metric Counter 0 (Low)
C_BASEADDR +0x1008 : Metric Counter 1 (High)
C_BASEADDR +0x100C : Metric Counter 1 (Low)
C_BASEADDR +0x1010 : Metric Counter 2 (High)
C_BASEADDR +0x1014 : Metric Counter 2 (Low)
C_BASEADDR +0x1018 : Metric Counter 3 (High)
C_BASEADDR +0x101C : Metric Counter 3 (Low)
C_BASEADDR +0x1020 : Metric Counter 4 (High)
C_BASEADDR +0x1024 : Metric Counter 4 (Low)
C_BASEADDR +0x1028 : Metric Counter 5 (High)
C_BASEADDR +0x102C : Metric Counter 5 (Low)
C_BASEADDR +0x1030 : Metric Counter 6 (High)
C_BASEADDR +0x1034 : Metric Counter 6 (Low)
C_BASEADDR +0x1038 : Metric Counter 7 (High)
C_BASEADDR +0x103C : Metric Counter 7 (Low)
C_BASEADDR +0x1040 : Metric Counter 8 (High)
C_BASEADDR +0x1044 : Metric Counter 8 (Low)
C_BASEADDR +0x1048 : Metric Counter 9 (High)
C_BASEADDR +0x104C : Metric Counter 9 (Low)
C_BASEADDR +0x0800 : Global Clock Counter (127 downto 96)
C_BASEADDR +0x0804 : Global Clock Counter (95 downto 64)
C_BASEADDR +0x0808 : Global Clock Counter (63 downto 32)
C_BASEADDR +0x080C : Global Clock Counter (Lower 32-bit data)
C_BASEADDR +0x2000 : Sampled Metric Counter 0 (High)
C_BASEADDR +0x2004 : Sampled Metric Counter 0 (Low)
C_BASEADDR +0x2008 : Sampled Metric Counter 1 (High)
C_BASEADDR +0x200C : Sampled Metric Counter 1 (Low)
C_BASEADDR +0x2010 : Sampled Metric Counter 2 (High)
C_BASEADDR +0x2014 : Sampled Metric Counter 2 (Low)
C_BASEADDR +0x2018 : Sampled Metric Counter 3 (High)
C_BASEADDR +0x201C : Sampled Metric Counter 3 (Low)
C_BASEADDR +0x2020 : Sampled Metric Counter 4 (High)
C_BASEADDR +0x2024 : Sampled Metric Counter 4 (Low)
C_BASEADDR +0x2028 : Sampled Metric Counter 5 (High)
C_BASEADDR +0x202C : Sampled Metric Counter 5 (Low)
C_BASEADDR +0x2030 : Sampled Metric Counter 6 (High)
C_BASEADDR +0x2034 : Sampled Metric Counter 6 (Low)
C_BASEADDR +0x2038 : Sampled Metric Counter 7 (High)
C_BASEADDR +0x203C : Sampled Metric Counter 7 (Low)
C_BASEADDR +0x2040 : Sampled Metric Counter 8 (High)
C_BASEADDR +0x2044 : Sampled Metric Counter 8 (Low)
C_BASEADDR +0x2048 : Sampled Metric Counter 9 (High)
C_BASEADDR +0x204C : Sampled Metric Counter 9 (Low)


Metric Selector register の設定によってMetric Counterの測定する項目が変化する。LogiCORE IP AXI Performance Monitor v1.00.a Product Guide PG037 May 22, 2012の31ページから”Figure 2-8: Metric Selector Register”と”Table 2-21: Metric Selector Register Bit Definitions (C_BASEADDR + 0x0024)”を引用させていただく。
AXI_P_Monitor_16_120601.png

次にMetric_Set_Selの値によるMetric Counter Registers の測定項目を示す。
LogiCORE IP AXI Performance Monitor v1.00.a Product Guide PG037 May 22, 201236,37ページの2-28, 2-29, 2-30表を引用させていただく。
AXI_P_Monitor_17_1_120601.png
AXI_P_Monitor_17_2_120601.png
AXI_P_Monitor_17_5_120601.png

この様にたくさんの項目を測定することができるようだ。今回はSet4を確かめて見ることにする。
XMDでmwr, mrd コマンドを使用して各レジスタをWrite/Readしてみた。
AXI_P_Monitor_14_120531.png

最初にControl Registerをリセットしてから、リセットを外し、イネーブルだけにする。
Metric Selector register にSet4を設定する。Set4のMetric Register を読みだす。Num_Wr_Reqs、Num_WLasts、Write Byte Count、Total Write Latencyをそれぞれ2回ずつReadしている。増えているのがわかると思う。ちなみにAXI Performance Monitor のカウンタのビット長を32ビットに設定してあるので、Highの方はないはずだ。
最後に、C_BASEADDR +0x080C : Global Clock Counter (Low)をReadしてみたが、実装されていないようだ。C_BASEADDR +0x0808 : Global Clock Counter (High)だけなのかもしれない(未確認)。 よく見たらアドレスが間違っていました。もう一度やってみます。

(追加)
C_BASEADDR +0x080C : Global Clock Counter (Low)をもう一度やってみました。2回Readしてみたところ2回目のほうが増えてました。ちゃんとカウントしているようです。
AXI_P_Monitor_18_120601.png

(追加2)
LogiCORE IP AXI Performance Monitor v1.00.a Product Guide PG037 May 22, 2012 によるとレジスタが増えていたので記事のレジスタを書き換えました。
  1. 2012年05月31日 05:59 |
  2. IP
  3. | トラックバック:0
  4. | コメント:0

AXI Performance Monitor IPを試してみた1(インプリメント)

前回は、ChipScope AXI Monitor を試してみたが、とても便利だったが思った通りの動作ではなかった。(チェッカがうまく使えればAXIバスのデバックに役立つと思う)今回はAXI Performance Monitor IPを試して見ることにした。

AXI Performance Monitor は、言わばカウンタ・レジスタの塊でReadやWriteのレイテンシや、総データ転送数、トランザクション数をカウントしてくれるIPのようだ。モニタ用のAXIバス・ポート(複数設定できる)と自分がマップされるAXI4 Liteバスを持っている。結構理想に近いのだが、MicroBlaze のAXI4 Liteバスに接続して、カウンタ値を読み出すとなると何らかの形で外に出す必要がある。AtlysボードにはUSB-UARTポートが付いているので、そこからカウンタ値をシリアル経由で出力し、TeraTermで見てみようと思う。

使用するXPSプロジェクトは、前回同様、PlanAhead14.1にAXI4マスタでキャラクタデータを書き込む方式にした、AXI4スレーブのキャラクタ・ディスプレイ・コントローラを使用する。

・まずはPlanAhead プロジェクトのXPSをダブル・クリックして、XPSを起動する。

・左下のIP Catalog ウインドウ内のDebugを展開して、AXI Performance Moniter を右クリックメニューからAdd IP する。
AXI_P_Monitor_1_120529.png

・ダイアログが開く。Allを展開して、Number of AXI4-MM Monitor Slots が2になっているが、1に変更した。カウンタのビット長は動作周波数が100MHzであるので、1秒カウントしても32ビット長でオーバーフローしないので、デフォルト値の32ビットとした。OKボタンをクリックする。
AXI_P_Monitor_2_120529.png

・ダイアログが開く。Use will make necessary connections and settings のラジオボタンをクリックして、OKボタンをクリックする。
AXI_P_Monitor_3_120529.png

・XPSプロジェクトにaxi_perf_man_0 が入る。S_AXI をaxi4lite_0 に、SLOT_0_AXIをcdctest_axi_master_0.M_AXI に接続した。(たぶん)
AXI_P_Monitor_4_120529.png

・Portsタブの設定は下の図のように設定した。
AXI_P_Monitor_5_120529.png

・Addressesタブをクリックして、axi_perf_mon_0のアドレスを0x41D00000から64Kバイト確保した。
AXI_P_Monitor_6_120529.png

・PlanAhead の下のウインドウにエラーが出ているので、エラーをチェックするために、ProjectメニューからDesign Rule Check を選択した。するとエラーが消えた。
AXI_P_Monitor_7_120529.png

・論理合成、インプリメントし、ビットファイルを生成した。

・Implemented Design のNetlist を見るとaxi_perf_mon_0 がインタンスされているのがわかった。
AXI_P_Monitor_8_120530.png

  1. 2012年05月29日 05:54 |
  2. IP
  3. | トラックバック:0
  4. | コメント:0

ChipScope AXI Monitor を試してみた

今回もどのカテゴリに入れて良いか迷う話題。IP Core なんだけどChipScope Pro のコアだし、EDKで使うんだし、困ったがChipScope Analyzer も使うので、ChipScope のカテゴリに入れておいた。

今回は、ChipScope AXI Monitor を試してみることにした。常々、AXIバスの負荷について解析できたら良いと思っている。例えば、DDR2 SDRAMを画像のフレームバッファとして使っている。時間方向に演算するために何画面分フレームバッファとして使えるかを計算する場合がある。その場合には、現在のバス負荷を計算やシミュレーションで求め、それを検証する必要がある。その検証のためにバス負荷を計算できるAXIバスのモニタを使ってみたいと思っている。ChipScope AXI Monitor は結論として、そうしたバスモニタではなかったが、備忘録として書いておこうと思う。

使用したマニュアルは、”LogiCORE IP ChipScope AXI Monitor (v3.03.a)”だ。ここには、AXI Protocol Checkerという項目があって、HDLで合成可能なARM system verilogアサーションを生成するものだそうだ。これもやってみたい。

使用するプロジェクトは、PlanAheadのプロジェクトで、”PlanAhead14.1で、XPS入りのISE14.1のプロジェクトをインポートしてみた2(解決編)”で使用した。AXI4バス・スレーブIP、AXI4バス・マスタIPを使用したキャラクタ・ディスプレイ・コントローラの回路を使用する。

・PlanAheadプロジェクトからXPSプロジェクトをダブルクリックして立ち上げる。ChipScope AXI Monitor IPコアはIP CatalogウインドウのDebugの下にある。
ChipScope_0_120527.png

・今回はこれをAdd IPせずに、DebugメニューからDebug Configuration を選択する。

・Debug Configurationダイアログで、Add ChipScope Peripheral...ボタンをクリックする。
ChipScope_1_120527.png

・Add New ChisScope Peripheralダイアログで、To monitor AXI Interconnect signal(adding AXI Monitor) のラジオボタンをクリックして、OKボタンをクリックする。
ChipScope_2_120527.png

・Debug Configurationダイアログが開く。SystemウインドウのMonitor Hardware Signals で、chipscope_axi_monitor_0 が選択されていると思う。右のMonitor Bus Signals でcdctest_axi_master_0.M_AXI を選択した。
ChipScope_3_120527.png

・Advanced タブをクリックした。Protocol Checker Setting で下の図のようにセットした。
ChipScope_3_5_120527.png

・上の図では表示しきれない部分があったので、もう一度、下図に示す。
ChipScope_3_6_120527.png

・OKボタンをクリックして、Debug Configurationダイアログを閉じると、XPSにchipscope_axi_monitor_0が入っていた。下の方にchipscope_icon_0 も入っている。ChipScopeでは、これが入っている必要がある。
ChipScope_4_120527.png

・XPSのPortタブでのchipscope_axi_monitor_0の設定の状況を下に示す。なお、Addressタブでは、特にアドレスは設定されていなかった。
ChipScope_5_120527.png

・XPSを閉じて、PlanAheadに戻り論理合成、インプリメント、ビットストリームの生成を行った。Critical Warning が出てしまった。
ChipScope_6_120527.png

・PlanAheadからChipScope Pro を立ち上げた。

・Trigger Setupウインドウを開いて、M3を展開し、MON_AXI_AWVALID に1を設定して1の時にトリガが掛かるように設定した。
ChipScope_6_5_120527.png

・Waveformウインドウの波形を示す。まずはWriteから。すべてのAXIバスの信号を見ることが出来る。
ChipScope_7_120527.png

・次はRead。やはり、すべてのAXIバスの信号を見ることが出来る。
ChipScope_8_120527.png

・上の図で、下の方にPC_ERROR_BUS[78}_c4、error_bus_i という信号があるが、これがどうやらAXI Protocol Checkerの信号らしい? error_bus_i を展開するとたくさんの信号が入っているが、これが何を意味するかが良く分からない?
ChipScope_8_6__120527.png

・Trigger Setupウインドウにも、AXI Protocol Checker信号が入っている。試しにRを入れてみてやってみたが、どこでトリガが掛かるか良くわからない。PC_ERROR_BUS[78}_c4、error_bus_i の値も0になっている。
ChipScope_8_5_120527.png

AXI Protocol Checkerについてはよく分からなかった。残念だ。AXI Protocol Checkerに関しての情報をお持ちの方がいらっしゃったら、教えて下さい。

最後にChipScope AXI Monitor を入れた時と入れない時のリソースの比較をしてみようと思う。
最初は、ChipScope AXI Monitor を入れた時のリソースを下に示す。
ChipScope_9_120527.png

次に、ChipScope AXI Monitor を入れない時のリソースを下に示す。
ChipScope_10_120527.png

やはり、かなりの本数のモニタしているので、かなり増えている。LUTは19%から26%に増えている。RAMB16BWER は25%から37%に増えている。

  1. 2012年05月28日 05:25 |
  2. Chipscope
  3. | トラックバック:0
  4. | コメント:0

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

庭でさくらんぼを収穫しました

娘の小学校?の卒業記念の記念樹にさくらんぼの木を植えました。このさくらんぼの木に今年はたくさんのさくらんぼがなっています。今日収穫しました。下の桶の直径は34cmです。
cherry_1_120520.jpg

まだまだ、たくさんのさくらんぼがなっていますが、高くて取れません。
cherry_2_120520.jpg

ズームしてみるとさくらんぼがなっている様子がよく分かると思います。
cherry_3_120520.jpg

実は木々の剪定用に最終兵器を買ってあるんです。まだ使ったことがないんですが、使ってみたいと思います。でも落ちたくないです。危ないかも?必ず二人以上でやります。

(追加)
更に収穫して、ジャムにしました。なかなか美味しいです。食べた時に桜餅食べているような香りがします。
cherry_4_120520.jpg

(もう一回追加)
瓶詰めしました。出張してた奥さんによると、ジャムが冷めてから瓶詰めしたので冷蔵していないと持たないだろう?ということです。
cherry_5_120521.jpg
  1. 2012年05月20日 10:33 |
  2. 日記
  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

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

前回、XPS入りのISE14.1のプロジェクトをPlanAhead14.1にインポートしたら失敗してしまった。(”PlanAhead14.1で、XPS入りのISE14.1のプロジェクトをインポートしてみた”参照)

そこで、今度は自分で1からXPS入りのPlanAhead14.1プロジェクトを作ってみることにした。ターゲットのFPGAボードはDigilent社のAtlysボードとする。
AtlysボードのEDKプロジェクトについては、”AtlysボードでXPSプロジェクトを試す1(XPSのプロジェクト作成、インプリメント)”でやってみた。その際に使用したAtlys™ Spartan-6 FPGA Development BoardのWebページにあるProject Peripheral RepositoryサンプルはEDK13用ののため一度、今回のEDK14.1で使用してみたのだが、おかしくなってしまった。そのため、Project Peripheral Repositoryサンプルを使用せずに、1からBSBフローで作ってみることにした。

・スタートメニューからXilinx Design Tools -> ISE Desgin Suite 14.1 -> PlanAhead -> PlanAhead を起動する。

・PlanAhead 14.1 が開く。Create New Project をクリックした。
PlanAhead141_1_120511.png

・New Projectダイアログが開く。Next>ボタンをクリックした。
PlanAhead141_2_120511.png

・Project location を設定して、Project Name にAtlys_EDK_test_PA と入力して、Next>ボタンをクリックした。
PlanAhead141_51_120515.png

・RTL Project のラジオボタンをクリックして、Do not specify soruces at this time にチェックを入れる。Next>ボタンをクリックした。(新しいRTLプロジェクトを作るが、最初にHDLファイルは指定しないモード?)
PlanAhead141_52_120515.png

・FPGAの型番を指定した。Filterで絞っていって、xc6slx45csg324-2 を指定した。Next>ボタンをクリックした。
PlanAhead141_53_120515.png

・New Project Summary が表示された。Finishボタンをクリックした。
PlanAhead141_54_120515.png

・PlanAhead14.1のプロジェクトが新規作成された。
PlanAhead141_55_120515.png

・Sourcesウインドウで右クリックメニューからAdd Sources... を選択した。
PlanAhead141_56_120515.png

・追加するソースの種類を選ぶ。Add or Create Embedded Sources のラジオボタンをクリックした。Next>ボタンをクリックした。
PlanAhead141_57_120515.png

・XPSプロジェクトを新規作製するため、Create Sub-Design... ボタンをクリックした。
PlanAhead141_58_120515.png

・新規作作製するEmbedded Sourceの名前を聞いてくるので、system と入力した。OKボタンをクリックした。
PlanAhead141_59_120515.png

・Embedded Sourceの用意が出来たので、Finishボタンをクリックした。
PlanAhead141_60_120515.png

・XPSが立ち上がり、BSB Wizardを使用するか?と聞いてくるので、OKボタンをクリックした。
PlanAhead141_61_120515.png

・AXI Systemが選択されているので、そのままOKボタンをクリックした。
PlanAhead141_62_120515.png

・次のダイアログもSingle MicroBlaze Processor System が選択されているし、変更するところが無いので、Next>ボタンをクリックした。
PlanAhead141_63_120516.png

・axi_timer をクリックして選択し、Addボタンをクリックして、右のIncluded Peripherals for microblaze_0に追加する。Use Interruptにチェックを入れておく。更にLED用のGPIOペリフェラルを入れるためにAdd Device...ボタンをクリックした。
PlanAhead141_64_120516.png

・IO Interface Type からGPIOを選択し、Device でLEDSを選択する。OKボタンをクリックした。
PlanAhead141_65_120516.png

・LEDSペリフェラルがIncluded Peripherals for microblaze_0に追加された。今回はUse Interrupt のチェックは行わない。Finishボタンをクリックした。
PlanAhead141_66_120516.png

・XPSプロジェクトが生成された。LEDSもaxt_timer もAXI4_Liteバスに接続されていた。
PlanAhead141_67_120516.png

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

PlanAhead14.1のExampleのBFT Core を試してみた4(Program and Debug編)

PlanAhead14.1のExampleのBFT Core を試してみた3(Implementation編)”の続き。

今回は、PlanAhead14.1プロジェクト最後のProgram and Debug をやってみた。FPGAボードが無いので、Generate Bitstream で終了なのが残念だ。

・Program and Debug -> Generate Bitstream をクリックした。ビットファイルが生成された。
PlanAhead141_50_120514.png

成功したら、ChipScope Analyzer とiMPACT がハイドされた状態から選択できるようになった。残念ながら、FPGAボードが無いので、ここで終了となる。
右のウインドウを見るとわかるが、インプリメント後の動作周波数は198.452Mhz となった。
かなり使いやすくなっていると思う。これでXPSを入れてインプリメント出来て、テストベンチファイルを作る時にテンプレートを挿入してくれれば、全面的にPlanAhead プロジェクトに乗り換えたいと思う。
  1. 2012年05月14日 20:35 |
  2. PlanAheadについて
  3. | トラックバック:0
  4. | コメント:0

宇宙兄弟(映画)を見てきました

昨日、1人で宇宙兄弟を見てきました。小栗旬さんのムッタ役がはまり役でした。モーニングで漫画を読んでいるので、物足りないところは有りましたが、楽しく見ることができました。
  1. 2012年05月14日 05:22 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

PlanAhead14.1のExampleのBFT Core を試してみた3(Implementation編)

PlanAhead14.1のExampleのBFT Core を試してみた2(Synthesis編)”の続き。

今回は、Implementationを行った。

・Implementation -> Run Implementation をクリックした。

・Implementation が成功したというダイアログが表示されたが、誤って消してしまった。デザインを表示させる場合は、FlowメニューからOpen Implemented Design -> を選択する。
PlanAhead141_42_120514.png

・Implementation -> Implemented Design -> Edi Timing Constrains は、Synthesisの時と変わりが無いので省略。

・Implementation -> Implemented Design -> Run TRCEをクリックした。Run TRCE ダイアログが表示された。OKボタンをクリックした。
PlanAhead141_43_120514.png

・Timing TRCE結果が下のウインドウに表示された。
PlanAhead141_44_120514.png

・Implementation -> Implemented Design -> Report Clock Interaction もSynthesisの時と変わりが無いので省略。

・Implementation -> Implemented Design -> Run DRC もSynthesisの時と変わりが無いので省略。

・Implementation -> Implemented Design -> Report Noise もSynthesisの時と変わりが無いので省略。

・Implementation -> Implemented Design -> Report Utilization もSynthesisの時と変わりが無いので省略。

・Implementation -> Implemented Design -> XPower Analyzer をクリックした。Launch XPower Analyzerダイアログが表示された。何も指定せずに、OKボタンをクリックした。
PlanAhead141_45_120514.png

・XPower Analyzer が立ち上がって、消費電力の計算結果を表示した。
PlanAhead141_46_120514.png

・Implementation -> Implemented Design -> FPGA Editor をクリックした。FPGA Editorが起動した。
PlanAhead141_47_120514.png

・Implementation -> Implemented Design -> Run Timing Simulation をクリックした。Launch Timing Simulationダイアログが表示された。Launchボタンをクリックした。
PlanAhead141_48_120514.png

・ISimが立ち上がり、タイミング・シミュレーション結果が表示された。(タイミング・シミュレーションは時間がかかるので、余りやらない。論理シミュレーションと静的タイミング解析で終わりにしてしまう)
PlanAhead141_49_120514.png

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

PlanAhead14.1のExampleのBFT Core を試してみた2(Synthesis編)

PlanAhead14.1のExampleのBFT Core を試してみた1(RTL Analysis)”の続き。

・Synthesis -> Run Synthesis をクリックして、論理合成を行った。
PlanAhead141_24_120512.png

・Synthesis Completed ダイアログが開く。Open Synthesized Design ラジオボタンをクリックして、OKボタンをクリックした。
PlanAhead141_25_120512.png

・ダイアログが出たので、Noボタンをクリックした。
PlanAhead141_27_120512.png

・論理合成終了後の表示
PlanAhead141_28_120512.png

・Synthesis -> Synthesized Design -> Edit Timing Constraints をクリックした。タイミング制約が右上のウインドウに表示された。
PlanAhead141_29_120512.png

・Synthesis -> Synthesized Design -> Report Clock Interaction をクリックした。Report Clock Interaciton ダイアログが開いた。OKボタンをクリックした。
PlanAhead141_30_120512.png

・Clock Interaction が右のウインドウに表示された。クロックドメイン間の関連を表示するようだ。
PlanAhead141_31_120512.png

・Synthesis -> Synthesized Design -> Report DRC をクリックした。Run DRCダイアログが開いた。色々なDRCの項目が並んでいる。OKボタンをクリックした。
PlanAhead141_32_120512.png

・下のウインドウにDEC の結果が示された。
PlanAhead141_33_120512.png

・Synthesis -> Synthesized Design -> Report Noise をクリックした。Run SSN Analysis ダイアログが表示された。OKボタンをクリックした。
PlanAhead141_34_120512.png

・下のウインドウにノイズ解析の結果が表示された。
PlanAhead141_35_120512.png

・Synthesis -> Synthesized Design -> Report Utilization の結果を下に示す。
PlanAhead141_36_120512.png

・Register を展開したのが下の図だ。RTL Analysis に比べてレジスタの値が減っているのがわかる。
PlanAhead141_37_120512.png

・Synthesis -> Synthesized Design -> Schematic をクリックした時の図を下に示す。RTL Analysis に比べて回路が増えている気がする。
PlanAhead141_38_120512.png

・回路図を拡大して素子をクリックすると、Netlist ウインドウの当該の素子がハイライトされる。
PlanAhead141_39_120512.png
  1. 2012年05月13日 21:44 |
  2. PlanAheadについて
  3. | トラックバック:0
  4. | コメント:0

PlanAhead14.1のExampleのBFT Core を試してみた1(RTL Analysis)

前回、PlanAhead14.1で、XPS入のISE14.1プロジェクトをインポートして試してみたが失敗してしまった。(追加:この時はうまく行かなかったけど、原因がわかりました。詳しくは、”PlanAhead14.1で、XPS入りのISE14.1のプロジェクトをインポートしてみた2(解決編)”を参照してください)
今回は、PlanAhead14.1がどんなツールか知るために、Example Project の内からBFT core をやってみることにした。

・最初にPlanAhead を立ちあげて、Open Example Project からBFT Core を選択する。
PlanAhead141_15_120512.png

・BFT Coreプロジェクトが立ち上がった。
PlanAhead141_16_120512.png

・RTL Analysis の機能を試してみた。最初にReport DRCをクリックした。Run DRCダイアログが立ち上がり、DRC項目を選べるようになっていた。全部のDRC項目にチェックを入れて、OKボタンをクリックした。
PlanAhead141_17_120512.png

・Run DRCダイアログが出てNo Violations Found.の表示ができた。DRCエラーは無かった。
PlanAhead141_18_120512.png

・次に、RTL Analysis の内のReport Noise をクリックした。するとRun SSN Analysisダイアログが立ち上がった。OKボタンをクリックした。
PlanAhead141_19_120512.png

・PlanAhead の下のウインドウにレポートが表示された。critical warning もwarning も無いようだ。
PlanAhead141_20_120512.png

・Report Utilization をクリックした。各モジュールごとのRegister やLUTの数を表示するとこが出来た。RTL Analysis なので、HDLソースコードでの各機能モジュールの数を表示している。これから後では、論理合成やMAPの結果による表示になる。
PlanAhead141_21_120512.png

・Schematic をクリックした。HDLコードから回路図を作成するようだ。
PlanAhead141_22_120512.png

RTL Analysis なかなか良い。論理合成前にUtilizationやDRCを表示してくれるなんて、とっても良いと思った。

(Behavioral Simulation を追加)
behavioral simulationは、Weblioでは行動シミュレーションだそうだけど、動作シミュレーションの方が近いだろうか?論理シミュレーションと言ったりする。つまり、HDLの動作をシミュレーションする。PlanAhead のProject Masager -> Run Behavioral Simulation をクリックして、Behavioral Simulationを実行した。

・Launch Behavioral Simulationダイアログが開いた。Launchボタンをクリックした。
PlanAhead141_40_120512.png

・ISimが起動して論理シミュレーションを実行した。下の図は波形全体表示にして、波形を16進数に変更してある。
PlanAhead141_41_120512.png
  1. 2012年05月13日 05:45 |
  2. PlanAheadについて
  3. | トラックバック:0
  4. | コメント:0

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

ザイリンクス デザイン ツールの新機能(PDFです)に、PlanAheadプロジェクトで”.xmpソースを含むISEツールプロジェクト(.xise)をPlanAhead デザインツールプロジェクトにインポートすることも可能です。”と書いてあったので、”XPS13.1入のISE13.4プロジェクトをISE14.1に変換”で使用したISE14.1のプロジェクトをPlanAhead14.1にインポートしてみた。(OSはWindows XP 32ビット版、メモリ8GB(4GBは全く使っていません))
追加:この時はうまく行かなかったけど、原因がわかりました。詳しくは、”PlanAhead14.1で、XPS入りのISE14.1のプロジェクトをインポートしてみた2(解決編)”を参照してください)

・スタートメニューからXilinx Design Tools -> ISE Desgin Suite 14.1 -> PlanAhead -> PlanAhead を起動する。(ここから書くのかと言わないでください。。。(^_^;)、今回はフォルダの構成が変わっていますが、Xilinx Design Toolsの下にVivado も入っているからですね。たぶん、でも、early access license? がないと動かないようです。動きませんでした)

・PlanAhead 14.1 が開く。Create New Project をクリックした。
PlanAhead141_1_120511.png

・New Projectダイアログが開く。Next>ボタンをクリックした。
PlanAhead141_2_120511.png

・Project Name にAtlys_XPS_CDC_SVGA_141_PA と入力して、Next>ボタンをクリックした。
PlanAhead141_3_120511.png

・Project Type でImported Project のラジオボタンをクリックした。Next>ボタンをクリックした。
PlanAhead141_4_120511.png

・ISEのプロジェクトファイルを指定した。Next>ボタンをクリックした。
PlanAhead141_5_120511.png

・Finishボタンをクリックした。
PlanAhead141_6_120511.png

・Import ISE Projectダイアログが出た。成功したようだ。
PlanAhead141_7_120511.png

・PlanAheadにISEのプロジェクトがインポートされた。system_top.v の下にsystem_i がちゃんとインスタンスされている。13.1 に比べてRTL Analysis が追加されている。13.1のPlanAhead についてはここを参照のこと。
PlanAhead141_8_120511.png

・RTL AnalysisのReport DRCをクリックしてみた。Critical Messagesダイアログが出た。XPSで作ったsystem がブラックボックスだと言っている。RTL Analysis なので、至極納得の行くことを行っていると思った。OKボタンをクリックした。
PlanAhead141_9_120511.png

・RUN DRCダイアログが開いた。いろいろなDRC項目についてチャックしているようだが、system_top.v はsystem へのポートマップしているだけなので、この場合はほとんど情報がないと思う。
PlanAhead141_10_120511.png

・DRCはほとんど情報が無いので、置いといて、Project Settings を表示した時のオプションは相変わらずオプションだけだと思ったが、そのオプションをクリックすると、下に説明が出た。これでやりやすくなる。
PlanAhead141_11_120511.png

・PlanAhead画面のProgram and Debug -> Generate Bitstream をクリックして、インプリメントを実行した。No Implementation Availableダイアログが出た。Yesボタンをクリックした。
PlanAhead141_12_120511.png

・論理合成が始まったが、すぐにエラーになってしまった。system がunknown module だそうだ。でもPlanAhead 上でXPSのプロジェクト(system.xmp)を起動すると、ちゃんとXPSが起動するんだけど?なんででしょうか?(追加:この時はうまく行かなかったけど、原因がわかりました。詳しくは、”PlanAhead14.1で、XPS入りのISE14.1のプロジェクトをインポートしてみた2(解決編)”を参照してください)
PlanAhead141_13_120511.png

ちょっと原因が分からない。PlanAheadを落として、元のISEのプロジェクトを立ち上げると論理合成以下がオレンジの?だったので、もう一度コンパイルをしてみたら、以前は完全にインプリメント出来ていたのだが、今回はGenerate Programming File でエラーが出てしまった。
PlanAhead141_14_120511.png

エラー内容を下に示す。

ERROR:ConstraintSystem:59 - Constraint <NET "mcbx_dram_ck" LOC = G3;>
   [system.ucf(66)]: NET "mcbx_dram_ck" not found.  Please verify that:
   1. The specified design element actually exists in the original design.
   2. The specified object is spelled correctly in the constraint source file.
ERROR:ConstraintSystem:59 - Constraint <NET "mcbx_dram_ck_n" LOC = G1;>
   [system.ucf(67)]: NET "mcbx_dram_ck_n" not found.  Please verify that:
   1. The specified design element actually exists in the original design.
   2. The specified object is spelled correctly in the constraint source file.
ERROR:ConstraintSystem:59 - Constraint <NET "mcbx_dram_dm" LOC = K3;>
   [system.ucf(69)]: NET "mcbx_dram_dm" not found.  Please verify that:
   1. The specified design element actually exists in the original design.
   2. The specified object is spelled correctly in the constraint source file.
ERROR:ConstraintSystem:59 - Constraint <NET "mcbx_dram_ck" IOSTANDARD =
   DIFF_SSTL18_II;> [system.ucf(130)]: NET "mcbx_dram_ck" not found.  Please
   verify that:
   1. The specified design element actually exists in the original design.
   2. The specified object is spelled correctly in the constraint source file.
ERROR:ConstraintSystem:59 - Constraint <NET "mcbx_dram_ck_n" IOSTANDARD =
   DIFF_SSTL18_II;> [system.ucf(131)]: NET "mcbx_dram_ck_n" not found.  Please
   verify that:
   1. The specified design element actually exists in the original design.
   2. The specified object is spelled correctly in the constraint source file.
ERROR:ConstraintSystem:59 - Constraint <NET "mcbx_dram_dm" IOSTANDARD =
   SSTL18_II;> [system.ucf(137)]: NET "mcbx_dram_dm" not found.  Please verify
   that:
   1. The specified design element actually exists in the original design.
   2. The specified object is spelled correctly in the constraint source file.
ERROR:Xflow - Program ngdbuild returned error code 2. Aborting flow execution...
ERROR:EDK -  
   Error while running "make -f system.make init_bram".
ERROR: running XPS to load ELF data to bitstream failed.
ERROR: Bitstream data load failed, XPS did not generate H:/HDL/FndtnISEWork/Spartan6/Atlys/Atlys_XPS_CDC_SVGA_141/implementation/download.bit


ピンが無くなったと言われているみたいなのが、エラーになったピンはFPGA Editor で確認すると存在するようなのだ。どうもおかしくなってしまったようだ。削除して、もう一度ISE13.4のプロジェクトをコピーして変換しようと思う。
  1. 2012年05月11日 21:29 |
  2. PlanAheadについて
  3. | トラックバック:0
  4. | コメント:0

SpringSoft社のセミナとトラ技オフ会

昨日は休暇を取って、SpringSoft社のセミナとトラ技オフ会に行って来ました。とっても忙しかったです。

SparingSoft社のツールは一言で言うとASIC作るためのツールで、FPGAを使っている私にはオーバスペックだと思いましたが、とっても参考になりました。中でもCertitude というツールはテストベンチやアサーションの検証用にわざとHDLにバグを作って、どのくらい検証漏れがないか?統計的に検証できるツールだそうです。確かに自分でアサーションのチェックをするとしたら、わざとバグを書いてチェックすると思いますが、それを自動的にやるんでしょう?びっくりしました。これは考えつかなかったです。FPGAではそこまでする必要はないと思いますが、ASICにとってはできたチップがバグってたら死活問題ですよね?
トラ技オフ会参加の関係で、最後のGPU付きFPGAのCo-Simu環境が聞けなかったのが残念です。今資料を見ているんですが、ProtoLinkの話がとっても聞きたかったです。相当残念でした。
画像関連のデバックに適用した例のようです。来年あったら是非聞きたいです。

トラ技オフ会は、いろいろな方にお会いできて楽しかったです。トラ技3月号のOV7670の記事を書かれたエンヤ氏にもお会いできて、名刺交換をさせて頂きました。エンヤ氏によるとOV7670はプロトタイプ?でバグの多い機能はリザーブにして売っちゃえーと言うことで発売されたCMOSカメラじゃないか?ということでした。とっても面白く聞かせて頂きました。そうですよね。私も他のオムニビジョン社のCMOSカメラを使ってますが、デフォルトの状態でちゃんと絵が出てました。こんなに苦労させられたのOV7670だけですよ。。。
あと、PICで作ったゼビウスと色に追従するサーボがついて動くカメラを作った方やaitendo のOV7670の参考回路通りに作られた方などがいらして、濃い話をさせたいただきました。ありがとうございました。面白かったです。
  1. 2012年05月11日 05:53 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:0

XPS13.1入のISE13.4プロジェクトをISE14.1に変換

今回は、ISE13.4の”AXI4マスタIPの作製3(インプリメント)”で作ったXPSが入っているプロジェクトをISE14.1に変換してみた。
ISE14.1を立ちあげて変換ダイアログが出てくるので変換をした。XPSも立ちあげて変換したが、やはりIPのバージョンが変更されているようだ。無事に変換できたと思って、インプリメントしてみたところ、エラーが出てしまった。
ISE141_1_120510.png

ERROR:EDK:4070 - INSTANCE: clock_generator_0, PORT: PSDONE - invalid port in use
when ISVALID="(C_CLKOUT15_VARIABLE_PHASE || C_CLKOUT14_VARIABLE_PHASE ||C_CLKOUT13_VARIABLE_PHASE || C_CLKOUT12_VARIABLE_PHASE ||C_CLKOUT11_VARIABLE_PHASE || C_CLKOUT10_VARIABLE_PHASE || C_CLKOUT9_VARIABLE_PHASE || C_CLKOUT8_VARIABLE_PHASE ||C_CLKOUT7_VARIABLE_PHASE || C_CLKOUT6_VARIABLE_PHASE |
|C_CLKOUT5_VARIABLE_PHASE || C_CLKOUT4_VARIABLE_PHASE || C_CLKOUT3_VARIABLE_PHASE || C_CLKOUT2_VARIABLE_PHASE ||C_CLKOUT1_VARIABLE_PHASE || C_CLKOUT0_VARIABLE_PHASE)" evaluates to FALSE.
Please remove the port from your design -
H:\HDL\FndtnISEWork\Spartan6\Atlys\Atlys_XPS_CDC_SVGA_141\system.mhs line 167


system.mhs の167行目は”BEGIN clock_generator”だった。clock_generator の部分の記述を下に示す。

BEGIN clock_generator
PARAMETER INSTANCE = clock_generator_0
PARAMETER HW_VER = 4.03.a
PARAMETER C_EXT_RESET_HIGH = 0
PARAMETER C_CLKIN_FREQ = 100000000
PARAMETER C_CLKOUT0_FREQ = 600000000
PARAMETER C_CLKOUT0_GROUP = PLL0
PARAMETER C_CLKOUT0_BUF = FALSE
PARAMETER C_CLKOUT1_FREQ = 600000000
PARAMETER C_CLKOUT1_PHASE = 180
PARAMETER C_CLKOUT1_GROUP = PLL0
PARAMETER C_CLKOUT1_BUF = FALSE
PARAMETER C_CLKOUT2_FREQ = 100000000
PARAMETER C_CLKOUT2_GROUP = PLL0
PARAMETER C_CLKOUT3_FREQ = 40000000
PARAMETER C_CLKOUT3_GROUP = PLL0
PORT LOCKED = proc_sys_reset_0_Dcm_locked
PORT CLKOUT2 = clk_100_0000MHzPLL0
PORT RST = RESET
PORT CLKOUT0 = clk_600_0000MHzPLL0_nobuf
PORT CLKOUT1 = clk_600_0000MHz180PLL0_nobuf
PORT CLKIN = GCLK
PORT PSDONE = clock_generator_0_PSDONE
PORT CLKOUT3 = clock_generator_0_CLKOUT3
END


”PORT PSDONE = clock_generator_0_PSDONE”を削除した。
ISE141_2_120510.png

この状態でXPSでProjectメニューからDesign Rule Check を行ったところ、問題は無くなったようだ。
ISE141_3_120510.png

XPSを閉じて、もう一度、Project Navigator でインプリメントを行ったところ動作した。
ISE141_4_120512.png

このプロジェクトでのISE13.4からISE14.1へのプロジェクト変換では、完全には変換できずに手動による変換が必要だった。
  1. 2012年05月10日 05:21 |
  2. Xilinx ISEについて
  3. | トラックバック:0
  4. | コメント:0

ISE14.1の新機能についてのツイート

今日ツイートしたISE14.1の新機能についてのツイートのまとめです。

ISE14.1の新機能、PlanAhead にModelSim, Questa を統合可能。XPSが統合された。Zynq-7000 EPP サポート。ザイリンクス SDK を無償で提供 (FlexLM ライセンスチェ ックを削除)。

・SDKはISE WebPACKでも使えるようになったらしいです。このWebページでも、ソフトウェア開発キットにチェックついてます。嬉しいですね。これで、MicroBlaze MCSが存分に使えますね。

・追加情報。ISE14.1 WebPACKでもPlatform Studioが、最小 3 種類のZynq デバイス に限り使えるそうです。ZynqはWebPACKでも可能ですね。これで安いZynqボードが出れば人気が出そうです。ISE WebPACK 開発ソフトウェア

・AXI Performance Monitor がIPとして増えてる。”システムの特定のマスター/スレーブ (AXI4、AXI4-Lite、AXI4-Stream) のバスレイテンシ、特定期間のメモリトラフィック量、その他のパフォーマンス基準を計測”、これは使えそうだ。

(追加)
・後はChipScopeがWebPACKでも使えると完璧なんですけど。。。それは無理かな?

・AltiumのソフトJTAGみたいに、外部端子に出力するChipScopeのようなものを作れないかな?フリーで。Arduinoなどで受けてパソコンに表示できたら良いと思う。コア接続になるけど。そうじゃない方法も取れるか。。。これは良いかも?考えてみよう。2度手間になるけどね。
  1. 2012年05月09日 19:13 |
  2. Xilinx ISEについて
  3. | トラックバック:0
  4. | コメント:0

ISE14.1が出ています

ISE14.1が出ています。Xilinxのダウンロードサイトからダウンロードすることが出来ます。

2012/05/09 04:35 ダウンロード中 2.4/5.9GB(残り30分)(Windows フルインストーラ)
2012/05/09 05:08 ダウンロード終了。インストールします。
2012/05/09 06:02 インストール終了。
  1. 2012年05月09日 04:36 |
  2. Xilinx ISEについて
  3. | トラックバック:0
  4. | コメント:0

AXI4バスでDVI表示回路を作る(仕様の検討)

(2012/05/09:ブログを書き換えました)

最終的に作りたいのはAtlysボードのステレオカメラのどちらか、もしくは両方からカメラ画像をDDR2 SDRAMにWriteして、カメラデータをDVI表示回路で表示するシステムだ。しかし、CMOSカメラ(アプティナ社のMT9D112)は使用するのが難しいので、DVI表示回路はしっかり動作するものを使いたい。カメラ制御用のI2C回路は私の作ったのはWriteだけだったが、MT9D112を制御するためにはReadも必要ということがあって、DVI表示回路を先に作ることにした。
DVI表示回路を先に作っても、表示するものがないとDDR2 SDRAMの初期値のパターンを表示しているだけとなり、表示させても正しのかどうかわからない。そこで、キャラクタ・ディスプレイ・コントローラのキャラクタROMをAXI4 Lite Slave として実装し、MicroBlaze を使用してソフトウェアでキャラクタROMを読んでビデオメモリ上にキャラクタのラスタデータを書いていこうと思う。
DVI表示回路が目標とする当初の画像サイズはVGAサイズとするが、1600X1200でも耐えられるような非同期FIFOの容量とする。PLBバスでカメラ表示回路を作ってあるので、これを流用することにする。
  1. 2012年05月08日 05:51 |
  2. AXI4 Master IPの作製
  3. | トラックバック:0
  4. | コメント:0

つくば市の竜巻

日曜日の午後12時40分ころ竜巻が家の近くを駆け抜けて行きました。同じつくば市の北条ほどではありませんが、この辺にも爪痕を残していきました。
電柱は倒れて、停電になりました。電気は月曜日の午後まで、まる1日以上来なかったです。この辺は簡易水道で共同でポンプで地下水を汲み上げて使っているので、断水もおまけについて来ました。去年の地震の時のような状況でした。余震がないだけマシですけど。。。
家から直線距離で約600mくらいのところです。電柱が折れています。青い線は垂れた電線です。壊れた瓦が散乱しています。
tornado_1_120507.jpg

この辺では、母屋自体が飛ばされたり、屋根が飛ばされることはなかったですが、物置の屋根が飛ばされたりしました。屋根が飛ばされて電線に引っかかっていました。
tornado_2_120507.jpg

また、信号機が根本から倒れているところがありました。こんな風に倒れるなんて思っても見ませんでした。
tornado_3_120507.jpg

同じ所を引いてみるとこんな感じです。梨畑のネットが飛んでしまって絡まっています。
tornado_4_120507.jpg

民家も瓦が飛んで粉々だったり、窓ガラスが皆割れていたりひどい状況でした。不思議なのは、瓦屋根の瓦が屋根の上で割れていました。吸い上げられたのが落ちたんでしょうか?民家の状況は申し訳なくて写真に取れませんでした。
うちの娘2人が竜巻の様子を見ていたんですが、一旦、大砂あたりで消えたように見えたそうです。竜巻は弱まったりしながら、北条付近で強力になったのかもしれません。

気象庁から日曜日の午後12時38分ころ竜巻注意情報が出たみたいですが、テレビに竜巻注意情報が出て、直ぐに電源が切れました。竜巻注意情報が出た時はもうすでに竜巻が猛威を振るっていたのではないでしょうか?もっと早く、竜巻ルートに警報で退避命令が出ていたら?と思います。

家の停電は午後4時ころ終わって、電気が来ました。1日と3時間くらい停電していました。停電が終了した時は、やっと電気と水が来て文明生活が戻って来たと感じました。蛇口をひねると水が出ると言うことはどんなに嬉しいことか?また、部屋が全てとっても明るいということはどんなに嬉しいことか?とっても嬉しいです。。。
tornado_5_120507.jpg

  1. 2012年05月07日 21:26 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:5

トラ技オフ会用のSpartan-3A Starter Kit のステレオカメラボード

トラ技オフ会で”Spartan-3A Starter Kitによる画像演奏装置2(MTM06出品)”をもう一度やってみようとしている。

LSI/FPGAの回路アーキテクチャ設計法 2012年 06月号でRGB-HSV変換を知ったので、HSVに変換して肌色判定をしてみようとした。

・だが、肌色を検出するだけならば、Blueで他の色を正規化(黄色人種はR>G>Bだと思われるので)して、その値で閾値を設定すればよいのでは?と思った。

・CMOSカメラで肌色を写した時のRGBの値を観測したが、CMOSカメラのAuto GAINをONにしておくと、照明の関係でいろいろな値になってしまう。逆光では手は殆ど真っ黒だ。

・いろいろな状況で肌色に対応しようとすると、パラメータの対応範囲を広くする必要がある。Blueで他の色を正規化を行わずに、(殆どBlueとGreenの値が同じ時もあった)現在の四角範囲積算値比較でやってみることにした。

・結果は、夜にカーテンを閉めれば、黒く見える手でも肌色判定ができたが、昼間にカーテンを開けて逆光になると、肌色判定が出て、音が鳴り続けてしまう。やはり判定を甘くしてしまったからだ。

・前から考えていたことではあるが、カメラ側から照明で照らしたほうが、値の判定が楽だと思った。

USB接続 8LEDクリップライト を注文した。LED懐中電灯で照らした結果からは、Blueの値が増えたので、パラメータを調整する必要があるかもしれない。

・これで、照らされた手の明るさがある程度一定になれば、現在の四角範囲積算値比較でも行けるかもしれない。


最後にステレオカメラボードを搭載し、自作アクリスケースを身にまとったSpartan-3A Starter Kitの写真を下に示す。
Spa3A_Kit_w_SCB_120506.jpg

  1. 2012年05月06日 04:49 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:0

最後の田植え

今日は奥さんの実家に田植えの手伝いに行って来ました。最初は順調だったんですが、5条植えの田植機の2条分が壊れてしまって3条植えになってしまいした。結果、手植えが増えて大変でした。毎年、奥さんの実家に田植え手伝いに行ってたんですが、今年が最後だそうです。息子さんは私の勤めている大学の卒業生(なんと実験の面倒を見ていたようです)ですし、大手ソフト会社に就職しています。機械も壊れてきているそう(新たに購入するには1000万円単位でお金がかかるそうです)で、歳も取ってきたので、この辺が潮時だそうです。残念ですが、仕方がないということです。実は私も親の職業のうどん製造業を継がないで廃業となりました。昔は乾麺を作る手伝いや焼きそばの袋詰めとかを手伝ってました。広い麺帯をロールで伸ばしていって、最後に溝のあるロールで伸されて、細いうどんになってました。溝付きロールは、面白いことに四角い麺は四角い溝なんですが、断面が丸い麺は、殆ど三角の溝でした。微妙なテーバーが付いていたかどうかは知りません?

実は今、親父が3ヶ月くらい腎臓病で入院しています。やっと数値が良くなって、まもなく退院か?と思っていたのですが、一昨日辺りに足の傷から感染症になって、皮膚が部分的に壊死してしまったようです。腎臓病を直すためにステロイド剤を投与されていたので、免疫が弱って、菌にやられてしまったようです。もしかすると5月10日のトラ技オフ会に行けないかもしれません。
  1. 2012年05月05日 21:26 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:4

FPGAの部屋のまとめサイトの更新(2012/05/03)

FPGAの部屋のまとめサイトを更新しました。

2012年5月3日までの記事を記事のリンクを追加し、MicroBlaze MCSAXI Slave IPコアの作製DVI, HDMIエレキジャック・フォーラムのページを追加しました。

  1. 2012年05月03日 19:26 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:6

トラ技オフ会に参加します

5月10日にトラ技オフ会「カメラで作ったセンサを持ち寄ろう」に参加します。今回はOV76705のステレオカメラボードOV9655のステレオカメラボードを持って行きます。
アナグリフの赤青立体視サンプルを持って行きます。また、今まで作った”Spartan-3A Starter Kitによる画像演奏装置2(MTM06出品)”と”画像テルミン2”もステレオカメラボード用に変更して持って行こうと思っています。現在修正中です。全部は見せられないかもしれませんが...

現在、OV9655のSXGA表示するだけの回路をステレオカメラボード用に変更したのですが、2台のカメラモジュールの特性がかなり違うみたいです。購入した時期が違うので、もしかしてデフォルト値がどこか違うとか?あるのかもしれません?いずれにせよ。OV9655OV7670よりも感度が低いみたいです。AtlysボードのステレオカメラボードのMT9D112の方がものすごく優秀なカメラモジュールです。今度はこれを使ってみようと思っています。このカメラはSoCで、いろいろな画像エンジンが詰まっていて使うのが難しいです。

当日は、午後に違うセミナに参加してからトラ技オフ会に行くので、少し遅れるかもしれません。参加される方よろしくお願いします。
  1. 2012年05月02日 05:09 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:0