FC2カウンター FPGAの部屋 2013年07月
fc2ブログ

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

FPGAの部屋

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

Vivado チュートリアル Designing with IP Lab1 1(FIFOコアの生成)

前に、Vivado IP Integrator のチュートリアルをやったが、今度は、Vivado Design Suite Tutorial Designing with IP UG939 (v 2013.2) June 26, 2013 をやっていこうと思う。カスタムIPの作り方も書いてあると思う。

まずは、Lab1 からやってみたい。

注:ライセンスの懸念からデザインファイルを使用していない。ブログを読んでいる方は、Xilinxのダウンロードサイトから ug939-design-files.zip をダウンロードしてやられたほうが良いと思う。

Lab 1: Designing with the IP Catalog

Step 1: Opening the Project

1.Vivado を立ち上げた。

2.Open Example Project から Wave (HDL) を選択した。
UG939_1_130731.png

3.Wave のプロジェクトが立ち上がった。Project is Read-Only というダイアログが出ている。OKボタンをクリックした。
UG939_2_130731.png

4.File メニューから Save Project As... を選択した。
UG939_3_130801.png

5.Save Project As ダイアログが出てくるので、適当なところにセーブした。
UG939_4_130801.png

6.これで、通常のセーブできるプロジェクトになったので、チュートリアルを進める事ができる。
UG939_5_130801.png

Step 2: Customizing the FIFO Generator

最初に、Example Project には、これから生成する char_fifo が入っているので、一旦、char_fifo を削除します。

・Source ウインドウの IP Sources をクリックして、char_fifo をクリック。右クリックメニューから Remove File from Project... を選択した。
UG939_7_2_130801.png

・Remove Sources ダイアログが出るので、Also delete the project local file/directory from disk にチェックを入れて、OKボタンをクリックした。
UG939_7_3_130801.png

・char_fifo が消去できた。
UG939_7_4_130801.png


7.Project Navigator ウインドウの Flow Navigator から IP Catalog を選択した。
UG939_6_130801.png

8.Vivado 上に IP Catalog が表示された。
UG939_7_130801.png

9.Search ボックスに fifo と入力した。fifo のキーワードの付いたIPが選択された。

10.Memories & Storage Elements -> FIFOs から FIFO Generator を選択した。
UG939_8_130801.png

11.右クリックメニューから Customize IP... を選択した。
UG939_9_130801.png

12.Customize IP ダイアログが開いた。
UG939_10_130801.png

13.左上の、Show disable ports にチェックを入れると、IPで使用可能なすべてのポートが表示された。
UG939_11_130801.png

14.マウスの左ボタンのドラックで拡大することができる。
UG939_12_130801.png

15.拡大後。
UG939_13_130801.png

16.Show disable ports のチェックを外すと元に戻る。

17.Documentaion をクリックすると、Product Guide などを見ることができる。
UG939_14_130801.png

18.IP Location をクリックすると、IPのフォルダのいちが表示される。
UG939_15_130801.png

19.Switch to Defaults をクリックすると、デフォルト設定に戻すことができる。
UG939_16_130801.png

20.実際に、Switch to Defaults をクリックするとダイアログが出てくる。
UG939_17_130801.png

21.Component Name に、char_fifo を入れて、Interface Type は Native に、Fifo Implementaion を Independent Clocks Block RAM とした。
UG939_18_130801.png

22.結果。
UG939_19_130801.png

23.Native Ports をクリックして、Read Mode で First Word Fall Through のラジオボタンをクリックした。

24.Data Port Parameters でWrite Width に 8 をセットした。

25.Read Width をクリックすると、8 に自動変更された。
UG939_20_130801.png

26.Status Flags タブをクリックした。
UG939_21_130801.png

27.Data Counts タブをクリックした。
UG939_22_130801.png

28.Summary タブをクリックした。OKボタンをクリックした。
UG939_23_130801.png

29.Generate Output Products ダイアログが開いた。Generate ボタンをクリックした。
UG939_24_130801.png

30.TCLスクリプトで、IPのカスタマイズやIPのデザインへの付加が行われているようだ。下で、Tcl commands タブをクリックするとTCLスクリプトの実行の様子が見える。

・create_ip コマンドは、IPを現在のプロジェクトに付加する。

・set_property コマンドは、ダイアログで設定したいろいろなコンフィギュレーションのオプションを定義する。

・generate_target コマンドは、IPコアを生成する。
UG939_25_130801.png

Vivado チュートリアル Designing with IP Lab1 1(FIFOコアの構成)”に続く。
  1. 2013年07月31日 05:30 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

AXI VDMAのシミュレーション10(シミュレーション成功)

前の記事は、”AXI VDMAのシミュレーション9(v_axi4s_vid_outの変更)

前回は、v_axi4s_vid_out のMPDファイルを変更して、AXI4-Stream のデータバス幅を24ビット幅から32ビット幅に変更した。
今回は、カメラ・インターフェース回路のmt9d111_inf_axi_stream のデータバス幅を24ビット幅から32ビット幅に変更する。また、v_axi4s_vid_out の vtg_sync が AXI VDMA の mm2s_fsync に接続されているが、この信号は出力されないそうなので、custom_vtc に vtg_sync を新設して、その信号を AXI VDMA の mm2s_fsync に接続する。AXI VDMAの C_USE_FSYNC パラメータがデフォルトの 1 の場合は、” Both channels in frame sync mode”で fsync を入れないとDMA転送がスタートしない。

最初に、mt9d111_inf_axi_stream.vhd の m_axis_tdata を出力するコードが手抜きだった。
最初のコードを下に示す。

m_axis_tdata <= pfifo_dout(23 downto 0);


データ幅24ビット限定のコードだったが、下のようにパラメータで変更できるように修正した。

    m_axis_tdata(23 downto 0) <= pfifo_dout(23 downto 0);
    DATA_WIDTH_EXTENTED : if C_M_AXIS_DATA_WIDTH>24 generate
        m_axis_tdata(C_M_AXIS_DATA_WIDTH-1 downto 24) <= (others => '0');
    end generate DATA_WIDTH_EXTENTED;


これで、mt9d111_inf_axi_stream_0 の XPS Core Config ダイアログの Master Stream Data Width を 32 にすれば、AXI4-Stream のデータバス幅が32ビットとなる。
VDMA_test_30_130730.png

次に、custom_vtc.v に vtg_sync 出力ポートを追加した。

    // vtg_sync 出力
    always @(posedge vclk) begin
        if (reset)
            vsyncx_node_1d <= 1'b0;
        else 
            vsyncx_node_1d <= vsyncx_node;
    end
    
    always @(posedge vclk) begin
        if (reset)
            vtg_sync_node <= 1'b0;
        else if (vsyncx_node == 1'b1 && vsyncx_node_1d == 1'b0)    // falling edge
            vtg_sync_node <= 1'b1;
        else
            vtg_sync_node <= 1'b0;
    end
    assign vtg_sync = vtg_sync_node;


custom_vtc.v の vtg_sync 出力を AXI VDMA の mm2s_fsync にXPS上で接続した。

後は、AXI VDMAの設定レジスタを設定後に、mm2s_fsync と s2mm_fsync が AXI VDMA に入力されるように回路を調整した。

これでシミュレーションを行ったところ、AXI4-Stream のデータバス幅が24ビットの時の AXI VDMAの m_axis_mm2s_tdata, m_axis_mm2s_tkeep, m_axis_mm2s_tuser が 'X' になる状況は改善され、シミュレーションが正常に行えるようになった。
AXI VDMA の AXI4-Stream のデータバス幅が24ビットに設定できるが、そのためのHDLコードが実装されていない気がする?

やっと実験ができるようになって嬉しい。下にシミュレーション波形を示す。下の波形は、AXI VDMA へのレジスタ設定用 AXI4 Lite アクセスを示す。約 7 usec でレジスタ設定は終了している。
VDMA_test_31_130730.png

次に、MM2Sを見ていこう。約 53 usec で mm2s_fsync が入って、AXI4 Master ReadをAXI VDMAが行ない、AXI4 Stream にデータを出力している。なお、シミュレーションのタイムスケールは変えていない。
VDMA_test_32_130730.png

最後に、S2MMを見ていこう。約 30 usec で、s2mm_fsync が入って、AXI4 Stream からカメラのデータが入ってくるので、それを AXI4 Master でメモリに書き込んでいる。
VDMA_test_33_130730.png

これで、シミュレーションがうまくいくことが分かったので、AXI VDMA の動作を調査しようと思う。

#追加。ツイッターでの私のつぶやきです。
・AXI VDMA はMM2S のAXI4 Masterアクセスで、6個ずつアドレス転送を投げている。やはり、AXI4バスはこうでないとね。。。

・バースト幅は16バーストだ。AXI3のためかな?

・あれ?なんでだろう。インターコネクトかな?案外、スループットが上がらないぞ?

・わ~。楽しい。いろいろとXilinx のIPの動きが丸見えだ。。。このシミュレーションからいろいろなことが分かりそうだ。苦労した甲斐があったね。。。

・う~ん。MM2Sの方は、アドレス転送を6個連続投入しているんだから、このスループットが現在のスループットということで良いと思う。

・MM2Sでスループットの4割くらいしか使えてないのはなぜだろうか? AXI Interconnect の設定なのか?

・見ていても飽きないね。シミュレーションがとっても面白い。

・S2MMのAXI Master Write のバーストは、1つのアドレス転送に対して、1つのデータ転送で、アドレス転送を連続投入はされていない。カメラのデータレートが遅くて、帯域をあまり使っていないからだね。

・メモリモジュールは、デュアル・ポート・メモリになっているから、DDR3とかよりスループット出るね。より実際のシステムに近づけるためには、Write とReadを排他的にする必要があるか。。。

AXI VDMAのシミュレーション11(シミュレーション成功2)”に続く。
  1. 2013年07月30日 04:57 |
  2. IP
  3. | トラックバック:0
  4. | コメント:0

Vivado IP Integrator のチュートリアル(Lab2)2(Vivado Logic Analyzer)

Vivado IP Integrator のチュートリアル(Lab2)1(SDK)”の続き。

Step 3: Connectto the Vivado Logic Analyzer

26.Vivado の Flow Navigator から Program and Debug -> Open Hardware Session を選択する。
Vivado_IP_Integrator_106_130727.png

27.Hardware Session が開いて、Vivado のGUI が変わってしまった。Open a new hardware target をクリックする。
Vivado_IP_Integrator_107_130727.png

28.New Hardware Target ダイアログが開く。Next>ボタンをクリックした。
Vivado_IP_Integrator_108_130727.png

29.Vivado CSE Server Name を聞かれた。デフォルトのままでNext>ボタンをクリックした。
Vivado_IP_Integrator_109_130727.png

30.Hardware Targetを聞かれる。ZedBoardは登録されていないのか? unknown と出てきてしまう。Next>ボタンをクリックした。
Vivado_IP_Integrator_110_130727.png

31.Hardware Target のFREQUENCY を聞かれるが、デフォルトの6MHzで行くことにした。Next>ボタンをクリックした。
Vivado_IP_Integrator_111_130727.png

32.Open Hardware Target Summary が表示された。Finishボタンをクリックした。
Vivado_IP_Integrator_112_130727.png

33.Hardware ウインドウが表示された。
Vivado_IP_Integrator_113_130727.png

34.Hardware ウインドウで、e Run Trigger Immediate アイコンをクリックした。
Vivado_IP_Integrator_114_130727.png

35.hw_ila_data_1.wcfg が表示された。トリガを掛けていないので、何も表示されていない。
Vivado_IP_Integrator_115_130727.png

36.axi_WVALID のCompare Value をクリックして、Value を 1 に変更した。つまり、axi_WVALIDが 1 になった時にトリガが掛かる。
Vivado_IP_Integrator_116_130727.png

37.axi_WVALID のCompare Value が 1 になった。
Vivado_IP_Integrator_117_130727.png

38.hw_ila_1 の Trigger Pos を 512 に設定する。これで、トリガが掛かった位置が波形の真ん中に来る。
Vivado_IP_Integrator_118_130727.png

39.トリガを設定したので、Hardware ウインドウで、Run Trigger アイコンをクリックして、キャプチャを開始する。
Vivado_IP_Integrator_119_130727.png

40.Hardware ウインドウの hw_ila_1 が Capturing になった。
Vivado_IP_Integrator_120_130727.png

41.SDK に戻り、Resume アイコンをクリックして、ブレークポイントまで進める。
Vivado_IP_Integrator_121_130727.png

42.99行目のブレークポイントまで進んだ。GpioOutputExample() を実行すると、AXIバス・アクセスが発生するので、その先の103行目にブレークポイントを設定する。
Vivado_IP_Integrator_123_130727.png

43.Resume アイコンをクリックして、103行目のブレークポイントまで進める。
Vivado_IP_Integrator_124_130727.png

44.Vivado を見ると、トリガが掛かって、波形が hw_ila_data_1.wcfg に表示された。
Vivado_IP_Integrator_125_130727.png

45.3つのAXI Write アクセスが発生している。AWBURST やAWPORT などの信号は入っていないけど、どうなんだろうか?入らないのか?
Vivado_IP_Integrator_126_130727.png

46.今のブレークポイントまでのTera Term の表示を示す。
Vivado_IP_Integrator_127_130727.png

47.最後までソフトウエアを走らせた時のTera Term の表示を示す。
Vivado_IP_Integrator_128_130727.png
  1. 2013年07月28日 07:25 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:5

Vivado IP Integrator のチュートリアル(Lab2)1(SDK)

Vivado IP Integrator のチュートリアル(Lab1)8(Export Hardware to SDK)”の続き。

Step 1: Start SDK and Create a Software Application

チュートリアルでは、SDKをスタートメニューから立ち上げているが、現在SDKが立ち上がっているので、このSDKを使ってチュートリアルを進めることにする。

・ peripheral tests applicationを生成する

1.SDKのFile メニューから New -> Application Project を選択した。
Vivado_IP_Integrator_83_130727.png

2.New Project ダイアログが開いた。Project Name に Zynq_Desgin と入力して、Next>ボタンをクリックした。
Vivado_IP_Integrator_84_130727.png

3.Peripheral Tests を選択した。Finishボタンをクリックした。
Vivado_IP_Integrator_85_130727.png

4.Build が終了した。Project Explorer に Zynq_Degin と Zynq_Desgin_bsp が見える。
Vivado_IP_Integrator_86_130727.png

Step 2: Run the Software Application

・ZedBoardの電源をONにする。

・JTAG の設定は、Auto Detect なので省略。

5.Xilinx Tools メニューから Program FPGA を選択して、Zynq にビットストリームをコンフィギュレーションする。
Vivado_IP_Integrator_87_130727.png

6.Lab1で作った回路をPLLにコンフィギュレーションするために、Program ボタンをクリックした。
Vivado_IP_Integrator_88_130727.png

7.プログレスバーが進んでいって、FPGAをプログラムしている。
Vivado_IP_Integrator_89_130727.png

8.FPGAのプログラムが終了して、ZedBoard の青色LEDのDONEランプが点灯した。

9.Project Explorer の Zynq_Degin を右クリックして、右クリックメニューから Debug As -> Debug Configurations を選択した。
Vivado_IP_Integrator_90_130727.png

10.Xilinx C/C++ Application (GDB) を右クリックして、New を選択した。
Vivado_IP_Integrator_91_130727.png

11.Debug ボタンをクリックした。
Vivado_IP_Integrator_92_130727.png

12.パースペクティブをデバック用に変更するというダイアログが出る。Yesボタンをクリックした。
Vivado_IP_Integrator_93_130727.png

13.パースペクティブをデバック用に変更された。デバックが開始され、最初のCソースの位置を表示している。
Vivado_IP_Integrator_94_130727.png

14.一番下のウインドウで、Terminal 1タブをクリックして、Settings アイコンをクリックした。
Vivado_IP_Integrator_95_130727.png

15.Terminal Settings ダイアログが開く。だが、Port が設定できない。
Vivado_IP_Integrator_96_130727.png

16.デバイス マネージャーで見ると、ポートに Cypress Serial (COM3) がみえているので、これが設定できないとおかしいはず。。。
Vivado_IP_Integrator_97_130727.png

17.代わりにTera Termを使うことにした。Tera Termを起動して、シリアルポートのラジオボタンをクリックして選択した。COM3が選ばれている。
Vivado_IP_Integrator_98_130727.png

18.Tera Termの設定メニューからシリアルポートを選択して、設定を行った。
Vivado_IP_Integrator_99_130727.png

19.Cソースのウインドウをクリックしてから、Navigate メニューから Go to Line... を選択した。
Vivado_IP_Integrator_100_130727.png

20.チュートリアルの通りに 104 を入力して、OKボタンをクリックした。
Vivado_IP_Integrator_101_130727.png

21.104行目は違う行だった。ブレークポイントを設定する行は、ピンクのアンダーラインの行だ。
Vivado_IP_Integrator_102_130727.png

22.代わりにCソース・ウインドウに行番号を表示してみよう。Window メニューからPrefereces を選択する。
Vivado_IP_Integrator_103_130727.png

23.Generalを展開して、Editors を展開、Text Editors をクリックする。

24.Show line numbers にチェックを入れて、OKボタンをクリックした。
Vivado_IP_Integrator_104_130727.png

25.そうすると行番号が表示できた。99行目の行番号表示の左側をクリックして、ブレークポイントを設定した。
Vivado_IP_Integrator_105_130727.png
  1. 2013年07月27日 07:10 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

Vivado IP Integrator のチュートリアル(Lab1)8(Export Hardware to SDK)

”Vivado IP Integrator のチュートリアル(Lab1)7(インプリメント)”の続き。

Step 8: Export Hardware to SDK

・最初にSynthsis と Implementation の Out of Date が出ていたので、Generate Bitstream まで再度実行した。

80.Flow Navigator で Open Block Desgin をクリックした。
Vivado_IP_Integrator_78_130726.png

81.zynq_design_1.bd と表示されたので、それをクリックした。
Vivado_IP_Integrator_79_130726.png

82.File メニューのExport -> Export Hardware for SDK... を選択した。
Vivado_IP_Integrator_80_130726.png

83.Export Hardware for SDK ダイアログが出た。Launch SDKをチェックして、OKボタンをクリックした。
Vivado_IP_Integrator_81_130726.png

84.SDKが立ち上がった。
Vivado_IP_Integrator_82_130726.png
  1. 2013年07月26日 05:32 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

Raspberry Pi にCamera を付けてOpenCVで顔認識

Raspberry Pi Camera が来ました”に書いたRaspberry Pi Camera を使ってみようとしていたら、日経Linux 2013年8月号に、Raspberry Pi + カメラモジュール + OpenCVで顔認識の記事があると知って購入しました。そして、確かめてみましたが、結論から言うとエラーが出て顔認識に失敗しました。

まずは、Raspberry Pi にカメラモジュールを取り付けました。これはコネクタに挿すだけで簡単です。
RasPi_Camera_1_130726.jpg

日経Linux 2013年8月号に従って設定をしていきました。
”raspistill -o imagae.jpg”コマンドを使って写真を取ることが出来ました。
RasPi_Camera_2_130726.jpg

更にOpenCV をインストールして設定を続けていきます。かなり面倒だったです。
さて、顔認識データを作製するところに来ました。/opt/vc/photo/prepare コマンドを使います。
ここで私の顔はなかなか顔として認識出来ませんでした。5回目でメガネを外し、バックを白一色にしてやっと認識してくれました。
下の写真が、顔認識データを作製するための顔写真です。恥ずかしいので眼の部分はぼかしてあります。
image_130725.jpg

これを、/opt/vc/photo/prepare コマンドを実行すると
RasPi_Camera_3_130726.jpg

pic1.jpg が出来ました。
pic1_130725.jpg

これで、camcvWin を起動して顔認識しようとしましたが、下のようなエラーが出て失敗しました。
RasPi_Camera_4_130726.jpg

残念です。でも、自分の顔が人間の顔として認識されて良かったです。人として認められた気がしました。何回も失敗したので、人の顔じゃないのか?と落ち込んでいたので、とっても嬉しかったですよ。。。
  1. 2013年07月26日 04:18 |
  2. マイコン関連
  3. | トラックバック:0
  4. | コメント:1

AXI VDMAのシミュレーション9(v_axi4s_vid_outの変更)

AXI VDMAのシミュレーション8(とりあえず休止)”の続き。

v_axi4s_vid_outのソースを読んでみたところ、s_axis_video_tdata のデータ幅を24ビットから32ビットに簡単に変更できそうだったので、やってみることにした。

・v_axi4s_vid_out IPコアのソースをローカルのpcores フォルダにコピーして変更できるようにする。

・v_axi4s_vid_out_0 を右クリックして、右クリックメニューから Make This IP Local を選択する。
VDMA_test_18_130724.png

・IPをローカル・プロジェクトのpcores フォルダにコピーするというダイアログが出る。OKボタンをクリックした。
VDMA_test_19_130724.png

・IP Catalog のProject Loacl PCores にVideo and Image Processing が出来て、その下にAXI4-Stream to Video Out が表示された。
VDMA_test_20_130724.png

・プロジェクトの pcores フォルダを見たところ、v_axi4s_vid_out_v2_01_a フォルダができていた。
VDMA_test_21_130724.png

・MUIファイルを見ると、VID_OUT_DATA_WIDTH と C_S_AXIS_VIDEO_TDATA_WIDTH が Hidden の方に入っていた。この2つはAdd IPの時のダイアログに表示されていない。
VDMA_test_22_130724.png

・VID_OUT_DATA_WIDTH と C_S_AXIS_VIDEO_TDATA_WIDTH の2つを General に移動した。これで、ダイアログに表示されるはずだ。
VDMA_test_23_130724.png

・Project メニューから Rescan User Repositories を実行した。

・v_axi4s_vid_out_0 をダブルクリックして、ダイアログを表示したところ、、Video Output Data Width (VID_OUT_DATA_WIDTH) と AXI4-Stream TDATA Width (C_S_AXIS_VIDEO_TDATA_WIDTH) は 24 から変更することが出来なかった。
VDMA_test_26_130724.png

これは、MPDファイルの、”IPLEVEL_UPDATE_VALUE_PROC”と”ASSIGNMENT = UPDATE”が影響している。
VDMA_test_24_130724.png

これらの変数は、外部のTCLファイルから変更されて、ユーザーが定義することができなくなっている。よって、この項を削除すれば良い。
VDMA_test_25_130724.png

・Project メニューから Rescan User Repositories を実行した。

・・v_axi4s_vid_out_0 をダブルクリックして、ダイアログを表示したところ、Video Output Data Width と AXI4-Stream TDATA Width は 24 から変更することができるようになった。
VDMA_test_27_130724.png

・Video Output Data Width と AXI4-Stream TDATA Width を 32 に変更した。
VDMA_test_28_130724.png

・axi_vdma_0 のM_AXIS_MM2S のデータバス幅も32ビットに変更した。
VDMA_test_29_130724.png

これで、MM2Sのデータバス幅が32ビットになった。

AXI VDMAのシミュレーション10(シミュレーション成功)”に続く。
  1. 2013年07月25日 05:55 |
  2. IP
  3. | トラックバック:0
  4. | コメント:0

Vivado IP Integrator のチュートリアル(Lab1)7(インプリメント)

Vivado IP Integrator のチュートリアル(Lab1)6(Setup Debug)”の続き。

Step 7: Implement Design and Generate Bitstream

73.Flow Navigator の Program and Debug のGenerate Bitstream をクリックした。
Vivado_IP_Integrator_71_130725.png

74.No Implementation Results Available ダイアログが開く。Yesボタンをクリックした。
Vivado_IP_Integrator_72_130725.png

・synthesis out-of-date だったので、Synthesis が始まった。

75.インプリメントが終了して、Bitstream Generation Completed ダイアログが出た。Open Implemented Design のラジオボタンが選択されているので、そのままOKボタンをクリックした。
Vivado_IP_Integrator_73_130725.png

76.Synthesized Design を閉じて、Implemented Desgin を表示するというダイアログが出た。Yes ボタンをクリックした。
Vivado_IP_Integrator_74_130725.png

77.Implementation is Out-of-data ダイアログが出た。Yes ボタンをクリックした。
Vivado_IP_Integrator_75_130725.png

78.Implemented Design が開いた。Netlistウインドウを見ると、dgb_hub や u_ila_0 も見えた。
Vivado_IP_Integrator_76_130725.png

79.なお、IOのピンアサインが不安だったので、Layout メニューからI/O Planning を選択した。I/O Ports を見たところ、leds_8bits_tri_o もアサインされていた。最初にZedBoardを選択したので、ピンアサインも問題ないようだ。
Vivado_IP_Integrator_77_130725.png

Vivado IP Integrator のチュートリアル(Lab1)8(Export Hardware to SDK)”に続く。
  1. 2013年07月25日 04:23 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

Parallella-16 ボードを購入

Parallella-16ボード電源アダプタ、ケーブルを購入しました。10月に来るそうです。
Parallella-16ボードが$99 で、Zynq 7010が付いています。下に仕様を示します。

Specifications:

Xilinx Zynq®-7000 All Programmable SoC (XC7Z010) with Dual Core ARM A9 CPU
Epiphany III (16-core CPU Accelerator)
1GB DDR3 SDRAM
128Mb Quad-SPI flash
Ethernet 10/100/1000
Micro HDMI connection
Micro SD Card Slot
Micro USB 2.0 (two)
Dimensions are 3.4'' x 2.1''


GPIO無しを買いました。JTAGはソケットのパターンに出ているということなので、線でつないでJTAGケーブルを接続しようと思います。

電源アダプタ、ケーブルは$39 です。

Subtotal : $138.00 USD
Shipping : $20.00 USD
Total : $158.00 USD


でした。
  1. 2013年07月24日 05:23 |
  2. Parallella-16
  3. | トラックバック:0
  4. | コメント:6

Vivado IP Integrator のチュートリアル(Lab1)6(Setup Debug)

Vivado IP Integrator のチュートリアル(Lab1)5(Generate HDL Design Files)”の続き。

Step 5: Assign Signals to Debug

58.IP Integrator のデザインを生成したので、Flow Navigator の Run Synthesis をクリックした。
Vivado_IP_Integrator_56_130724.png

59.Save Project ダイアログが出た。Save ボタンをクリックした。
Vivado_IP_Integrator_57_130724.png

・Synthesis が始まった。

60.Synthesis が終了して、Synthesis Completed ダイアログが出た。Open Synthesized Design ラジオボタンをチェックして、OKボタンをクリックした。
Vivado_IP_Integrator_58_130724.png

61.Synthesized Design が開いた。
Vivado_IP_Integrator_59_130724.png

62.Window メニューからDebug を選択した。
Vivado_IP_Integrator_60_130724.png

63.Debug ウインドウが開いた。すべての信号が、Unassigned Debug Nets に入っていた。
Vivado_IP_Integrator_61_130724.png

Step 6: Assign Debug Net to an ILA Core

64.Debug ウインドウの左下の Set up Debug アイコンをクリックした。
Vivado_IP_Integrator_62_130724.png

65.Set up Debug ダイアログが出た。Next> ボタンをクリックした。
Vivado_IP_Integrator_63_130724.png

66.Specify Nets to Debug ダイアログが出た。ピンクの四角で囲った部分のクロック・ドメインが抜けいている。
Vivado_IP_Integrator_64_130724.png

67.Ctrl-Aを押して、すべて信号を選択する。右クリックして、右クリックメニューから Select Clock Domain を選択した。
Vivado_IP_Integrator_65_130724.png

68.Select Clock Domain ダイアログが開いた。zynq_design_1_i/processing_system7_1/FCLK_CLK0 を選択して、OKボタンをクリックした。
Vivado_IP_Integrator_66_130724.png

69.Clock Domain の空いていたところにFCLK_CLK0 が入った。Next>ボタンをクリックした。
Vivado_IP_Integrator_67_130724.png

70.Set up Debug Summary ダイアログが開いた。Finish ボタンをクリックした。
Vivado_IP_Integrator_68_130724.png

71.63.では、すべての信号が Unassigned Debug Nets に入っていたが、Assigned Debug Nets に入った。
Vivado_IP_Integrator_69_130724.png

72.Save Constraints アイコンをクリックして、デバックコアを入れた後のデザインをセーブした。
Vivado_IP_Integrator_70_130724.png

Vivado IP Integrator のチュートリアル(Lab1)7(インプリメント)”に続く。
  1. 2013年07月24日 05:14 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

Vivado IP Integrator のチュートリアル(Lab1)5(Generate HDL Design Files)

Vivado IP Integrator のチュートリアル(Lab1)4(Using MARK_DEBUG)”の続き。

Step 4: Generate HDL Design Files

52.Sourceウインドウの Design Sources の zynq_desgin_1 を右クリックして、右クリックメニューから、Generate Output Products を選択した。
Vivado_IP_Integrator_50_130723.png

53.Manage Output Productsダイアログが開いた。OKボタンをクリックした。
Vivado_IP_Integrator_51_130723.png

54.終了後のSourceウインドウの表示を示す。
Vivado_IP_Integrator_52_130723.png

55.Sourceウインドウの Design Sources の zynq_desgin_1 を右クリックして、右クリックメニューから、Create HDL Wrapper を選択した。
Vivado_IP_Integrator_53_130723.png

56.zynq_design_1_wrapper.vhd が生成されて、プロジェクトにコピーされたというダイアログが出た。OKボタンをクリックした。
Vivado_IP_Integrator_54_130723.png

57.zynq_design_1_wrapper.vhd が表示されている。leds_8bits_tri_o が8ビット出力されている。gpio_rtl は、o, t, i がそれぞれ32ビットずつある。これではZedBoard に合わない。
Vivado_IP_Integrator_55_130723.png

axi gpio を生成する所で、チュートリアルと実際にやってみたことが合わなかったが、ZedBoard に合わせて修正を試みるか?それとも一旦行けるところまで行ってから修正を試みるかを考えてみようと思う。

Vivado IP Integrator のチュートリアル(Lab1)6(Setup Debug)”に続く。

(2013/07/23:ZedBoard の選択をミスっていたので、全面的に修正した)
  1. 2013年07月23日 05:56 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

Vivado IP Integrator のチュートリアル(Lab1)4(Using MARK_DEBUG)

前の記事は、”Vivado IP Integrator のチュートリアル(Lab1)3(IP Integrator デザインの生成2)

Step 3: Using MARK_DEBUG

今回は、デバックするために、ILAコアで観察する信号をマークする。

41.processing_system7_1_axi_periph とGPIOコアの axi_gpio_1 間のAXIバスをMark Debug する。
Vivado_IP_Integrator_40_130722.png

42.Design Hierarchyビューを見ると、processing_system7_1_axi_periph_m00_axi にデバックマークが付いていた。
Vivado_IP_Integrator_41_130722.png

・デザインのタイトルを入れる。

43.IP integrator diagram の空いている所で右クリック、右クリックメニューから Create Comment を選択した。
Vivado_IP_Integrator_42_130722.png

44.Enter your comments here と出てきた。
Vivado_IP_Integrator_43_130722.png

45.”Zynq Example Design”と入力した。
Vivado_IP_Integrator_44_130722.png

46.タイトルのフォーマットを変更する場合は、タイトルを右クリックして、右クリックメニューから Format Comment を選択する。
Vivado_IP_Integrator_45_130722.png

47.Format Comment ダイアログが開いた。Text size: を 14 に設定した。
Vivado_IP_Integrator_46_130722.png

48.デザインをセーブする。File メニューから Save Block Design を選択して、IP Integrator Diagram をセーブした。
Vivado_IP_Integrator_47_130722.png

49.アドレスタブをクリックすると、AXI GPIO と AXI BRAM Controller のアドレスがマップされている。
Vivado_IP_Integrator_39_130721.png

50.Validate Designアイコンをクリックして、デザイン・ルール・チェックを行う。
Vivado_IP_Integrator_48_130722.png

51.デザイン・ルール・チェックが終了して、Validation successful が表示された。OKボタンをクリックした。
Vivado_IP_Integrator_49_130722.png

Vivado IP Integrator のチュートリアル(Lab1)4(Generate HDL Design Files)”に続く。

(2013/07/23:ZedBoard の選択をミスっていたので、全面的に修正した)
  1. 2013年07月22日 19:03 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

お祭り(電飾お神輿大集合)

昨日は午前中の内もみをしました。内もみとは、地区内をお神輿をもみながら、お祓いをしておひねりを頂くことです。午前中行います。下が内もみ中に休憩しているところの写真です。
densyoku_mikoshi_3_130721.jpg

夜は大人神輿と各地区の神輿と一緒に渡御します。賑やかですよ。下に、動画を貼っておくので、見て下さい。電飾お神輿がみものです。終わりの方で、私の作ったアクリルサインがお神輿の上で輝いているのが、見えます。しかし、もう少し大きいと良かったです。。。


お神輿の担ぎ棒の上に人が乗っています。


他のお神輿の照明は、クリスマスツリー照明用LEDだと思いますが、派手です。私のアクリルサインも、もっと派手になるように点灯プログラムを変更しようと思います。
  1. 2013年07月21日 04:57 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

Vivado IP Integrator のチュートリアル(Lab1)3(IP Integrator デザインの生成2)

Vivado IP Integrator のチュートリアル(Lab1)2(IP Integrator デザインの生成1)”の続き。

21. Vivado IP integrator diagramウインドウ内で、右クリックメニューから Add IP... を選択した。

22.ダイアログの検索フィールドに、gpi と入力すると、AXI GPIO が表示されたので、キーボードのEnter キーを押した。
Vivado_IP_Integrator_22_130720.png

23.Diagram ウインドウに、axi_gpio_1 が追加された。(ちなみに、Diagram ウインドウはフローリングにすることができる)
Vivado_IP_Integrator_23_130720.png

24.同様に、axi_bram_ctrl_1 (AXI BRAM Controller) と blk_mem_gen_1 (Block Memory Generator) を追加した。
Vivado_IP_Integrator_24_130720.png

・Customize Instantiated IP

25.blk_mem_gen_1 (Block Memory Generator) をダブルクリックして、Customize Block を行う(右クリックメニューから Customize Block を選択するのも可)

26.Re-customize IP ダイアログが開いた。
Vivado_IP_Integrator_25_130720.png

27.Basic タブで、Mode は BRAM Controller になっているので、Memory Type を True Dual Port RAM に変更した。OKボタンをクリックした。
Vivado_IP_Integrator_26_130720.png

28.blk_mem_gen_1 (Block Memory Generator) がDual Port に変更された。
Vivado_IP_Integrator_27_130720.png

・各IPをドラッグアンドドロップで移動することができる。

・axi_bram_ctrl_1 (AXI BRAM Controller) と blk_mem_gen_1 (Block Memory Generator) 間のポートを接続する。

29.axi_bram_ctrl_1 (AXI BRAM Controller) のBRAM_PORTA にカーソルを近づけると、カーソルが鉛筆型に変化するので、その状態でポートをクリックして、ドラックすると線が引ける。

30.axi_bram_ctrl_1 (AXI BRAM Controller) の BRAM_PORTAを、blk_mem_gen_1 (Block Memory Generator) のBRAM_PORTAに接続した。同様に、BRAM_PORTB同士も接続した。
Vivado_IP_Integrator_28_130720.png

・Use Block Designer Assistance

Block Designer Assistance は、AXI GPIO , AXI BRAM Controller とZynq-7000 PSの接続を補助する。

31.Run Connection Automation をクリックして、/axi_gpio_1/s_axi を選択する。
Vivado_IP_Integrator_29_130720.png

32.Run Connection Automation ダイアログが開いた。マスタとスレーブを接続するそうだ。OKボタンをクリックした。
Vivado_IP_Integrator_30_130720.png

33.proc_sys_reset や processing_system7_1_axi_periph が自動的に追加され、配線された。(凄い。。。)
Vivado_IP_Integrator_31_130720.png

34.もう一度、Run Connection Automation を選択して、/axi_gpio_1/gpio を選択した。
Vivado_IP_Integrator_32_130721.png

35.Run Connection Automation ダイアログが開いた。外部インターフェースを作るそうだ。ZedBoard のGPIO がリストされている。leds_8bits を選択して、OKボタンをクリックした。
Vivado_IP_Integrator_33_130721.png


Vivado_IP_Integrator_33_2_130721.png 

36.leds_8bits が出来た。
Vivado_IP_Integrator_34_130721.png

37.再度、Run Connection Automation を選択した。今度は、/axi_bram_ctrl_1/S_AXI を選択した。
Vivado_IP_Integrator_35_130721.png

38.Run Connection Automation ダイアログが開いた。マスタとスレーブを接続するそうだ。OKボタンをクリックした。
Vivado_IP_Integrator_36_130721.png

39./axi_bram_ctrl_1/S_AXI が接続された。
Vivado_IP_Integrator_37_130721.png

・今のプロジェクトには、AXI GPIOとAXI BRAM Controller の2つのIPが入っているが、IP Integrator は自動的にメモリマップをしてくれるそうだ

40.しかし、AXI BRAM Controller のメモリマップのRange が4k なので、64Kに修正した。
Vivado_IP_Integrator_38_130721.png

Vivado_IP_Integrator_39_130721.png

Vivado IP Integrator のチュートリアル(Lab1)4(Using MARK_DEBUG)”に続く。

(2013/07/23:ZedBoard の選択をミスっていたので、全面的に修正した)
  1. 2013年07月20日 05:31 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

Vivado IP Integrator のチュートリアル(Lab1)2(IP Integrator デザインの生成1)

Vivado IP Integrator のチュートリアル(Lab1)1(Vivado プロジェクトの生成)”の続き。

11.Flow Navigator ウインドウで、Create Block Design をクリックした。
Vivado_IP_Integrator_11_130719.png

12.Create Block Design ダイアログで、Design name を指定した。
Vivado_IP_Integrator_12_130719.png

13.zynq_design_1 のDiagram が開いた。
Vivado_IP_Integrator_13_130719.png

14.Vivado IP integrator diagramウインドウ内で、右クリックメニューから Add IP... を選択した。
Vivado_IP_Integrator_14_130719.png

15.IPを選択するダイアログが出た。Seach に zynq と入力したところ、2つの選択肢が残った。
Vivado_IP_Integrator_15_130719.png

・ちなみにチュートリアルと同じフォーマットにするには、IPを選択するダイアログのName の右の位置を右クリックして、右クリックメニューから選択すれば良いようだ。
Vivado_IP_Integrator_16_130719.png

16.ZYNQ7 Processing System を選択して、キーボードのEnter キーを押した。
Vivado_IP_Integrator_17_130719.png

17.ZYNQ7 Processing System がIPとして入った。Run Block Automation をクリックした。
Vivado_IP_Integrator_18_130719.png

18./processing_system_1 が出てきたので、それをクリックした。
Vivado_IP_Integrator_19_130719.png

19.Run Block Automation ダイアログが出た。FIXED_IO and DDR の外部インターフェースを生成するそうだ。OKボタンをクリックした。
Vivado_IP_Integrator_20_130719.png

20.FIXED_IO and DDR の外部インターフェースが生成された。
Vivado_IP_Integrator_21_130719.png

Vivado IP Integrator のチュートリアル(Lab1)3(IP Integrator デザインの生成2)”に続く。
  1. 2013年07月19日 05:07 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

電飾お神輿

電飾お神輿の写真を撮って来ました。中学生が担ぐお神輿です。
densyoku_mikoshi_130718.jpg

明るい時なので、目立たないですが、暗いと綺麗だと思います。去年作ったアクリルサインも付いていますよ。
それから、これは +5V系の電源しか入れていないので、+12V系も電源を入れるともっとド派手になります。。。

動画も貼っておきます。


また夜に撮影してきます。

(追加です)
densyoku_mikoshi_2_130720.jpg
  1. 2013年07月18日 21:52 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

Vivado IP Integrator のチュートリアル(Lab1)1(Vivado プロジェクトの生成)

Vivado IP Integrator のチュートリアルをやってみたいと思う。
参照するチュートリアルは、”Vivado Design Suite Tutorial: Embedded Processor HardwareDesignUG940 (v 2013.2) June 19, 2013”だ。
日本語の”Vivado Design Suite ユーザーガイド IPを使用した設計 UG896 (v2013.1) 2013 年 3 月 20 日”もとっても参考になるが、Zynqのチュートリアルである前者のチュートリアルをやってみたいと思う。
とりあえず、チュートリアル中の”Lab 1: Programming a Zynq-7000 Processor ”をやってみる。ZC702のチュートリアルだが、ZedBoardに変換してみたいと思う。

Lab1では、Zynq-7000の ARMプロセッサ (PS) とAXIインターコネクト経由で、GPIOとAXI BRAM Controller を使うそうだ。
使用するのは、Vivado 2013.2

1.Vivado 2013.2 を立ち上げる。

2.Create New Projectをクリックした。
Vivado_IP_Integrator_1_130718.png

3.Next > をクリックした。
Vivado_IP_Integrator_2_130718.png

4.プロジェクト名を入力して、Next > をクリックした。
Vivado_IP_Integrator_3_130718.png

5.Project Type ダイアログで、RTL Projectのラジオボタンがクリックされていることを確認して、Next > をクリックした。
Vivado_IP_Integrator_4_130719.png

6.Add Sources ダイアログで、Target language をVHDLに変更して、Next > をクリックした。
Vivado_IP_Integrator_5_130719.png

7.Add Existing IP ダイアログで、入れるものが無いので、Next > をクリックした。
Vivado_IP_Integrator_6_130719.png

8.Add Constraints ダイアログでも、入れるものが無いので、Next > をクリックした。
Vivado_IP_Integrator_7_130719.png

9.Default Part ダイアログで、Specify でBoard を選択して、下のリストからZedBoard を選択した。Next > をクリックした。
Vivado_IP_Integrator_8_130719.png

10.New Project Summary ダイアログが表示された。Finish をクリックした。
Vivado_IP_Integrator_9_130719.png

11.Vivado が立ち上がった。
Vivado_IP_Integrator_10_130719.png

Vivado IP Integrator のチュートリアル(Lab1)2(IP Integrator デザインの生成1)”に続く。

(2013/07/23:ZedBoard の選択をミスっていたので、全面的に修正した)
  1. 2013年07月18日 05:36 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

AXI VDMAのシミュレーション8(とりあえず休止)

AXI VDMAのシミュレーション7(v_axi4s_vid_out)”の続き。

いろいろとAXI VDMAのシミュレーションのために頑張ってきたが、どうやら AXI VDMAの m_axis_mm2s_tdata, m_axis_mm2s_tkeep, m_axis_mm2s_tuser が 'X' になる状況は解決できないようだ。

ISimには、信号のドライバを表示する機能がある。
信号名のところで右クリックして、Show Drivers を選択する。
VDMA_test_17_130718.png

すると、Console にその信号を出力しているHDLソースの行番号が表示される。

ISim> 
# show driver {/system_top_tb/uut/system_i/axi_vdma_0/axi_vdma_0/m_axis_mm2s_tlast}
Driver for /system_top_tb/uut/system_i/axi_vdma_0/axi_vdma_0/m_axis_mm2s_tlast
    '0'    : /system_top_tb/uut/system_i/axi_vdma_0/axi_vdma_0/:1414
          in File "C:/HDL/Xilinx/14.5/ISE_DS/EDK/hw/XilinxProcessorIPLib/pcores/axi_vdma_v5_04_a/hdl/vhdl/axi_vdma.vhd" Line 1414


だが、m_axis_mm2s_tdata と m_axis_mm2s_tkeep は no drivers と表示されている。つながっている信号がないようだ。

# show driver {/system_top_tb/uut/system_i/axi_vdma_0/axi_vdma_0/m_axis_mm2s_tdata}
/system_top_tb/uut/system_i/axi_vdma_0/axi_vdma_0/m_axis_mm2s_tdata has no drivers.
ISim>
# show driver {/system_top_tb/uut/system_i/axi_vdma_0/axi_vdma_0/m_axis_mm2s_tkeep}
/system_top_tb/uut/system_i/axi_vdma_0/axi_vdma_0/m_axis_mm2s_tkeep has no drivers.


AXI VDMAのVHDLソースを少し読んでみたが、Memory Mapped DMA のAXI Master アクセスとAXI Stream のデータバスのビット幅が同じ場合と異なる場合は、if generate を使って回路を切り分けてあるようだ。今回のプロジェクトでは、AXI Master側のデータバスが32ビット幅、AXI Stream 側のデータバスが24ビット幅というように幅が異なっている。この場合にバグがある、もしくはISimがうまくエラボレート出来ていないということが考えられる。(注:あくまで推測です)

同じバス幅では、ANALOG DEVICESのリファレンス・デザインが動作しているので、AXI Master アクセスとAXI Stream のデータバスのビット幅が同じ場合は問題ないと思う。
同じバス幅に戻してやってみようと思うが、v_axi4s_vid_out が32ビット幅にならないようだ。従って、v_axi4s_vid_out を自分で作る必要がありそうだ。

このように面倒なので、とりあえず、このプロジェクトは休止して、Vivado のIP Integrator のチュートリアルをやってみたい。時期を逃してしまうかもしれないので、雰囲気だけでも掴みたいと思っている。

AXI VDMAのシミュレーション9(v_axi4s_vid_outの変更)”に続く。
  1. 2013年07月18日 05:00 |
  2. IP
  3. | トラックバック:0
  4. | コメント:0

AXI VDMAのシミュレーション7(v_axi4s_vid_out)

AXI VDMAのシミュレーション6(reg_set_axi_lite_master のバグ)”の続き。

今回の休みはお祭りのお神輿の準備で忙しく、AXI VDMAのシミュレーションが出来なかった。まだまだおかしいところがある。

v_axi4s_vid_outだが、AXI4 Stream の s_axis_video_tdata と s_axis_video_tuser の値が X になっている。これは、AXI VDMA のMM2S AXI4 Streamの同じ信号が X なのが原因だ。

それに、custom_vtc から来ている vtg信号は入っているが、video 信号に出力が出ていない。
VDMA_test_17_130716.png

やはり、すべてのモジュールをISimに入れて、原因を調査していくことにする。

ある程度、モジュール同士の配線がうまく行ったら、シミュレーションが遅すぎるので、ISimでCo-Simulation を出来ればやってみた。VSYNCが出るので、数時間かかるので、とっても遅いのだ。今回のプロジェクトでは、シミュレーション用にPLLは使っていないので、ちょうど良いはずだ。
  1. 2013年07月16日 04:45 |
  2. IP
  3. | トラックバック:0
  4. | コメント:0

モンスターズ・ユニバーシティ(映画)を見て来ました

最近、中学生のお神輿の電飾をしていて忙しいですが、午後に奥さんと下の娘とモンスターズ・ユニバーシティ(映画)を見て来ました。

モンスターズ・インクのマイクとサリーが仲良くなったきっかけが描かれています。面白かったんですが、モンスターズ・インクほどじゃない気がしました。続編は本編よりも面白くないという法則に従っている気がします。その法則が外れたのが、トイ・ストーリー3だと思っています。
  1. 2013年07月15日 20:06 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

AXI VDMAのシミュレーション6(reg_set_axi_lite_master のバグ)

AXI VDMAのシミュレーション5(こんどこそシミュレーション)”の続き。

最初に、AXI VDMAの設定レジスタに設定値を入れる必要がある。それにはどうするかというと、reg_set_axi_lite_master IPの vdma_reg_set.txt に設定するレジスタのアドレスと設定データを書いて、AXI VDMAの設定レジスタに書き込む必要がある。(詳しくは、”AXI VDMAのレジスタ設定用AXI Lite Master IPの作製2(シミュレーション)”を参照)

reg_set_axi_lite_master IPの AXI VDMAの設定レジスタに設定値を入れるために、AXI Master Lite で AXI Interconnect に書いている部分のシミュレーション波形を下に示す。
VDMA_test_15_130714.png

ピンクの四角で囲った、AXI Write のアドレス・チャネルとデータ・チャネルの転送が終了した後のレスポンス・チャネルの応答が黄色の四角で囲った部分になる。だいぶ間が離れてしまっている。レスポンス・チャネルの応答が完了する前に、その次の AXI Write のアドレス・チャネルとデータ・チャネルの転送を行なっている。複数の転送を行えるようになっていないので、バグということになる。

レスポンス・チャネルの応答が完了するまで、アドレス・チャネルとデータ・チャネルの転送をWaitするようにHDLを変更した。(なお、カスタムIPのHDLソースを変更した場合は、XPSプロジェクトでネットリストを削除して、ネットリストを再度生成してからISimでコンパイルしないと変更が反映されない。時間がかかるので、単体で十分にテストしたほうが幸せである)
VDMA_test_16_130714.png

reg_set_axi_lite_master IPは、問題無いだろうと思う。
  1. 2013年07月14日 19:58 |
  2. IP
  3. | トラックバック:0
  4. | コメント:0

VHDLのmath_realパッケージを使用した sin() と cos() の計算

sin() と cos() の演算を VHDL の math_real パッケージを使用してやってみたので、忘れないようにブログに書いておく。

sin() と cos() の VHDL での表現方法は、符号1ビット、整数部1ビット、小数部8ビットとする。2π/16 の 0 ~ 7 番目までの値を、math_realパッケージを使って real で求めるが、XSTでは、realを扱えないので、固定小数点に変換する。

下にサンプル回路を示す。これは、cos_sel, sin_sel に番号を入力することで、cos(), sin() の求める値を、それぞれ表示する。

-- COS(), SIN() Test (cos_sin_test.vhd)
-- COS(), SIN() 符号1ビット、整数部1ビット、小数部8ビット
-- output は 256倍にしてある

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use ieee.std_logic_misc.all;
use ieee.math_real.all;

entity cos_sin_test is
    port(
        cos_sel : in std_logic_vector(2 downto 0);
        sin_sel : in std_logic_vector(2 downto 0);
        cos_output : out std_logic_vector(9 downto 0);
        sin_output : out std_logic_vector(9 downto 0)
    );
end cos_sin_test;

architecture RTL of cos_sin_test is
-- 符号1ビット、整数部1ビット、小数部8ビット
constant cos0_16 : std_logic_vector := std_logic_vector(to_signed((integer(cos((2.0*MATH_PI)*0.0/16.0) * 256.0)),10));
constant cos1_16 : std_logic_vector := std_logic_vector(to_signed((integer(cos((2.0*MATH_PI)*1.0/16.0) * 256.0)),10));
constant cos2_16 : std_logic_vector := std_logic_vector(to_signed((integer(cos((2.0*MATH_PI)*2.0/16.0) * 256.0)),10));
constant cos3_16 : std_logic_vector := std_logic_vector(to_signed((integer(cos((2.0*MATH_PI)*3.0/16.0) * 256.0)),10));
constant cos4_16 : std_logic_vector := std_logic_vector(to_signed((integer(cos((2.0*MATH_PI)*4.0/16.0) * 256.0)),10));
constant cos5_16 : std_logic_vector := std_logic_vector(to_signed((integer(cos((2.0*MATH_PI)*5.0/16.0) * 256.0)),10));
constant cos6_16 : std_logic_vector := std_logic_vector(to_signed((integer(cos((2.0*MATH_PI)*6.0/16.0) * 256.0)),10));
constant cos7_16 : std_logic_vector := std_logic_vector(to_signed((integer(cos((2.0*MATH_PI)*7.0/16.0) * 256.0)),10));
constant sin0_16 : std_logic_vector := std_logic_vector(to_signed((integer(sin((2.0*MATH_PI)*0.0/16.0) * 256.0)),10));
constant sin1_16 : std_logic_vector := std_logic_vector(to_signed((integer(sin((2.0*MATH_PI)*1.0/16.0) * 256.0)),10));
constant sin2_16 : std_logic_vector := std_logic_vector(to_signed((integer(sin((2.0*MATH_PI)*2.0/16.0) * 256.0)),10));
constant sin3_16 : std_logic_vector := std_logic_vector(to_signed((integer(sin((2.0*MATH_PI)*3.0/16.0) * 256.0)),10));
constant sin4_16 : std_logic_vector := std_logic_vector(to_signed((integer(sin((2.0*MATH_PI)*4.0/16.0) * 256.0)),10));
constant sin5_16 : std_logic_vector := std_logic_vector(to_signed((integer(sin((2.0*MATH_PI)*5.0/16.0) * 256.0)),10));
constant sin6_16 : std_logic_vector := std_logic_vector(to_signed((integer(sin((2.0*MATH_PI)*6.0/16.0) * 256.0)),10));
constant sin7_16 : std_logic_vector := std_logic_vector(to_signed((integer(sin((2.0*MATH_PI)*7.0/16.0) * 256.0)),10));
begin
    process(cos_sel) begin
        case cos_sel is
            when "000" =>    cos_output <= cos0_16;
            when "001" =>    cos_output <= cos1_16;
            when "010" =>    cos_output <= cos2_16;
            when "011" =>    cos_output <= cos3_16;
            when "100" =>    cos_output <= cos4_16;
            when "101" =>    cos_output <= cos5_16;
            when "110" =>    cos_output <= cos6_16;
            when others =>    cos_output <= cos7_16;
        end case;
    end process;
    
    process(sin_sel) begin
        case sin_sel is
            when "000" =>    sin_output <= sin0_16;
            when "001" =>    sin_output <= sin1_16;
            when "010" =>    sin_output <= sin2_16;
            when "011" =>    sin_output <= sin3_16;
            when "100" =>    sin_output <= sin4_16;
            when "101" =>    sin_output <= sin5_16;
            when "110" =>    sin_output <= sin6_16;
            when others =>    sin_output <= sin7_16;
        end case;
    end process;
    
end RTL;


テストベンチを書いてシミュレーションしてみた。テストベンチを下に示す。

`timescale 1ns / 1ps

////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer:
//
// Create Date:   11:06:54 07/12/2013
// Design Name:   cos_sin_test
// Module Name:   D:/HDL/FndISEWork/Kintex-7/TED_K7/test/cos_sin_test/cos_sin_test_tb.v
// Project Name:  cos_sin_test
// Target Device:  
// Tool versions:  
// Description: 
//
// Verilog Test Fixture created by ISE for module: cos_sin_test
//
// Dependencies:
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
////////////////////////////////////////////////////////////////////////////////

module cos_sin_test_tb;

    // Inputs
    reg [2:0] cos_sel;
    reg [2:0] sin_sel;

    // Outputs
    wire [9:0] cos_output;
    wire [9:0] sin_output;

    // Instantiate the Unit Under Test (UUT)
    cos_sin_test uut (
        .cos_sel(cos_sel), 
        .sin_sel(sin_sel), 
        .cos_output(cos_output), 
        .sin_output(sin_output)
    );

    initial begin
        $monitor("%h %b %b", cos_sel, cos_output, sin_output);
        
        // Initialize Inputs
        cos_sel = 0;
        sin_sel = 0;

        // Wait 100 ns for global reset to finish
        #100;
        cos_sel = 1;
        sin_sel = 1;
      
        #100;
        cos_sel = 2;
        sin_sel = 2;
      
        #100;
        cos_sel = 3;
        sin_sel = 3;
      
        #100;
        cos_sel = 4;
        sin_sel = 4;
      
        #100;
        cos_sel = 5;
        sin_sel = 5;
      
        #100;
        cos_sel = 6;
        sin_sel = 6;
      
        #100;
        cos_sel = 7;
        sin_sel = 7;
      
        #100;
        // Add stimulus here
    end
    
    initial    $monitor("%h %b %b", cos_sel, cos_output, sin_output);

endmodule


Project Navigator 14.6でプロジェクトを作成して、ISimでシミュレーションを行った。
VHDL_math_real_1_130712.png

出てきた値をExcelで解析してみた。浮動小数点数で計算した cos(), sin() と固定小数点の cos(), sin() では、どのくらいの差があるかを計算で求めた。
VHDL_math_real_2_130712.png

インプリメントも出来た。ピンを配置していないので、BitGenはエラーだったが、インプリメントは成功した。IOを除けば、LUT8個のみを使用している。
VHDL_math_real_3_130712.png

hiyuh さんに教えて頂いたパラメタライズなVHDLコード例を貼っておく。なお、仕様の違いから私が一部修正させて頂いた。
hiyuh さん、教えて頂いてありがとうございました。今後とも宜しく、お願いします。

-- COS(), SIN() Test (cos_sin_test.vhd)
-- COS(), SIN() 符号1ビット、整数部1ビット、小数部8ビット
-- output は 256倍にしてある
 
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
-- use ieee.std_logic_misc.all; -- NOTE: std_logic_misc is a legacy POS from Synopsys.
use ieee.math_real.all;
 
entity cos_sin_test is
        -- FIXME: In VHDL-2002, predefined integer should be in [+(2**31)-1, -(2**31)+1] .
        --        To restrict upper bound of SW and OW is worth to consider.
        generic (
                SW : integer range 1 to integer'high :=  3;
                OW : integer range 2 to integer'high := 10
        );
    port(
        -- NOTE: Do not hard code any bit width for future use.
        cos_sel    : in  std_logic_vector(SW-1 downto 0);
        sin_sel    : in  std_logic_vector(SW-1 downto 0);
        cos_output : out std_logic_vector(OW-1 downto 0);
        sin_output : out std_logic_vector(OW-1 downto 0)
    );
begin -- NOTE: Do not be lazy for typing "begin".
end entity cos_sin_test; -- NOTE: Do not be lazy for typing "entity".
 
architecture RTL of cos_sin_test is
-- NOTE: Calculate them into constant LUTs using SW and OW.
        type tLUT is array (0 to 2**SW-1) of std_logic_vector(OW-1 downto 0);
        pure function fCOS_LUT (
                iDUMMY : boolean -- NOTE: Dummy argument for stupid simulator/synthesizer.
        ) return tLUT is
                variable vCOS     : real;
                variable vCOS_LUT : tLUT;
        begin
                F_COS_LUT : for vSEL in tLUT'range loop
                        -- NOTE: Use round for better accuracy.
                        vCOS := round(cos(2.0 * MATH_PI * real(vSEL) / real(2**(SW+1))) * real(2**(OW-2)));
                        -- NOTE: Consider cos(...) = 1.0.
                        -- FIXME: Enlarge OW scheme if you don't like this clamp which produces a bit of
                        --        distortion at specific arguments.
                        vCOS_LUT(vSEL) := std_logic_vector(to_signed(integer(vCOS), OW));
                end loop F_COS_LUT;
                return vCOS_LUT;
        end function fCOS_LUT;
        pure function fSIN_LUT (
                iDUMMY : boolean -- NOTE: Dummy argument for stupid simulator/synthesizer.
        ) return tLUT is
                variable vSIN     : real;
                variable vSIN_LUT : tLUT;
        begin
                F_SIN_LUT : for vSEL in tLUT'range loop
                        -- NOTE: Use round for better accuracy.
                        vSIN := round(sin(2.0 * MATH_PI * real(vSEL) / real(2**(SW+1))) * real(2**(OW-2)));
                        -- NOTE: Consider sin(...) = 1.0.
                        -- FIXME: Enlarge OW scheme if you don't like this clamp which produces a bit of
                        --        distortion at specific arguments.
                        vSIN_LUT(vSEL) := std_logic_vector(to_signed(integer(vSIN), OW));
                end loop F_SIN_LUT;
                return vSIN_LUT;
        end function fSIN_LUT;
        constant cCOS_LUT : tLUT := fCOS_LUT(true);
        constant cSIN_LUT : tLUT := fSIN_LUT(true);
begin
  cos_output <= cCOS_LUT(to_integer(unsigned(cos_sel)));
  sin_output <= cSIN_LUT(to_integer(unsigned(sin_sel)));
end architecture RTL; -- NOTE: Do not be lazy for typing "architecture".

  1. 2013年07月12日 15:59 |
  2. VHDLの書き方
  3. | トラックバック:0
  4. | コメント:0

インプリメントとシミュレーションでのRAM及びROMの初期値

今回のプロジェクトでは、AXI VDMAのレジスタを設定するコントローラ (reg_set_axi_lite_master.v) で、AXI VDMAのアドレスと設定値を保存しておくテキストファイル vdma_reg_set.txt の値を使用して、AXI4 Lite Masterアクセスを行う予定だ。
vdma_reg_set.txtは、reg_set_axi_lite_master.vと同じフォルダに置いてある。(”AXI VDMAのレジスタ設定用AXI Lite Master IPの作製2(シミュレーション)”参照)
VDMA_test_10_130712.png

この状態でVDMA_testプロジェクト全体をインプリメントすると、BRAMに初期値が入る。
VDMA_test_11_130712.png

このまま、ISimでシミュレーションを行うと、rom の初期値は入っていない。
VDMA_test_12_130712.png

プロジェクトのトップフォルダに vdma_reg_set.txt を置いた。
VDMA_test_13_130712.png

シミュレーションを行ったところ、rom に初期値がロードされた。
VDMA_test_14_130712.png

ISimの場合、BRAMの初期値ファイルはプロジェクトのトップフォルダに置く必要があり、インプリメントの時には、初期値ファイルを呼んでいるVerilog HDLファイル (reg_set_axi_lite_master.v) と同じフォルダに置く必要がある。これは、あくまでデフォルトの状態であり、オプションでフォルダをできるのかもしれないが、気をつけておく必要があると思う。
  1. 2013年07月12日 05:04 |
  2. Xilinx ISEについて
  3. | トラックバック:0
  4. | コメント:0

AXI VDMAのシミュレーション5(こんどこそシミュレーション)

前回、”AXI VDMAのシミュレーション4(インプリメント)”でインプリメントをしてみたので、こんどこそISim14.5でシミュレーションを行った。

まずは、XPSプロジェクトのトップファイルを生成した。(2013/07/12:前のブログでトップファイルは生成していました)

次に、テストベンチを生成して、修正して、完成した。

Project Navigator をSimulation モードにして、Simulate Behavioral Model をクリックしてシミュレーションを開始した。そうするとエラーで停止してしまった。
VDMA_test_8_130711.png

エラーの内容を下に示す。

ERROR:HDLCompiler:1654 - "D:/HDL/FndtnISEWork/Zynq-7000/ZedBoard/test/VDMA_test2/system_mt9d111_inf_axi_stream_0_wrapper.v" Line 49: Instantiating from unknown module


mt9d111_inf_axi_streamが見つからないとエラーのようだ。ネットを検索してみたが該当するものが見つからなかった。

もしかしてと思い、mt9d111_inf_axi_stream_v2_1_0.pao ファイルの内容を見ると以下のように書いてあった。

lib mt9d111_inf_axi_stream_v1_00_a mt9d111_inf_axi_stream.vhd vhdl
lib mt9d111_inf_axi_stream_v1_00_a pixel_fifo.v verilog
lib mt9d111_inf_axi_stream_v1_00_a mt9d111_cam_conts.v verilog


mt9d111_inf_axi_stream.vhd を先に書いてあるので、これがまずいのかもしれない。インプリメントは通っても、ISim でのシミュレーションは通らないのでないか?という仮説のもとに順番を変更した。

lib mt9d111_inf_axi_stream_v1_00_a pixel_fifo.v verilog
lib mt9d111_inf_axi_stream_v1_00_a mt9d111_cam_conts.v verilog
lib mt9d111_inf_axi_stream_v1_00_a mt9d111_inf_axi_stream.vhd vhdl


これでセーブして、XPSプロジェクトでRescanして、すべてのファイルを消去してから、もう一度、Simulate Behavioral Model をクリックしてシミュレーションを開始した。

コンパイルが完了して、ISimが起動した。
VDMA_test_9_130711.png

やった~。ISimによるシミュレーションが成功した。

インプリメント時には問題ない PAOファイルのファイルの順番は、ISimによるシミュレーション時には問題になることがある。その場合に、階層が下のファイルを最初にPAOファイルに記述して、階層が最上位のファイルは最後にPAOファイルに書く必要があるようだ。

さて、今回はISimが起動して、シミュレーションができるかどうか?を見ただけとなる。詳細なAXI VDMAの検証は、AXI VDMAのレジスタの設定を決定してからとする。

レジスタの設定は、reg_set_axi_lite_master IPで行う予定だ。これは、テキストファイルを読んで、AXI VDMAの設定を行う。その場合に、BRAMの初期値設定用テキストファイルを変更した時に、その値を反映させるには、どうすれば良いのかも探って行きたいと思う。

(参考)

AXI VDMAのレジスタ設定用AXI Lite Master IPの作製1(仕様の検討)
AXI VDMAのレジスタ設定用AXI Lite Master IPの作製2(シミュレーション)

  1. 2013年07月11日 04:21 |
  2. IP
  3. | トラックバック:0
  4. | コメント:3

AXI VDMAのシミュレーション4(インプリメント)

AXI VDMAのシミュレーション3(Generate Netlist2)”でシミュレーションをやってみようと書いたが、ほとんどのカスタムIPはインプリメントする予定なので、Project Navigator に戻ってインプリメントしてみた。

Project Navigator に戻って、Processes ウインドウの Generate Top HDL Sources をクリックして、XPSプロジェクトのトップファイルを生成した。

System_top.v が出来たので、それを指定して、インプリメントを行った。結果はエラーで、pixel_fifo が解決されていないそうだ。
VDMA_test_5_130710.png

エラー表示を下に示す。

ERROR:NgdBuild:604 - logical block
   'system_i/mt9d111_inf_axi_stream_0/mt9d111_inf_axi_stream_0/mt9d111_camc/pfif
   o' with type 'pixel_fifo' could not be resolved. A pin name misspelling can
   cause this, a missing edif or ngc file, case mismatch between the block name
   and the edif or ngc file name, or the misspelling of a type name. Symbol
   'pixel_fifo' is not supported in target 'zynq'.


おかしいと思って調べてみると、pixel_fifo はCoregen で生成されていて、NGCファイルを追加してある。その設定がMPDファイルに書いてあるのだが、そこに”OPTION STYLE = HDL”と書いてしまった。本来は、NGCファイルを使うように”OPTION STYLE = MIX”と書くべきだった。

これを修正してもう一度、インプリメントを行った。今度はインプリメント成功。
VDMA_test_6_130710.png

MAPリポートを下に示す。

Release 14.5 Map P.58f (nt64)
Xilinx Mapping Report File for Design 'system_top'

Design Information
------------------
Command Line   : map -intstyle ise -p xc7z020-clg484-1 -w -logic_opt off -ol
high -t 1 -xt 0 -register_duplication off -r 4 -mt off -ir off -pr off -lc off
-power off -o system_top_map.ncd system_top.ngd system_top.pcf 
Target Device  : xc7z020
Target Package : clg484
Target Speed   : -1
Mapper Version : zynq -- $Revision: 1.55 $
Mapped Date    : WED 10 JUL 5:6:46 2013

Design Summary
--------------
Number of errors:      0
Number of warnings:  154
Slice Logic Utilization:
  Number of Slice Registers:                 6,359 out of 106,400    5%
    Number used as Flip Flops:               6,314
    Number used as Latches:                      0
    Number used as Latch-thrus:                  0
    Number used as AND/OR logics:               45
  Number of Slice LUTs:                      5,044 out of  53,200    9%
    Number used as logic:                    3,729 out of  53,200    7%
      Number using O6 output only:           2,508
      Number using O5 output only:             126
      Number using O5 and O6:                1,095
      Number used as ROM:                        0
    Number used as Memory:                     479 out of  17,400    2%
      Number used as Dual Port RAM:            268
        Number using O6 output only:            16
        Number using O5 output only:            24
        Number using O5 and O6:                228
      Number used as Single Port RAM:            0
      Number used as Shift Register:           211
        Number using O6 output only:           210
        Number using O5 output only:             1
        Number using O5 and O6:                  0
    Number used exclusively as route-thrus:    836
      Number with same-slice register load:    812
      Number with same-slice carry load:        24
      Number with other load:                    0

Slice Logic Distribution:
  Number of occupied Slices:                 2,000 out of  13,300   15%
  Number of LUT Flip Flop pairs used:        6,347
    Number with an unused Flip Flop:         1,438 out of   6,347   22%
    Number with an unused LUT:               1,303 out of   6,347   20%
    Number of fully used LUT-FF pairs:       3,606 out of   6,347   56%
    Number of unique control sets:             471
    Number of slice register sites lost
      to control set restrictions:           2,003 out of 106,400    1%


FPGA Editor を起動して配置、配線を観察した。
VDMA_test_7_130710.png
  1. 2013年07月10日 04:41 |
  2. IP
  3. | トラックバック:0
  4. | コメント:0

AXI VDMAのシミュレーション3(Generate Netlist2)

AXI VDMAのシミュレーション2(Generate Netlist)”でネットリストが生成できなかったので、もう一度、プロジェクトを作り直しました。結構間違っていました。2度めで慎重にネットを接続していったところ、ネットリストを生成することが出来ました。
VDMA_test_4_130709.png

ちょっとまだ怪しいところはありますが、これでシミュレーションを行なってみようと思います。
  1. 2013年07月09日 05:26 |
  2. IP
  3. | トラックバック:0
  4. | コメント:0

AXI VDMAのシミュレーション2(Generate Netlist)

AXI VDMAのシミュレーション1”で、デザイン・ルール・チェックが通ったので、ネットリストを生成してみた。

XPSプロジェクトで、Hardware メニューから Generate Netlist を選択した。

結構いい加減につないでいるので、エラーが出ている。これらを修正して、ネットリストを生成できるところまで持って行こう。
VDMA_test_2_130707.png

"D:\HDL\FndtnISEWork\Zynq-7000\ZedBoard\test\VDMA_test\system\hdl\system_custom_vtc_0_wrapper.v" Line 40: Cannot find port vtg_act_vid on this module
ERROR:HDLCompiler:267 - "D:\HDL\FndtnISEWork\Zynq-7000\ZedBoard\test\VDMA_test\system\hdl\system_custom_vtc_0_wrapper.v" Line 41: Cannot find port vtg_vsync on this module
ERROR:HDLCompiler:267 - "D:\HDL\FndtnISEWork\Zynq-7000\ZedBoard\test\VDMA_test\system\hdl\system_custom_vtc_0_wrapper.v" Line 42: Cannot find port vtg_hsync on this module
ERROR:HDLCompiler:267 - "D:\HDL\FndtnISEWork\Zynq-7000\ZedBoard\test\VDMA_test\system\hdl\system_custom_vtc_0_wrapper.v" Line 43: Cannot find port vtg_vblank on this module
ERROR:HDLCompiler:267 - "D:\HDL\FndtnISEWork\Zynq-7000\ZedBoard\test\VDMA_test\system\hdl\system_custom_vtc_0_wrapper.v" Line 44: Cannot find port vtg_hblank on this module


エラーの原因は、MPDファイルでは、vtg_act_vid という名前だったが、Verilog HDLファイルでは、vtc_act_vid だった。Verilog HDLファイルを、vtg_act_vid に修正した。他のポートも同じだ。

(2013/07/08)
下のエラーが出たが、srstはrstにポートを修正しているのに、修正されないようだ。

ERROR:HDLCompiler:267 - "D:/HDL/FndtnISEWork/Zynq-7000/ZedBoard/test/VDMA_test/system/pcores/mt9d111_inf_axi_stream_v1_00_a/hdl/verilog/mt9d111_cam_conts.v" Line 122: Cannot find port srst on this module


VDMA_test_3_130707.png

どうもおかしいので、XPSプロジェクトをもう一度作りなおすことにする。(ISE14.5使用)

#困った。どうなっているのだろうか?データベースがおかしくなっているのかも???
  1. 2013年07月07日 05:31 |
  2. IP
  3. | トラックバック:0
  4. | コメント:0

AXI VDMAのシミュレーション1

AXI VDMAシミュレーションをするために、今まで、いろいろとXPSプロジェクトのカスタムIPを作ってきた。下にそのリストを示す。

カメラ、ビデオ表示カスタムIPを AX4-Stream に変更1(使用するIPの検討)
カメラ、ビデオ表示カスタムIPを AX4-Stream に変更2(カメラ・インターフェースIP)

カメラ・インターフェース用AXI4-Stream IPの作製1(仕様の検討)
カメラ・インターフェース用AXI4-Stream IPの作製2(pixel_fifo の生成)
カメラ・インターフェース用AXI4-Stream IPの作製3(シミュレーション)
カメラ・インターフェース用AXI4-Stream IPの作製4(HDLソース1)
カメラ・インターフェース用AXI4-Stream IPの作製5(HDLソース2)
カメラ・インターフェース用AXI4-Stream IPの作製6(AXI4-Stream IPの設定)

Custom Video Timing Controller の作製1(仕様の検討)
Custom Video Timing Controller の作製2(シミュレーション)
Custom Video Timing Controller の作製3(XPSにAdd IP)

ZedBoard用画像出力IPの作製1(仕様の検討)
ZedBoard用画像出力IPの作製2(シミュレーション)
ZedBoard用画像出力IPの作製3(Add IP)

AXI VDMAのレジスタ設定用AXI Lite Master IPの作製1(仕様の検討)
AXI VDMAのレジスタ設定用AXI Lite Master IPの作製2(シミュレーション)
AXI VDMAのレジスタ設定用AXI Lite Master IPの作製3(HDLソースの公開)
AXI VDMAのレジスタ設定用AXI Lite Master IPの作製4(XPSへAdd IP)

AXI4 Slave インターフェースのメモリ・シミュレーション用 IP の作製1
AXI4 Slave インターフェースのメモリ・シミュレーション用 IP の作製2(シミュレーション)
AXI4 Slave インターフェースのメモリ・シミュレーション用 IP の作製3(テストベンチ)
AXI4 Slave インターフェースのメモリ・シミュレーション用 IP の作製4(Add IP)


AXI VDMAをシミュレーションするために、Project Navigator のプロジェクト(VDMA_test)を作った。現在使用しているバージョンは14.5。
VDMA_test_1_130705.png

その下に、XPSプロジェクトを生成した。
VDMA_test_2_130705.png

いろいろとポートを接続したりしてシミュレーションを行おうとしているが、デザイン・ルール・チェックを行ったところエラーが出てしまった。エラー内容を下に示す。

ERROR:EDK:4048 - For axi streaming point-2-point interface connector 'mt9d111_inf_axi_stream_0_m_axis', the C__PROTOCOL value of the connection points differ:
IPNAME:mt9d111_inf_axi_stream INSTANCE:mt9d111_inf_axi_stream_0 BUS_INTERFACE:M_AXIS BUS_STD=AXIS C_M_AXIS_PROTOCOL= - D:\HDL\FndtnISEWork\Zynq-7000\ZedBoard\test\VDMA_test\system\system.mhs line 19
IPNAME:axi_vdma INSTANCE:axi_vdma_0 BUS_INTERFACE:S_AXIS_S2MM BUS_STD=AXIS C_S_AXIS_S2MM_PROTOCOL=XIL_AXI_STREAM_VID_DATA - D:\HDL\FndtnISEWork\Zynq-7000\ZedBoard\test\VDMA_test\system\system.mhs line 31


ar37425のaxi_stream_v2_1_0.mpd を元に、mt9d111_inf_axi_stream_v2_1_0.mpd を書いてあるのだが、ANALOG DEVICESのHDMI のReference Design の ADV7511 XILINX EVALUATION BOARDS REFERENCE DESIGN の axi_hdmi_tx_16b_v2_1_0.mpd にも書いてあったのだが、C_M_AXIS_MM2S_PROTOCOL の定義が必要のようだ。

PARAMETER C_M_AXIS_PROTOCOL = XIL_AXI_STREAM_VID_DATA, DT = STRING, BUS = M_AXIS_MM2S, ASSIGNMENT = CONSTANT, TYPE = NON_HDL


これを、mt9d111_inf_axi_stream_v2_1_0.mpd に追加した。
AXI VDMAのS2MM AXI4 Stream ポートに接続するためには、C_M_AXIS_PROTOCOL パラメータに、XIL_AXI_STREAM_VID_DATA を設定する必要があるようだ。

  1. 2013年07月05日 05:15 |
  2. IP
  3. | トラックバック:0
  4. | コメント:0

AXI4 Slave インターフェースのメモリ・シミュレーション用 IP の作製4(Add IP)

前回までで、AXI4 Slave インターフェースのメモリ・シミュレーション用 IP の単体シミュレーションが終了した。今回は、出来上がったAXI4 Slave インターフェースのメモリ・シミュレーション用 IP をVDMAテスト用XPSプロジェクトにAdd IPする。

MPDファイル、MUIファイル、PAOファイルを書き換えた。MPDファイル、MUIファイルには、C_MEMORY_SIZEを追加した。PAOファイルには、mem_sim_axi_slave.v と memory_8bit.v の行を書いた。

・XPSプロジェクトの Projectメニューから Rescan User Repositories を実行した。

・XPSプロジェクトのIP Catalog の Description ペインの Project Local PCores に、mem_sim_axi_slave が見えた。
mem_sim_axi_slave_1_130704.png

・VDMA_test XPSプロジェクトにAdd IPした。
mem_sim_axi_slave_2_130704.png

・XPSプロジェクトに mem_sim_axi_slave_0 が追加された。

・axi_vdma_0 のM_AXI_MM2S、M_AXI_S2MM に接続した。
mem_sim_axi_slave_3_130704.png
  1. 2013年07月04日 03:50 |
  2. ZedBoard
  3. | トラックバック:0
  4. | コメント:0

お神輿用LED配線基板を一部実装した

お神輿用LED配線基板が来ました”で来た基板を切り離し、ターミナルやミニUSB-Bコネクタ、抵抗、LEDを実装してみた。
kiban_2_130703.jpg

USB電源をつないでLEDを点灯させてみた。左の白いLEDは下に2灯あるので、合計4灯だ。右のRGBイルミネーション・フルカラーLEDは2灯だ。
kiban_3_130703.jpg

白色LEDは、超高輝度白色LED5mm OSPW5111A-YZ 10個入を電源電圧+5V、直列抵抗150Ωで使用している。それを4個束ねている。(左側のLED)

右側のRGBイルミネーション・フルカラーLEDは、RGBイルミネーション・フルカラーLED 5mm乳白色ボディ OST1MK5A32A (10個入)を使用している。最大定格が+5Vだが、+5Vに直接接続すると、LEDが熱くなってしまう。そのため、150Ω並列 x 2 = 75Ωで使用している。こうすると白色は出ないが、発熱は感じない。なお、37.5Ωにすると白が出るが、75Ωで使用している。

左の白色LED4灯の消費電流は約50mAで、提灯の中に入れて提灯照明として使用する。
右のRGBイルミネーション・フルカラーLED2灯は、神輿の天辺に付いている鳳凰の羽の部分に、ゴムの両面テープで止める予定だ。色が変わりながら、神輿を担いだ時に揺れるのが良いのでは?と思う。
  1. 2013年07月03日 20:35 |
  2. プリント基板作成
  3. | トラックバック:0
  4. | コメント:0
»