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

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

FPGAの部屋

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

Vivadoで配置されたロジックと配線を見る1

Vivado では、FPGA Editor が無くなってしまった。今まで、配置されたロジックや配線遅延を見てきたのだが、無くなってしまうととっても困る。今日は、Vivado で、FPGA Editor と同様に配置配線の結果を見る方法を探ってみることにした。Vivado 2013.2 使用。

使用するのは、Vivado のWebPACKでもできるように、Vivado Example の中の bft にした。
Vivado_FPGA_Editor_1_130831.png

・Example Project なので、開いたら、Save As を行う。

・Vivado が立ち上がるので、Flow Navigator の Implementaion -> Run Implementation をクリックして論理合成、インプリメントを行った。

・Implementation Cmopleted ダイアログが出るので、Open Impemented Design のラジオボタンが選択されている状態でOKボタンをクリックした。

・右のウインドウで、最初、Package タブがアクティブになっているので、Device タブをクリックした。
Vivado_FPGA_Editor_2_130831.png

さて、ここからだ。

・Implemented Design の Netlist タブをクリックして、ネットリストとロジックを表示させた。トップの bft の右クリックメニューから Schematic を選択した。
Vivado_FPGA_Editor_3_130831.png

・回路図が表示された。
Vivado_FPGA_Editor_4_130831.png

・Netlist ウインドウで、最初の arnd1 を選択し、Schematic で Fit Selection アイコンをクリックした。
Vivado_FPGA_Editor_5_130831.png

・Schematic ウインドウで arnd1 が拡大表示された。
Vivado_FPGA_Editor_6_130831.png

・arnd1 の Schematic の + アイコンをクリックして下層に降りていく。
Vivado_FPGA_Editor_7_130831.png

・transformLoop[0].ct の + アイコンをクリックして下層に降りていく。
Vivado_FPGA_Editor_8_130831.png

・xOutReg_reg_i_17__0 が出てきた。これをクリックした。
・Netlist ウインドウでも、arnd1 の Leaf_Cells の xOutReg_reg_i_17__0 が表示された。
Vivado_FPGA_Editor_9_130831.png

・Device タブをクリックすると、やはり、xOutReg_reg_i_17__0 が表示されていた。
Vivado_FPGA_Editor_10_130831.png

・Netlist の下にある Cell Properties ウインドウを Float した。
・タブをクリックしていった。まずはGeneral。
Vivado_FPGA_Editor_11_130831.png

いろいろと情報が書いてある。BELつまりスライスでのLUTの位置は、B6LUTだそうだ。SiteやTileも書いてある。

・次にProperties、属性を示すんだろうと思う?
Vivado_FPGA_Editor_12_130831.png

・Power、信号の変化率や 1 の割合などを設定できるので、どのくらい電流を食うかをシミュレーションするときに使うのだろう?
Vivado_FPGA_Editor_13_130831.png

・Nets、選択したLUTに接続されているネットを示す。ネットをクリックするとDeviceウインドウでネットが白で示される。
Vivado_FPGA_Editor_14_130831.png

・Cell Pins、LUTのピンを示している。Load Net Delays をクリックする。
Vivado_FPGA_Editor_15_130831.png

・入力の Net Delay が示された。
Vivado_FPGA_Editor_16_130831.png

・ROM values、Edit LUT Equation ボタンをクリックした。
Vivado_FPGA_Editor_17_130831.png

・Specify LUT Equation ダイアログが表示された。LUT Equation を自分で決定することもできるようだ。
Vivado_FPGA_Editor_18_130831.png

・Device ウインドウで、Routing Resoures アイコンをクリックした。
Vivado_FPGA_Editor_19_130831.png

・FPGA Editor ぽくなった。
Vivado_FPGA_Editor_20_130831.png

Vivadoで配置されたロジックと配線を見る2”に続く。
  1. 2013年08月31日 06:11 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

Vivado HLSで作ったaxi_lite IPをテストした

Vivado HLSのExample として試した axi_lite IP をテストしてみた。

Vivado HLSで axi_lite IP を作った手順をかいたブログ記事を下に示す。

Vivado HLSのExampleを試してみる1(axi_lite の生成)
Vivado HLSのExampleを試してみる2(シミュレーションと合成)
Vivado HLSのExampleを試してみる3(インターフェイス)
Vivado HLSのExampleを試してみる4(C/RTL Cosimulation)
Vivado HLSのExampleを試してみる5(IPにした)


Vivado を立ちあげて、”Vivado チュートリアル Designing with IP Lab3 (IP Packager)3”と同様な手順で、Vivadoプロジェクトを作成し、axi_lite IP の Example を追加した。
Vivado_HLS_64_130830.png

Block Design を新規作成して、ポートを付けた。
Vivado_HLS_65_130830.png

Address Editor タブで、アドレスがマップされていなかったので、右クリックメニューで、アドレスを自動マップさせた。
Vivado_HLS_66_130830.png

その後、論理合成、インプリメントを行ったが、成功した。
Vivado_HLS_67_130830.png

Vivado_HLS_68_130830.png
  1. 2013年08月30日 05:45 |
  2. Vivado HLS
  3. | トラックバック:0
  4. | コメント:0

Vivado 2013.2 の IP Packager でAXI4-Stream にクロックを関連付ける

今まで、Vivado 2013.2 の IP Packager では、AXI4-Stream Interface を作った時にクロックが無いと言われてIP Interface にワーニングが発生していた。それを回避する方法を ikwzm さんに教えて頂いたので、書いておこうと思う。ikwzm さん、ありがとうございました。
参照URL、”mt9d111_inf_axis IP をテストする”のコメント

・まずは、mt9d111_inf_axi_stream のIP Interface を表示した状況を示す。クロックが無いと言われている。
IP_Packager_AXI_72_130829.png

・インターフェイス(m_axis) の表示されている画面の空いているところで、右クリックして、右クリックメニューから Add Bus Interface... を選択する。
IP_Packager_AXI_73_130829.png

・Add Interface ダイアログが表示された。Bus Interface to Configure で clock_rtl を選択した。Bus Interface Display Name に clk と書いた。OKボタンをクリックした。
IP_Packager_AXI_74_130829.png

・clk インターフェイスが出来た。clk をクリックして、右クリックメニューから Edit Port Mapping... を選択した。
IP_Packager_AXI_75_130829.png

・Edit Port Mapping (clk) ダイアログが表示された。
・Interface's Logical Ports の CLK を選択した。
・IP's Physical Ports から pclk を選択した。
・Map ボタンをクリックした。
IP_Packager_AXI_76_130829.png

・CLK と pclk がマップされた。OKボタンをクリックした。
IP_Packager_AXI_77_130829.png

・clk インターフェイスの Port Maps に CLKにマップされた pclk が表示された。
IP_Packager_AXI_78_130829.png

・clk インターフェイスをクリックしたまま、下のペインから Bus Parameters タブを選択した。
・Bus Parameters ペイン内で、右クリックメニューから Add Bus Parameter... を選択した。
IP_Packager_AXI_79_130829.png

・Add Bus Parameter ダイアログが表示された。Enter new Bus Parametr Name: に ASSOCIATED_BUSIF と入力した。
IP_Packager_AXI_80_130829.png

・ASSOCIATED_BUSIF パラメータが生成された、Value をクリックして、AXI4-Stream インターフェイスの名前、m_axis を入力した。
IP_Packager_AXI_81_130829.png

IP Interface のワーニングが消えた。

IP File Groups のワーニング
IP File Groups のワーニングも消してみた。
・絶対パスがダメだったので、絶対パスのファイルは消して、プロジェクトに存在しないファイルはプロジェクトにコピーして、プロジェクト内のファイルを指定したところ相対パスとなった。

・次に、生成されたIP (pixel_fifo.xci) だが、XCIファイルだけでダメで、Synthesis、Simulation 共に HDLファイルを File Group に入れる必要があった。
IP_Packager_AXI_82_130829.png

これで、IP File Groups のワーニングも消えた。

(2013/08/30:追記)
このIPを使って、”mt9d111_inf_axis IP をテストする”のVivado プロジェクトを一旦消去し、もう一度作りなおして論理合成をしてみたが、同様にエラーになった。
  1. 2013年08月29日 05:15 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

Vivado HLSのAXI Master Exampleを試す2

前の記事は、”Vivado HLSのAXI Master Exampleを試す1

・C/RTL Cosimulation を SystemC で行った。成功した。下に結果を示す。
Vivado_HLS_57_1308267.png

・C/RTL Cosimulation を Verilog, VHDL でやってみた。全部成功した。下に結果を示す。
Vivado_HLS_58_1308267.png

・IPにするために、Expart RTL を行う際に、Options の Evaluate をチェックしてみたところ、実際に論理合成、インプリメントをしているようだ。インプリメントできるかどうかをチェックしているのか?
Vivado_HLS_59_1308267.png

・IP化の結果。
Vivado_HLS_60_1308267.png

Vivado_HLS_61_1308267.png

・solution1\impl\ip フォルダを下に示す。
Vivado_HLS_62_1308267.png

・solution1\impl\ip\hdl\verilog フォルダを下に示す。5つのVerilog HDLファイルから構成されている。
Vivado_HLS_63_1308268.png

example_top.v を見ると、AXI4 Master インターフェイスと ap_hs インターフェイスのポートがある。 このIPの使い方がよくわからないが、ap_hs インターフェイスを叩くと、AXI4 Master のアクセスが始まって、演算が始まるのかもしれない。
  1. 2013年08月28日 04:56 |
  2. Vivado HLS
  3. | トラックバック:0
  4. | コメント:0

AXI VDMAのシミュレーション13(Questaでシミュレーション)

前の記事は、”AXI VDMAのシミュレーション12(ハードウェア協調シミュレーション)

ISimによるハードウェア協調シミュレーションは失敗に終わって、ISimによるソフトウェアのシミュレーションは13msec 辺りでISimが落ちてしまう。ISimでは打つ手が無いので、QuestaSim でシミュレーションを行った。

シングルバッファのシミュレーションは問題なく終了し、”LogiCORE IP AXI Video Direct Memory Access v5.04a Product Guide PG020 December 18, 2012”の113ページ、Triple Frame Buffer Example のシミュレーションを行ったことを覚書としてブログに書いておく。

AXI VDMA のレジスタの設定用テキスト・ファイルを下に示す。

10000000
0000008B
1000005c
00000000
10000060
00180000
10000064
00300000
10000058
01000c80
10000054
00000c80
10000050
00000258
10000030
00000003
100000ac
00000000
100000B0
00180000
100000B4
00300000
100000a8
00000c80
100000a4
00000c80
100000a0
00000258
ffffffff


設定値の意味については、”AXI VDMAのレジスタ設定用AXI Lite Master IPの作製2(シミュレーション)”を参照のこと。
AXI VDMAの設定は、MM2S のみ Genlock をイネーブルしている。フレームバッファは3つ使用して、それらのアドレスは 000000, 180000, 300000 とした。

QuestaSim で101msec シミュレーションした結果を下に示す。
axi_vdma_sim_1_130827.png

上の図の説明をすると、AXI VDMAの信号を表示している。赤の四角で囲った部分は MM2S の AXI4 Master Read 部分の信号で、ピンクの四角で囲った部分は S2MM の AXI4 Master Write 部分の信号だ。
それぞれのフレームの切れ目に、赤い棒とピンクの棒で印を付けてある。赤い棒には、”300000 000000 000000 180000 180000 300000”と続く数字が書いてある。これは、次のフレーム(右側)のスタートアドレスを示す。これは、HDMIに出力する信号だ。
ピンクの棒には、”000000 180000 300000 000000”と続く数字が書いてある。これも、次のフレーム(右側)のスタートアドレスを示す。これは、CMOSカメラからくる信号なので、フレームレートが約半分になっている。
ピンク色の数字と赤色の数字を見比べてもらいたいのだが、180000 の後の赤色の数字を見て欲しい。300000 までの間の赤い数字は、すべて 000000 になっている。これは、 000000 からのアドレスのフレームバッファには、CMOSカメラから転送された正常なデータが入っているからである。
ピンク色の数字の 300000 の位置から 000000 までの赤い数字は 18000 になっているのも同じ理由からである。

よって、この結果を見ると、トリプル・バッファリングがうまく出来ていると言えると思う。
  1. 2013年08月27日 17:23 |
  2. IP
  3. | トラックバック:0
  4. | コメント:0

Vivado HLSのAXI Master Exampleを試す1

前回は、AXI Lite Slave を試してみたので、今回は、AXI Master の Example を試してみようと思う。

なお、今回はやり方を省略するので、詳しくは、下の記事を見なおして欲しい。

Vivado HLSのExampleを試してみる1(axi_lite の生成)
Vivado HLSのExampleを試してみる2(シミュレーションと合成)
Vivado HLSのExampleを試してみる3(インターフェイス)
Vivado HLSのExampleを試してみる4(C/RTL Cosimulation)
Vivado HLSのExampleを試してみる5(IPにした)


・最初に、AXI Master の Example の Project を作製した。
Vivado_HLS_47_130826.png

・solution1 を右クリックして、右クリックメニューから Solution Setting... を選択して、Solution Settingを選ぶ。
・Synthesis のクロックの周波数とFPGAの種類を確認した。前 Example のと同じだった。
Vivado_HLS_48_1308267.png

・今回の AXI Master の Example は、50個のバッファのアドレスをもらって、各バッファに +100 した値をバッファに入れて返すというプログラムだった。
Vivado_HLS_49_1308267.png

・Run C Simulation アイコンをクリックして、Cのシミュレーションを走らせた。成功した。
Vivado_HLS_50_1308267.png

・Run C Synthesis アイコンをクリックして、合成を行った。
・合成レポートが表示された。左のExplorer の Solution1 には、Syn フォルダが増えていて、その下に、report, systemc, verilog, vhdl のサブフォルダが出来た。今回のファイルは2つ出来ていた。
Vivado_HLS_51_1308267.png

・Latency と Utilization Estimates を表示した。今度のレイテンシは211だ。
Vivado_HLS_52_1308267.png

・Interface を下に示す。今度は、ap_ctrl_hs バスを使用している。
Vivado_HLS_53_1308267.png

・ap_ctrl_hs バスについては、”Vivado Design Suite ユーザー ガイド 高位合成 UG902 (v2013.2) 2013 年 6 月 19 日”の71ページに記述がある。そこの、”図 1-39 : ap_ctrl_hs インターフェイスのビヘイビア”を下に引用する。
Vivado_HLS_54_1308267.png

ap_ctrl_hs バスの動作についてはマニュアルに記載がある。正直なところ、その説明を読んでもよくわかないのだが、後でシミュレーションして、動作を確認してみたいと思う。

・Analysis パースペクティブでの画面を下に示す。
Vivado_HLS_55_1308267.png

まだ詳細にどのように表を見るかがいまいちわかっていない。Latency は 211クロックで、Interval は 212クロックだそうだ。

・使用リソースを示す。
Vivado_HLS_56_1308267.png

次の記事は、”Vivado HLSのAXI Master Exampleを試す2
  1. 2013年08月27日 05:41 |
  2. Vivado HLS
  3. | トラックバック:0
  4. | コメント:0

Vivado HLSのExampleを試してみる5(IPにした)

前の記事は、”Vivado HLSのExampleを試してみる4(C/RTL Cosimulation)

今回は、ExampleをIPにしてみようと思う。

Step 5: IP Creation
・Export RTL アイコンをクリックした。
Vivado_HLS_43_130826.png

・Feedback Request ダイアログが表示された。OKボタンをクリックした。
Vivado_HLS_37_130825.png

・Export RTL Dialog が表示された。そのまま、OKボタンをクリックした。
Vivado_HLS_38_130825.png

・左の Explorer に ip フォルダが増えて、圧縮された xilinx_com_hls_example_1_0.zip もできていた。
Vivado_HLS_40_130825.png

・Winodows の Explorer で、ip フォルダを見た。下に示す。
Vivado_HLS_44_130826.png

・ip\hdl\verilog フォルダを見た。下に示す。
Vivado_HLS_45_130826.png

example_BUS_A_if.v が、AXI4 Lite Slave とのインターフェイスを行うVerilog HDLファイルだ。中を見てみると、AXI4 Lite Slave と ap_hs バスのインターフェイスは、AXI4 Lite Slave にマップされたアドレス経由で行われている。下に Address Info を引用する。

//------------------------Address Info-------------------
// 0x00 : Control signals
// bit 0 - ap_start (Read/Write/COH)
// bit 1 - ap_done (Read/COR)
// bit 2 - ap_idle (Read)
// bit 3 - ap_ready (Read)
// bit 7 - auto_restart (Read/Write)
// others - reserved
// 0x04 : Global Interrupt Enable Register
// bit 0 - Global Interrupt Enable (Read/Write)
// others - reserved
// 0x08 : IP Interrupt Enable Register (Read/Write)
// bit 0 - Channel 0 (ap_done)
// bit 1 - Channel 1 (ap_ready)
// others - reserved
// 0x0c : IP Interrupt Status Register (Read/TOW)
// bit 0 - Channel 0 (ap_done)
// bit 1 - Channel 1 (ap_ready)
// others - reserved
// 0x10 : Control signal of a
// bit 0 - a_ap_vld (Read/Write/COH)
// bit 1 - a_ap_ack (Read)
// others - reserved
// 0x14 : Data signal of a
// bit 7~0 - a[7:0] (Read/Write)
// others - reserved
// 0x18 : Control signal of b
// bit 0 - b_ap_vld (Read/Write/SC)
// others - reserved
// 0x1c : Data signal of b
// bit 7~0 - b[7:0] (Read/Write)
// others - reserved
// 0x20 : reserved
// 0x24 : Data signal of c_i
// bit 7~0 - c_i[7:0] (Read/Write)
// others - reserved
// 0x28 : reserved
// 0x2c : Data signal of c_o
// bit 7~0 - c_o[7:0] (Read)
// others - reserved
// (SC = Self Clear, COR = Clear on Read, TOW = Toggle on Write, COH = Clear on Handshake)


この方式では、AXI4 Lite バスに接続されたプロセッサ?などの負担が大きくなる。しかもサンプルドライバが必要なはずだ。探してみると、solution1\impl\drivers\example_top_v1_00_a\src にドライバのCソースコードがあった。下に示す。
Vivado_HLS_46_130826.png

ap_hs バスの信号を設定する関数が並んでいた。

これでは、ソフトウェアの負担が大きいので、もう少し、ハードウェアにバスのプロトコル変換を任せることは出来ないのか?と思う。オプションがあるかもしれないので、探ってみようと思う。
  1. 2013年08月26日 05:08 |
  2. Vivado HLS
  3. | トラックバック:0
  4. | コメント:0

Vivado HLSのExampleを試してみる4(C/RTL Cosimulation)

前の記事は、”Vivado HLSのExampleを試してみる3(インターフェイス)

今回から、”Vivado Design Suite Tutorial: High-Level SynthesisUG871 (v 2013.2) June 19, 2013”を参考にやってみた(以下、マニュアルとする)。24ページの”Step 4: RTL Verification”からやってみる。

Step 4: RTL Verification
・Run C/RTL Cosimulation アイコンをクリックした。
Vivado_HLS_33_130825.png

・Co-simulation Dialog が表示された。全てデフォルトのままでOKボタンをクリックした。
Vivado_HLS_34_130825.png

・Console に、”*** C/RTL co-simulation finished: PASS ***”が表示され、上のシミュレーションもSuccess してシミュレーションがせいこうしたことがわかった。
・右のExplorer ウインドウに sim フォルダが追加された。
Vivado_HLS_35_130825.png

デフォルトの設定では、SystemCで C/RTL シミュレーションを行うようだ。次にVerilog に設定して C/RTL シミュレーションをやってみた。

・Run C/RTL Cosimulation アイコンをクリックした後の、Co-simulation Dialog で、SystemCのチェックを外して、Verilog にチェックを入れた。OKボタンをクリックした。
Vivado_HLS_41_130825.png

・C/RTL シミュレーションが成功した。
Vivado_HLS_42_130826.png

Vivado Simulator が動いているようだ。下にログをすべて示す。

Starting C/RTL cosimulation ...
C:/HDL/Xilinx/Vivado_HLS/2013.2/Win_x86/bin/vivado_hls_bin.exe C:\Users\Masaaki\Documents\Vivado_HLS\axi_lite\proj_axi_lite\solution1\cosim.tcl
@I [LIC-101] Checked out feature [HLS]
@I [HLS-10] Running 'C:/HDL/Xilinx/Vivado_HLS/2013.2/Win_x86/bin/vivado_hls_bin.exe'
for user 'Masaaki' on host 'masaaki-pc' (Windows NT_intel version 6.1) on Mon Aug 26 04:18:16 +0900 2013
in directory 'C:/Users/Masaaki/Documents/Vivado_HLS/axi_lite'
@I [HLS-10] Opening project 'C:/Users/Masaaki/Documents/Vivado_HLS/axi_lite/proj_axi_lite'.
@I [HLS-10] Opening solution 'C:/Users/Masaaki/Documents/Vivado_HLS/axi_lite/proj_axi_lite/solution1'.
@I [SYN-201] Setting up clock 'default' with a period of 13.3333ns.
@I [HLS-10] Setting target device to 'xc7z020clg484-2'
@I [SIM-47] Using XSIM for RTL simulation.
@I [SIM-14] Instrumenting C test bench ...
Build using "C:/HDL/Xilinx/Vivado_HLS/2013.2/msys/bin/g++.exe"
Compiling apatb_example.cpp
Compiling example.cpp_pre.cpp.tb.cpp
Compiling example_test.cpp_pre.cpp.tb.cpp
Generating cosim.tv.exe
@I [SIM-302] Generating test vectors ...
HLS AXI-Lite Example
Function c += a + b
Initial values a = 5, b = 10, c = 0
HW result = 15
SW result = 15
Success SW and HW results match
@I [SIM-333] Generating C post check test bench ...
@I [SIM-12] Generating RTL test bench ...
@I [SIM-323] Starting verilog simulation.
@I [SIM-15] Starting XSIM ...

C:\Users\Masaaki\Documents\Vivado_HLS\axi_lite\proj_axi_lite\solution1\sim\verilog>call xelab apatb_example_top -prj example.prj --lib "ieee_proposed=./ieee_proposed" -s example
Vivado Simulator 2013.2
Copyright 1986-1999, 2001-2013 Xilinx, Inc. All Rights Reserved.
Running: C:/HDL/Xilinx/Vivado/2013.2/bin/unwrapped/win64.o/xelab.exe apatb_example_top -prj example.prj --lib ieee_proposed=./ieee_proposed -s example
Determining compilation order of HDL files
INFO: [VRFC 10-165] Analyzing Verilog file "example.autotb.v" into library work
INFO: [VRFC 10-165] Analyzing Verilog file "example.v" into library work
Starting static elaboration
Completed static elaboration
Starting simulation data flow analysis
Completed simulation data flow analysis
Time Resolution for simulation is 1ps
Compiling module work.example
Compiling module work.apatb_example_top
Built simulation snapshot example

****** xsim v2013.2 (64-bit)
**** Build 272601 by xbuild on Sat Jun 15 11:27:26 MDT 2013
** Copyright 1986-1999, 2001-2013 Xilinx, Inc. All Rights Reserved.

source xsim.dir/example/xsim_script.tcl
# xsim {example} -maxdeltaid 10000 -tclbatch {example.tcl}
Vivado Simulator 2013.2
Time resolution is 1 ps
source example.tcl
## run all
WARNING: File/Multi-channel descriptor (-1) passed to $fclose is not valid. Please compile the design with -debug for source location information.
$finish called at time : 180509 ps : File "example.autotb.v" Line 394
## quit
INFO: [Common 17-206] Exiting xsim at Mon Aug 26 04:18:44 2013...
@I [SIM-316] Starting C post checking ...
HLS AXI-Lite Example
Function c += a + b
Initial values a = 5, b = 10, c = 0
HW result = 15
SW result = 15
Success SW and HW results match
@I [SIM-1000] *** C/RTL co-simulation finished: PASS ***
@I [LIC-101] Checked in feature [HLS]


マニュアルから引用

・Cテストベンチは、RTLデザインへの入力ベクタを生成するために使用される。
・RTLデザインがシミュレーションされる。
・RTLからの出力ベクタはCテストベンチに戻されて、テストベンチで結果が正しいかどうかを検証するために使われる。


Vivado HLSのExampleを試してみる5(IPにした)”に続く。
  1. 2013年08月26日 04:39 |
  2. Vivado HLS
  3. | トラックバック:0
  4. | コメント:0

Vivado HLSのExampleを試してみる3(インターフェイス)

Vivado HLSのExampleを試してみる2(シミュレーションと合成)”の続き。

今日はInterface について調べてみた。

・example_csynth.rpt を開いて、右のウインドウからOutline タブをクリックした。

・Interface をクリックすると、example_csynth.rpt のInterface 部分が表示された。
Vivado_HLS_30_130824.png

・ap_... というインターフェイスのプロトコル用信号と、a, b, c の信号が並んでいた。このバスのインターフェースを調べてみよう。

・インターフェースは、example.cpp で pragma として定義されていた。
 a が ap_hs, b が ap_vld, c が ap_none の register 指定だ。
Vivado_HLS_13_130823.png

Vivado Design Suite ユーザー ガイド 高位合成 UG902 (v2013.2) 2013 年 6 月 19 日”(以下マニュアルと書く)の69ページから”インタフェイスの管理”として書かれている。

下に、図 1-37 :データ型とインターフェイス合成のサポート を引用させていただきます。
Vivado_HLS_31_130824.png

各インターフェイスの対応が書いてある。使用しているインターフェイスは、ap_none, ap_vld, ap_hs なので、どのインターフェイスもPointer Variable に対応している。各インターフェイスとAXI4バスの対応も書かれている。このExample に使用されているインターフェイスはAXI4 Lite に対応している。

インターフェイス タイプ ap_none、 ap_stable、 ap_ack、 ap_vld、 ap_ovld、 および ap_hs の場合は、個別の入力ポートおよび出力ポートとして合成されるそうだ。(マニュアルの71ページ)

ap_hs (ap_ack、 ap_vld、 および ap_ovld) (マニュアルの75ページ)
ap_hs インターフェイスでは、clock, ap_rst, ap_start, ap_idle, in_vld, in_ack, out_vld, out_ack を使用している。
ap_ack はその内のack だけ、ap_vld はその内のvld だけを使用するそうだ。

下に、図 1-41 : ap_hs インターフェイスの動作 を引用させていただきます。
Vivado_HLS_32_130824.png

これを元の最初のInterface を見てみると、a には、ack と vld があるが、b には、vld のみ、c にはなにもないことがわかる。
Vivado_HLS_30_130824.png

VHDLファイルの entity の Port 部分を見ても同様になっている。
Vivado_HLS_24_130824.png

これらのインターフェイスはAXI4 Lite Slave に接続されるようだ。マニュアルの89ページ、”AXI4-Lite スレーブ インターフェイス”を参照のこと。

Vivado HLSのExampleを試してみる4(C/RTL Cosimulation)”に続く。
  1. 2013年08月25日 05:30 |
  2. Vivado HLS
  3. | トラックバック:0
  4. | コメント:0

Vivado HLSのExampleを試してみる2(シミュレーションと合成)

Vivado HLSのExampleを試してみる1(axi_lite の生成)”の続き。

良いマニュアルを見つけた。”Vivado Design Suite ユーザー ガイド 高位合成 UG902 (v2013.2) 2013 年 6 月 19 日”だ。これを参照しながら、Vivado HLSを試してみることにする。

Vivado Design Suite ユーザー ガイド 高位合成 UG902 (v2013.2) 2013 年 6 月 19 日”の31ページからを参照する。

1.Run C Simulation アイコンをクリックする。
Vivado_HLS_15_130824.png

2.C Simulation ダイアログが表示された。オプションを選択しない場合は、デバックモードでコンパイルされてCのシミュレーションが実行されるそうなので、そのままOKボタンをクリックした。
Vivado_HLS_16_130824.png

なお、これらのオプションの意味については、
Vivado Design Suite ユーザー ガイド 高位合成 UG902 (v2013.2) 2013 年 6 月 19 日”の33ページを参照のこと。

3.Cのシミュレーション結果がConsole に表示された。
Vivado_HLS_17_130824.png

4.2.で、Debug にチェックを入れてみた。OKボタンをクリックした。
Vivado_HLS_19_130824.png

5.デバック用のパースペクティブになって、デバックできるようだ。
Vivado_HLS_20_130824.png

6.Synthesis perspective アイコンをクリックして、もとのパースペクティブに戻す。
Vivado_HLS_21_130824.png

7.Run C Synthesis アイコンをクリックして、合成を行う。
Vivado_HLS_22_130824.png

8.合成レポートが表示された。左のExplorer の Solution1 には、Syn フォルダが増えていて、その下に、report, systemc, verilog, vhdl のサブフォルダが出来た。
Vivado_HLS_23_130824.png

9.8.のフォルダを開いてみると、VHDL、Verilog HDL、SystemCのファイルがあった。HDLファイルは読みやすい形に出力されている。
Vivado_HLS_24_130824.png

10.Analysis perspective アイコンをクリックする。
Vivado_HLS_25_130824.png

11.Analysis の画面が開く。Latency は 2クロックだが、Interval は3クロックだ。パイプラインされていない。
Vivado_HLS_26_130824.png

12.右の Perfomance-example の画面で、Operation の1つを右クリックして、右クリックメニューからGoto Source を選択する。
Vivado_HLS_27_130824.png

13.Cのソースの該当する部分が見える。
Vivado_HLS_28_130824.png

14.左下のペインでResource Profile タブをクリックすると、その階層でのリソース使用量を見ることができるそうだ。
右のペインのResource タブをクリックすると、使用された演算の制御ステートが示されされるそうだ。カーソルを持って行くとプロパティが表示された。
Vivado_HLS_29_130824.png

Vivado HLSのExampleを試してみる3(インターフェイス)”に続く。
  1. 2013年08月24日 05:47 |
  2. Vivado HLS
  3. | トラックバック:0
  4. | コメント:0

Vivado HLSのExampleを試してみる1(axi_lite の生成)

Vivado のIP Packager とIP Integrator はどうもうまくいかないので、新しいバージョンが出るまでペンディングにしようと思う。
今回は、Vivado HLSを試しにやってみたい。試してみるのは、Vivado HLSのExample Project だ。

・まずは、Vivado HLS 2013.2 を起動する。

・起動画面から Open Example Project をクリックした。
Vivado_HLS_1_130823.png

・Exampleが表示されるので、2番めの axi_lite をやってみることにした。
Vivado_HLS_2_130823.png

・Location を入力して、Finishボタンをクリックした。
Vivado_HLS_2_5_130823.png

・Vivado HLSが立ち上がった。
Vivado_HLS_3_130823.png

・Project メニューから Project Setting... を選択して、Project Setting を見てみよう。
Vivado_HLS_4_130823.png

・General の項目
Vivado_HLS_5_130823.png

・Simulation は、example_test.cpp ファイルが登録されていた。
Vivado_HLS_6_130823.png

・Synthesis は、example.cpp ファイルが登録されていた。
Vivado_HLS_7_130823.png

・次に、solution1 を右クリックして、右クリックメニューから Solution Setting... を選択して、Solution Setting を見てみよう。
Vivado_HLS_8_130823.png

・最初のGeneral は無いも登録がない。
Vivado_HLS_9_130823.png

・Synthesis は、クロックの周波数とFPGAの種類が登録されていた。FPGAはZynq-7020 だ。
Vivado_HLS_10_130823.png

・Cosimulation では、RTL Selection で SystemC にチェックが入っていた。
Vivado_HLS_11_130823.png

・Export の項目。
Vivado_HLS_12_130823.png

・Vivado HLS に戻って、右の Explorer から Source をクリックして、example.cpp をダブルクリックした。

・example.cpp が開いた。和を計算して累算する簡単な関数だった。
Vivado_HLS_13_130823.png

・次に、右の Explorer から Test Bench をクリックして、example_test.cpp をダブルクリックした。

・ソフトとハードの値を比べているようだ。
Vivado_HLS_14_130823.png

Vivado HLSのExampleを試してみる2(シミュレーションと合成)”に続く。
  1. 2013年08月23日 05:20 |
  2. Vivado HLS
  3. | トラックバック:0
  4. | コメント:0

ISE14.6からQuestaSim10.1bを使用する

ISE14.6からQuestaSim10.1bを使用するための覚書

1,ISE の Tools の中の Simulation Library Compilation Wizard でModelSim のシミュレーション・ライブラリをコンパイルする。

2.QuestaSim10.1b のフォルダの modelsim.ini に 1.でコンパイルしたシミュレーション・ライブラリのフォルダを指定する。

cpld = D:/HDL/Xilinx/14.6/ISE_DS/ISE/vhdl/questasim/10.1b/nt64/cpld
simprim = D:/HDL/Xilinx/14.6/ISE_DS/ISE/vhdl/questasim/10.1b/nt64/simprim
unimacro = D:/HDL/Xilinx/14.6/ISE_DS/ISE/vhdl/questasim/10.1b/nt64/unimacro
unisim = D:/HDL/Xilinx/14.6/ISE_DS/ISE/vhdl/questasim/10.1b/nt64/unisim
xilinxcorelib = D:/HDL/Xilinx/14.6/ISE_DS/ISE/vhdl/questasim/10.1b/nt64/xilinxcorelib
cpld_ver = D:/HDL/Xilinx/14.6/ISE_DS/ISE/verilog/questasim/10.1b/nt64/cpld_ver
secureip = D:/HDL/Xilinx/14.6/ISE_DS/ISE/verilog/questasim/10.1b/nt64/secureip
simprims_ver = D:/HDL/Xilinx/14.6/ISE_DS/ISE/verilog/questasim/10.1b/nt64/simprims_ver
uni9000_ver = D:/HDL/Xilinx/14.6/ISE_DS/ISE/verilog/questasim/10.1b/nt64/uni9000_ver
unimacro_ver = D:/HDL/Xilinx/14.6/ISE_DS/ISE/verilog/questasim/10.1b/nt64/unimacro_ver
unisims_ver = D:/HDL/Xilinx/14.6/ISE_DS/ISE/verilog/questasim/10.1b/nt64/unisims_ver
xilinxcorelib_ver = D:/HDL/Xilinx/14.6/ISE_DS/ISE/verilog/questasim/10.1b/nt64/xilinxcorelib_ver


3.環境変数のXilinxに、ISE14.6を指定する。”Xilinx"、”D:\HDL\Xilinx\14.6\ISE_DS\ISE”

4.シミュレーションするISEプロジェクトのあるフォルダに、QuestaSim10.1b のフォルダの modelsim.iniをコピーする。

5.Project Navigator の Design Properties の Simulator で Questa を指定する。

6.Simulation モードにした時の、Simulate Behavioral Model を右クリックし、右クリックメニューからProcess Properties... を選択する。

7.Process Propertiesダイアログで、Ignore Pre-Compiled Library Compilation Message にチェックを入れる。
error in modelsim from project navigator”参照。

  1. 2013年08月22日 17:24 |
  2. シミュレーション
  3. | トラックバック:0
  4. | コメント:0

mt9d111_inf_axis IP をテストする

前回、”custom_vtc IP をテストする1”で、簡単な1つだけのVerilog HDLファイルで構成されたIPをIP Integrator でインスタンスした時は、問題なくシミュレーション、論理合成、インプリメントまで行うことが出来た。今回は、NGCファイル、つまり、CoreGen で生成したFIFO IPが含まれているIPをIP Integrator でインスタンスして、問題なくシミュレーション、論理合成、インプリメントできるかどうかを確認する。

今回も、”Vivado チュートリアル Designing with IP Lab3 (IP Packager)3”を参考にして、Vivado プロジェクトを作り、IPリポジトリをインポートした。
mt9d111_inf_axis_test_1_130821.png

・mt9d111_inf_axi_stream_1 をダブルクリックして、C M Axis Data Width を 24 から 32 に変更した。
mt9d111_inf_axis_test_3_130821.png

・Verilog HDLのラッパーを作った。
CRITICAL WARNINGが出ている、AXI4-Stream にクロックピンが含まれていないということのようだ。クロックは、pclkで兼用しているが、それがまずいのだろうか?
mt9d111_inf_axis_test_2_130821.png

WARNING の詳しい内容を下に示す。

CRITICAL WARNING: [BD 41-968] AXI interface port /m_axis is not associated to any clock port. It may not work correctly. Please update ASSOCIATED_BUSIF parameter of a clock port to include this interface port.
CRITICAL WARNING: [BD 41-967] AXI interface pin /mt9d111_inf_axi_stream_1/m_axis is not associated to any clock pin. It may not work correctly.


・シミュレーション用ファイル、mt9d111_inf_axi_stream_tb.v、axi4s_slave_BFM.vhd、mt9d111_model.v を用意して、Vivado のプロジェクトに追加した。
mt9d111_inf_axis_test_4_130821.png

シミュレーションと論理合成をしてみたがエラーになってしまった。
mt9d111_inf_axis_test_5_130821.png

[Synth 8-439] module 'mt9d111_inf_axis_test_mt9d111_inf_axi_stream_1_0' not found ["C:/Users/Masaaki/Documents/Vivado/Zynq/Zedboard/mt9d111_inf_axis_test/mt9d111_inf_axis_test.srcs/sources_1/bd/mt9d111_inf_axis_test/hdl/mt9d111_inf_axis_test.v":79]


mt9d111_inf_axi_stream_1_0のインスタンスが無いと言われているので、IPがうまくできていないのかも?
  1. 2013年08月21日 05:20 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:5

custom_vtc IP をテストする1

VivadoでAXI VDMAのシミュレーション1(IP Integrator)”で自作カスタムIPをIP Packager でIPとしてパッケージして、そのIPをIP Integrator で接続したが、エラーが出て論理合成することが出来なかった。
”VivadoでAXI VDMAのシミュレーション2(ISEプロジェクトをインポート)”で、VDMA_test2 プロジェクトをISEプロジェクトとして、Vivado にインポートして、シミュレーションしてみたが、エラーだった。論理合成もエラーだった。

今回は、原点に戻って、チュートリアルに使用した custom_vtc IP をIP Integrator でインスタンスして、論理合成、インプリメント、シミュレーションできるかどうか?を調べてみることにした。

custom_vtc のIP化にしていては、下のブログ記事を参照のこと。これらの記事を参考にしてやっていく。

Vivado チュートリアル Designing with IP Lab3 (IP Packager)1
Vivado チュートリアル Designing with IP Lab3 (IP Packager)2
Vivado チュートリアル Designing with IP Lab3 (IP Packager)3


今回は特に、”Vivado チュートリアル Designing with IP Lab3 (IP Packager)3”を参考にして、Vivado プロジェクトを作り、IPリポジトリをインポートしていく。

custom_vtc IP をインポートして、IP Integrator にインスタンスした状態を示す。
custom_vtc_test_1_130820.png

Block Design として custom_vtc_test を作ってあるが、Verilog HDLのラッパーを作った。
作り方は、 custom_vtc_test を右クリックして、右クリックメニューから、Create HDL Wrapper を選択する。
custom_vtc_test_2_130820.png

次に、テストベンチファイル、custom_vtc_test_tb.v のスケルトンだけを作製した。

テストベンチを作製した。と言っても、作ってあった custom_vtc_tb.v を改造しただけだ。

Flow Nabigator のSimulation -> Run Simulation -> Run Behavioral Simulation を選択して、論理シミュレーションを開始した。
論理シミュレーション出来ました。
custom_vtc_test_4_130820.png

論理合成、インプリメント、ビットストリームの生成を行った。ビットストリームの生成は出来なかったが、インプリメントまで成功した。
custom_vtc_test_5_130820.png

簡単なIPは IP Integrator にインスタンスして問題なく、シミュレーション、インプリメントすることが出来た。今度はもう少し複雑なIPを IP Integrator にインスタンスして確かめてみようと思う。
  1. 2013年08月20日 05:11 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

VivadoでAXI VDMAのシミュレーション2(ISEプロジェクトをインポート)

VivadoでAXI VDMAのシミュレーション1(IP Integrator)”の続き。

前回、自作カスタムIPをIP Packager でIPとしてパッケージして、そのIPをIP Integrator で接続したが、エラーが出て論理合成することが出来なかった。(目的はシミュレーションです)
今回は、VDMA_test2 プロジェクトをISEプロジェクトとして、Vivado にインポートして、シミュレーションすることができのかを調べてみることにした。

VDMA_test2 プロジェクトをVivado にインポートした。
Vivado_VDMA_test_7_130820.png

Flow Navigator のSimulation -> Run Simulation を選択して、Run Behavioral Simulation を選択して、シミュレーションをスタートしたところエラーが発生した。
Vivado_VDMA_test_8_130820.png

FIFO GENERATORが見つからないというエラーだ。

ERROR: [VRFC 10-2063] Module not found while processing module instance [C:/HDL/Xilinx/Vivado/2013.2/ids_lite/EDK/hw/XilinxProcessorIPLib/pcores/axi_interconnect_v1_06_a/hdl/verilog/ict106_fifo_gen.v:572]
ERROR: [VRFC 10-2063] Module not found while processing module instance [C:/Users/Masaaki/Documents/Vivado/Zynq/Zedboard/VDMA_test2_org/VDMA_test2_org.srcs/sources_1/edk/system/pcores/custom_axi4s_video_v1_00_a/hdl/verilog/video_fifo.v:71]
ERROR: [XSIM 43-3322] Static elaboration of top level Verilog design unit(s) in library work failed


論理合成してもやはり、FIFO GENERATORでエラーになった。

この手段もダメだったので、一番簡単なIPをインスタンスしてシミュレーションや論理合成ができるかどうかを試してみようと思う。
  1. 2013年08月20日 04:19 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

VivadoでAXI VDMAのシミュレーション1(IP Integrator)

AXI VDMAのシミュレーション11(シミュレーション成功2)”でAXI VDMAのシミュレーションはできるようになったが、13msec 以上のシミュレーションをすると、ISimがおちてしまった。
AXI VDMAのシミュレーション12(ハードウェア協調シミュレーション)”では、Co-Simulation が失敗してしまった。

そこで、Vivado で IP Integrator を使用してIPを接続して、Vivado Simulator でシミュレーションしてみようと思った。

・FPGAの部屋のまとめのVivado カテゴリを参考に、各IPをVivado IP Packager でカスタムIPにした。

・Vivado で VDMA_test2 プロジェクトを作って、作製したカスタムをIPのリポジトリに入れた。
Vivado_VDMA_test_1_130819.png

Vivado_VDMA_test_2_130819.png

・IP Integrator で、各IPを接続したが、XPSプロジェクトでは、net_vcc で入力ピンを 1 にすることが出来たが、IP Integrator で同じ用に入力ピンを 1 にする方法が分からない?
下の図で、custom_vtc_1 の vtc_ce がその 1 に接続したいピンだ。
Vivado_VDMA_test_3_130819.png

もし 1 に接続する方法が見つからない時は、外部ポートに接続する。

(追記)
vtc_ce を外部ポートに接続しました。
Vivado_VDMA_test_4_130819.png

試しに論理合成してみると、エラーが出ました。
Vivado_VDMA_test_5_130819.png

論理合成エラーの内容です。他にもエラーが出ているのかもしれません。
E

RROR: [Synth 8-439] module 'system_mem_sim_axi_slave_1_0' not found [C:/Users/Masaaki/Documents/Vivado/Zynq/Zedboard/VDMA_test2/VDMA_test2.srcs/sources_1/bd/system/hdl/system.v:1250]
ERROR: [Synth 8-285] failed synthesizing module 'system' [C:/Users/Masaaki/Documents/Vivado/Zynq/Zedboard/VDMA_test2/VDMA_test2.srcs/sources_1/bd/system/hdl/system.v:801]
ERROR: [Synth 8-285] failed synthesizing module 'system_wrapper' [C:/Users/Masaaki/Documents/Vivado/Zynq/Zedboard/VDMA_test2/VDMA_test2.srcs/sources_1/imports/hdl/system_wrapper.v:3]


system_mem_sim_axi_slave_1_0 が見つからないと言われている?なぜかは分からない?
Vivado_VDMA_test_6_130819.png
  1. 2013年08月19日 05:39 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

AXI VDMAのシミュレーション12(ハードウェア協調シミュレーション)

前の記事は、”AXI VDMAのシミュレーション11(シミュレーション成功2)”だが、カテゴリを”ISim”に移動した。

前に書いた、ISimのハードウェア協調シミュレーションに関する記事を下に示す。

ISimハードウェア協調シミュレーション1(キャラクタ・ディスプレイ・コントローラ)
ISimハードウェア協調シミュレーション2(FFTのシミュレーション1)
ISimハードウェア協調シミュレーション3(FFTのシミュレーション2)


それと、見やすい”ISim ハードウェア協調シミュレーション 14.1 クイック リファレンス”を参考にした。

使用するISEのバージョンはISE14.5とした。

・Designウインドウで、system_top を選択してSourceメニューからSource Properties...を選択した。
VDMA_test_37_130818.png

・Category から Hardware Co-Simulation を選択し、Enable Hardware Co-Simulation をチェックして、Clock Portに aclk を指定した(一番早いクロック)。Target Board for Hardware Co-Simulation で ZC702(JTAG) を選択した。OKボタンをクリックした。
VDMA_test_38_130818.png

・uut - system_top のアイコンが変更された。
VDMA_test_39_130818.png

・system_top_tb.v を選択して、ProcessesウインドウからSimulate Behavioral Model をダブルクリックして、シミュレーションをスタートしたところエラーが出てしまった。
VDMA_test_40_130818.png

エラー内容を下に示す。

ERROR:HDLCompiler:104 - "C:/HDL/Xilinx/14.5/ISE_DS/EDK/hw/XilinxProcessorIPLib/pcores/proc_common_v3_00_a/hdl/vhdl/dynshreg_f.vhd" Line 328: Cannot find in library . Please ensure that the library was compiled, and that a library and a use clause are present in the VHDL file.
ERROR:HDLCompiler:854 - "C:/HDL/Xilinx/14.5/ISE_DS/EDK/hw/XilinxProcessorIPLib/pcores/proc_common_v3_00_a/hdl/vhdl/dynshreg_f.vhd" Line 158: Unit ignored due to previous errors.
--------------------------------------------------------------------------------
ERROR:HWCoSim - Program 'xst' returned with a non-zero exit code 6. Please refer to log file 'D:\HDL\FndtnISEWork\Zynq-7000\ZedBoard\test\VDMA_test2\isim\hwcosim_tmp\jtag\synth_model\xst_system_top.srp' for further details.
HDL wrapper and bitstream generation process failed.


いまのところ、エラーは解決していない。Co-Simulation しようと思ったのだが、残念だ。。。
ちなみに、論理合成、インプリメントは成功している。

次の記事は、”AXI VDMAのシミュレーション13(Questaでシミュレーション)
  1. 2013年08月18日 08:40 |
  2. ISim
  3. | トラックバック:0
  4. | コメント:0

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

前の記事は、”AXI VDMAのシミュレーション10(シミュレーション成功)

前回、シミュレーションが成功したと書いたが、v_axi4s_vid_out IP の video_... の信号が出て無かった。従って、HDMIの信号が出力されていない。
そこで、v_axi4s_vid_out IP と互換(あくまで私が想定する用途ではということです)のカスタムIPを自分で作ることにした。名前は、custom_axi4s_video とした。custom_axi4s_video.v を下に示す。

// custom_axi4s_video.v
// v_axi4s_vid_outの代わりに自作したIP
// 2013/08/16

`default_nettype none

module custom_axi4s_video #(
    parameter  VIDEO_DATA_WIDTH = 32
)(
    // AXI4-Stream
    input    wire    aclk,
    input    wire    aresetn,
    input    wire    [VIDEO_DATA_WIDTH-1:0]    s_axis_video_tdata,
    input    wire    s_axis_video_tvalid,
    output    wire    s_axis_video_tready,
    input    wire    s_axis_video_tuser,
    input    wire    s_axis_video_tlast,
    
    // video output
    input    wire    video_clk,
    output    wire    video_de,
    output    wire    video_vsync,
    output    wire    video_hsync,
    output    wire    video_vblank,
    output    wire    video_hblank,
    output    wire    [VIDEO_DATA_WIDTH-1:0]    video_data,
    
    // VTG Signals
    input    wire    vtg_vsync,
    input    wire    vtg_hsync,
    input    wire    vtg_vblank,
    input    wire    vtg_hblank,
    input    wire    vtg_act_vid,
    output    wire    vtg_ce,
    output    wire    vtg_fsync,
    
    // Error Signals
    output    wire    vfifo_underflow,
    output    wire    vfifo_overflow
);
    wire    vfifo_almost_empty;
    wire    vfifo_almost_full;
    wire    vfifo_empty;
    wire    vfifo_full;
    
    // video_fifo のインプリメント
    video_fifo video_fifo_i (
        .rst(~aresetn), // input rst
        .wr_clk(aclk), // input wr_clk
        .rd_clk(video_clk), // input rd_clk
        .din(s_axis_video_tdata), // input [31 : 0] din
        .wr_en(s_axis_video_tvalid & s_axis_video_tready), // input wr_en
        .rd_en(vtg_act_vid), // input rd_en
        .dout(video_data), // output [31 : 0] dout
        .full(vfifo_full), // output full
        .almost_full(vfifo_almost_full), // output almost_full
        .overflow(vfifo_overflow), // output overflow
        .empty(vfifo_empty), // output empty
        .almost_empty(vfifo_almost_empty), // output almost_empty
        .underflow(vfifo_underflow) // output underflow
    );
        
    assign s_axis_video_tready = ~vfifo_full;
    
    assign video_de =         vtg_act_vid;
    assign video_vsync =    vtg_vsync;
    assign video_hsync =    vtg_hsync;
    assign video_vblank =    vtg_vblank;
    assign video_hblank =    vtg_hblank;
    
    assign vtg_ce = 1'b1;
    assign vtg_fsync = 1'b0;
endmodule


IPコアで非同期FIFOをインスタンスしただけのIPだ。MPDファイルとPAOファイル、MUIファイルも作って、XPSプロジェクトにAdd IPした。
VDMA_test_34_130817.png

1msec シミュレーションした時のトップの波形を下に示す。
VDMA_test_35_130817.png

13msecほどシミュレーションすると、ISimが落ちてしまうので、VSYNCが出るところまでシミュレーションすることが出来ないのが残念だ。

HDMIのデータが出る辺りを拡大した。
VDMA_test_36_130817.png

これでインプリメントもできるし、AXI VDMAの動きをシミュレーションすることができると思ったのだが、長い間シミュレーションできないのでは困った。

次は、ISimを使用したCo-Simulation をやってみたい。

AXI VDMAのシミュレーション12(ハードウェア協調シミュレーション)”に続く。
  1. 2013年08月17日 19:36 |
  2. IP
  3. | トラックバック:0
  4. | コメント:0

FPGAの部屋まとめサイトの更新

FPGAの部屋のまとめサイトを更新しました。
Paralella-16HelioボードAXI4-Stream IPの作製AXI Lite Master IPコアの作製を新設して、その他の記事のまとめをアップロードしました。

そろそろ、まとめも記事が多すぎて見にくくなっているカテゴリがあるので、考える必要がありそうです。
  1. 2013年08月15日 05:27 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:0

AXI4 Master, AXI4 Lite Slaveバスを持つプロジェクトをVivado IP Packager でIPにする3

”AXI4 Master, AXI4 Lite Slaveバスを持つプロジェクトをVivado IP Packager でIPにする2”の続き

前回は失敗はあったが、パラメータを設定する方法についてブログに書いた。今回は、IPをインスタンスして、パラメータを設定する画面の構成について書こうと思う。

・Pcakage IPタブの IP GUI Customization Layout をクリックして、右のペインからRun the wizard をクリックする。
IP_Packager_AXI_48_130812.png

・IP GUI Customization Layout ダイアログが表示された。1. Guide me through creating pages and groups のラジオボタンをクリックする。Next>ボタンをクリックした。
IP_Packager_AXI_49_130812.png

・ページを設定しようと思う。最初のページには、AXIバス関連でないパラメータを入れる。C_OFFSET_WIDTH と C_DISPLAY_START_ADDRESS を選択する。
IP_Packager_AXI_50_130812.png

・真ん中、一番上の右向き矢印をクリックして、2つの信号を右のペインに入れた。Next>ボタンをクリックした。
IP_Packager_AXI_51_130812.png

・Group and Parameter Ordering Page が表示された。そのままNext>ボタンをクリックした。
IP_Packager_AXI_52_130812.png

・Customization Page Summary が表示された。Create Page ボタンをクリックして、2ページ目を生成する。
IP_Packager_AXI_53_130812.png

・New Configuration Page Creation が表示された。真ん中の3番目のMove all the items to the right ボタンをクリックして、すべての信号を右のペインに入れた。
IP_Packager_AXI_54_130812.png

・右のペインに残りのすべてのAXI4バスの信号が入った。
IP_Packager_AXI_55_130812.png

・Group and Parameter Ordering Page が表示された。Groupボタンをクリックして、ブループを作る。
IP_Packager_AXI_56_130812.png

・New Group Creation Page が表示された。AXI4 Master の信号をすべて選んで、真ん中の矢印の一番上のMove the selected items to the right ボタンをクリックした。
IP_Packager_AXI_57_130812.png

・右のペインにAXI4 Master の信号が入った。右端の矢印ボタンをクリックして、順番を入れ替える。(結局、順番は反映されなかった)
IP_Packager_AXI_58_130812.png

・右のペインの信号の順番を入れ替えて、Group NameにAXI4 Master と入力した。Next>ボタンをクリックした。
IP_Packager_AXI_59_130812.png

・Group and Parameter Ordering Page が表示された。AXI4 Master グループができていた。再度、Groupボタンをクリックして、ブループを作る。
IP_Packager_AXI_60_130812.png

・New Group Creation Page が表示された。AXI4 Lite Slave の信号をすべて右のペインに入れるために、真ん中の3番目のMove all the items to the right ボタンをクリックして、すべての信号を右のペインに入れた。
IP_Packager_AXI_61_130812.png

・AXI4 Lite Slave のすべて信号が右のペインに入った。Group NameにAXI4 Lite Slave と入力した。Next>ボタンをクリックした。
IP_Packager_AXI_62_130812.png

・右端の矢印ボタンをクリックして、順番を入れ替えた。(結局、ここでも順番は反映されなかった)Next>ボタンをクリックした。
IP_Packager_AXI_63_130812.png

・Group and Parameter Ordering Page が表示された。AXI4 Master、AXI4 Lite Slave の2つのグループが出来た。Next>ボタンをクリックした。
IP_Packager_AXI_64_130812.png

・Customization Page Summary が表示された。Next>ボタンをクリックした。
IP_Packager_AXI_65_130812.png

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

・Pcakage IPタブの IP GUI Customization Layout に戻った。Refresh... をクリックした。
IP_Packager_AXI_67_130812.png

・IPのパラメータ設定のPage 0 を示す。
IP_Packager_AXI_68_130812.png

・IPのパラメータ設定のPage 1 の上半分を示す。グループ化されている。しかし、順番は並べ替えた順番ではなく、元の順番だった。
IP_Packager_AXI_69_130812.png

・IPのパラメータ設定のPage 1 の下半分を示す。こちらもグループ化されている。
IP_Packager_AXI_70_130812.png

・Review and Package をクリックして、Package IP ボタン、または Re-Package IP ボタンをクリックする。
IP_Packager_AXI_71_130812.png
  1. 2013年08月13日 05:31 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

横浜に行ってきました

今日は横浜に、娘2人と奥さんと私で行って来ました。

つくばエクスプレスで行ったんですが、最初から大変でした。私が便意を催して、私だけ流山おおたかの森で途中下車、自分だけで電車に乗ったものの、また、南流山で降りてトイレに行きました。すぐに秋葉原に向かったものの、皆を30分くらい待たせてしまいました。最初からハプニングでした。その後はお腹の調子は大丈夫でした。

秋葉原から品川まで出て、品川から京急で横浜まで、横浜からみなとみらい線でみなとみらい駅でおりました。ここのながーいエスカレーターに皆を乗せてみたいと思っていたので、乗せてみると長さに驚いていました。ここのエスカレーターは本当に長いです。降りる時は怖いくらい。
もう12時近かったので、クイーンズスクエアのいつもパシフィコ横浜に来た時に食べているパシフィコ横浜よりのレストランで食事、ここは990円でスープ、飲み物付きなので気に入っています。
私は、チキンのチーズ載せトマトソースを食べました。
yokohama_1_130813.jpg

奥さんはピザとハイネケンを頼んでました。
yokohama_2_130813.jpg

食事が終わったら、クイーンズスクエアから出て徒歩で、赤レンガ倉庫に行きました。暑かったです。。。
yokohama_3_130813.jpg

赤レンガ倉庫の中に入ってみると、洒落た雑貨などのお店があるんですね。。。いろんなおもしろいグッズを売っていました。娘2人はiPhoneケースを買ってました。いろいろなものを見ていると、Make用のインスピレーションがわきました。作ってみたい。実装は後で考えます。

赤レンガ倉庫の外に出ると海につながっています。船などを見ていました。気持ちいい~です。
yokohama_4_130813.jpg
yokohama_5_130813.jpg

そうそう、左の方は海上保安庁で、ヘリがホバーリングしてました。訓練でしょうね?
yokohama_6_130813.jpg

赤レンガ倉庫には、人工ビーチがあって、海の家風のものもありましたよ。
yokohama_7_130813.jpg

その後は、道を歩いて山下公園まで行きました。とっても暑いので、ファミレスでお茶というか、ブリーベリーアイスを食べたりして休憩しながら行きました。(ジョナサンの生ブルーベリーがたくさん入っているブルーベリーアイス美味しかったです。ブルーベリーが好きなんで。。。)

山下公園について、歩いて来ました。何度も言いますが、暑い。。。でもこの頃は薄曇りで少し暑いのが緩和されていますよ。氷川丸も見えました。
yokohama_8_130813.jpg

山下公園から後ろを振り返ると、ランドマークタワーや高い建物が見えて、良い景色です。
yokohama_9_130813.jpg

次は、歩いて中華街へ。ここも暑い。。。
yokohama_10_130813.jpg

とても小籠包や、肉まんを食べる気になりません。甘栗売りもいたけど、甘栗食べる気にもなりません。
おみやげを買って、帰りました。帰りは、東横線から中目黒で日比谷線に乗り換え、日比谷で千代田線に、北千住でTXに乗り換えて帰って来ました。とっても暑い一日でしたが、楽しかったです。今度は涼しい時に来ようねと皆で話していました。
  1. 2013年08月12日 21:11 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

AXI4 Master, AXI4 Lite Slaveバスを持つプロジェクトをVivado IP Packager でIPにする2

AXI4 Master, AXI4 Lite Slaveバスを持つプロジェクトをVivado IP Packager でIPにする1”の続き。

前回で一応、AXI4 Master, AXI4 Lite Slaveバスを持つプロジェクトをVivado IP Packager でIPにすることは出来たが、XPSと同じというわけではない。それは、MPDファイルのみのパラメータや、パラメータのレンジ、パラメータ同士の依存関係が書けていないことだ。つまりMPDファイルに書いてあるパラメータの属性を設定できていない。それを設定することにしよう。

bitmap_disp_cntrler_axi_master のMPDファイルのパラメータ記述部分を下に示す。

## Generics for VHDL or Parameters for Verilog
PARAMETER C_S_AXI_LITE_ADDR_WIDTH = 9, DT = INTEGER, BUS = S_AXI_LITE
PARAMETER C_S_AXI_LITE_DATA_WIDTH = 32, DT = INTEGER, BUS = S_AXI_LITE
PARAMETER C_BASEADDR = 0xffffffff, DT = STD_LOGIC_VECTOR(31 downto 0), PAIR = C_HIGHADDR, ADDRESS = BASE, BUS = S_AXI_LITE, MIN_SIZE = 0x1000, ASSIGNMENT = REQUIRE, TYPE = NON_HDL
PARAMETER C_HIGHADDR = 0x00000000, DT = STD_LOGIC_VECTOR(31 downto 0), PAIR = C_BASEADDR, ADDRESS = HIGH, BUS = S_AXI_LITE, ASSIGNMENT = REQUIRE, TYPE = NON_HDL
PARAMETER C_S_AXI_LITE_PROTOCOL = AXI4LITE, DT = STRING, BUS = S_AXI_LITE, ASSIGNMENT = CONSTANT, TYPE = NON_HDL
PARAMETER C_S_AXI_LITE_SUPPORTS_READ = 1, DT = INTEGER, RANGE = (0,1), BUS = S_AXI_LITE, TYPE = NON_HDL
PARAMETER C_S_AXI_LITE_SUPPORTS_WRITE = 1, DT = INTEGER, RANGE = (0,1), BUS = S_AXI_LITE, TYPE = NON_HDL

PARAMETER C_M_AXI_SUPPORTS_THREADS = 0, DT = integer, RANGE = (0,1), TYPE = NON_HDL, BUS = M_AXI
PARAMETER C_M_AXI_THREAD_ID_WIDTH = 1, DT = integer, RANGE = (1:16), BUS = M_AXI
PARAMETER C_M_AXI_ADDR_WIDTH = 32, DT = integer, ASSIGNMENT = CONSTANT, BUS = M_AXI
PARAMETER C_M_AXI_DATA_WIDTH = 64, DT = integer, RANGE = (32, 64, 128, 256), BUS = M_AXI
PARAMETER C_M_AXI_PROTOCOL = AXI4, DT = string, TYPE = NON_HDL, VALUES = (AXI4 = AXI4, AXI4Lite = AXI4Lite), BUS = M_AXI
# Max number of write commands able to be issued without responses
# In this example, issued writes + unread writes will throttle write address channel
PARAMETER C_INTERCONNECT_M_AXI_WRITE_ISSUING = 8, DT = INTEGER, BUS = M_AXI
#Read Issuing in this example HDL will go as high as write issuing parameter
PARAMETER C_INTERCONNECT_M_AXI_READ_ISSUING = 8, DT = INTEGER, BUS = M_AXI, TYPE = NON_HDL
PARAMETER C_M_AXI_SUPPORTS_READ = 1, DT = integer, RANGE = (0,1), BUS = M_AXI #,TYPE = NON_HDL
PARAMETER C_M_AXI_SUPPORTS_WRITE = 1, DT = integer, RANGE = (0,1), BUS = M_AXI #,TYPE = NON_HDL
PARAMETER C_M_AXI_SUPPORTS_USER_SIGNALS = 0, DT = integer, RANGE = (0,1), TYPE = NON_HDL, BUS = M_AXI
PARAMETER C_M_AXI_AWUSER_WIDTH = 1, DT = integer, ISVALID = (C_M_AXI_SUPPORTS_USER_SIGNALS == 1), BUS = M_AXI
PARAMETER C_M_AXI_ARUSER_WIDTH = 1, DT = integer, ISVALID = (C_M_AXI_SUPPORTS_USER_SIGNALS == 1), BUS = M_AXI
PARAMETER C_M_AXI_WUSER_WIDTH = 1, DT = integer, ISVALID = (C_M_AXI_SUPPORTS_USER_SIGNALS == 1), BUS = M_AXI
PARAMETER C_M_AXI_RUSER_WIDTH = 1, DT = integer, ISVALID = (C_M_AXI_SUPPORTS_USER_SIGNALS == 1), BUS = M_AXI
PARAMETER C_M_AXI_BUSER_WIDTH = 1, DT = integer, ISVALID = (C_M_AXI_SUPPORTS_USER_SIGNALS == 1), BUS = M_AXI
PARAMETER C_M_AXI_SUPPORTS_NARROW_BURST = 0, DT = integer, RANGE = (0,1), TYPE = NON_HDL, BUS = M_AXI

# Example Parameters
# Base address of targeted slave
PARAMETER C_M_AXI_TARGET = 0x00000000, DT = std_logic_vector(31 downto 0)
# Burst length for transactions, in C_M_AXI_DATA_WIDTHs
PARAMETER C_M_AXI_BURST_LEN = 16, DT = integer
# Number of address bits to test before wrapping
PARAMETER C_OFFSET_WIDTH = 9, DT = integer

PARAMETER C_DISPLAY_START_ADDRESS = 0x1A000000, DT = std_logic_vector(31 downto 0)


MPDファイルのパラメータの内で、C_S_AXI_LITE_PROTOCOL、C_S_AXI_LITE_PROTOCOL、C_M_AXI_SUPPORTS_THREADS、C_M_AXI_THREAD_ID_WIDTH、C_M_AXI_PROTOCOL、C_INTERCONNECT_M_AXI_READ_ISSUING、C_M_AXI_SUPPORTS_USER_SIGNALS は無いので、IP Packager のパラメータに追加する。それらを追加しても意味があるのどうかは分からないが。。。
更に、属性があるもの、例えば、C_S_AXI_LITE_SUPPORTS_READ は RENGE が1また0なので、それを設定する。

下の図では、C_MAXI_BUSER_WIDTH の例を引いている。
IP_Packager_AXI_32_130810.png

左下の IP Parameter Properties を見るとValue validation type が none になっている。これだと、値の設定方法は、下図の様に値をキーボードで入力することになる。
IP_Packager_AXI_30_130809.png

ラジオボタンにする方法がわかったので、下に書いておく。

下の図では、C_M_AXI_SUPPORTS_READ パラメータをクリックして設定している。Value validation pairs に "1" "1" "0" "0" を入力すると、Value validation list に "1" "0" が入り、Value validation type も list に変更された。
IP_Packager_AXI_33_130810.png

同様に、C_M_AXI_DATA_WIDTH は、RANGE = (32, 64, 128, 256) なので、Value validation pairs に "32" "32" "64" "64" "128" "128" "256" "256" と入力した。
IP_Packager_AXI_34_130810.png

C_M_AXI_SUPPORTS_THREADS を追加して、C_M_AXI_SUPPORTS_WRITE もリストにしたので、今のGUIは下の図のようになった。
IP_Packager_AXI_35_130810.png

今のところ、ラジオボタン以外のリストボックスを設定するやり方はわからない?ご存知のかたがいらっしゃったら教えて下さい。

・パラメータの追加方法

・パラメータの画面で右クリックして、右クリックメニューから Add User Parameter を選択する。
IP_Packager_AXI_36_130811.png

・新しいパラメータの名前を入れる。(C_M_AXI_THREAD_ID_WIDTH)
IP_Packager_AXI_37_130811.png

・Edit Parameter ダイアログが表示される。Is the value editable by the User? を Yes に変更し、Should the value be restricted to a list or range で Yes のラジオボタンにチェックを入れる。

・How is the value bound? が選べるので、range of integers をリストから選択した。
IP_Packager_AXI_38_130811.png

・What is default value? を 1 にセットした。

・Valid Range を 1 to 16 にセットした。

・OKボタンをクリックした。
IP_Packager_AXI_39_130811.png

・C_M_AXI_THREAD_ID_WIDTH パラメータが生成された。Value validation type が range_long に、Minimum が 1、Maximum が 16 になった。
IP_Packager_AXI_40_130811.png


・Add User Parameter で入れたパラメータには、問題があることがある。ワーニングが出てしまうことがある。
これは、プロパティの Order が 0.0 なのが問題だ。
IP_Packager_AXI_41_130811.png

・1つ前のパラメータの Order は 2700.0 だ。
IP_Packager_AXI_42_130811.png

・その1つ前のパラメータ Order は 2600.0 だ。
IP_Packager_AXI_43_130811.png

・つまり、C_M_AXI_SUPPORTS_THREADS パラメータの Order は、2800.0 を入れれば良いことになる。次のパラメータの Order は、2900.0 だ。これで、このワーニングは無くなった。
IP_Packager_AXI_44_130811.png


・依存関係がある信号設定例(2013/08/11:今のところ、Enableにできていません)

C_M_AXI_RUSER_WIDTH の XPSプロジェクトのMPDファイルの記述を下に示す。

PARAMETER C_M_AXI_RUSER_WIDTH = 1, DT = integer, ISVALID = (C_M_AXI_SUPPORTS_USER_SIGNALS == 1), BUS = M_AXI


C_M_AXI_RUSER_WIDTH は、C_M_AXI_SUPPORTS_USER_SIGNALS == 1の時だけ値を持てる。このようにVivado の IP Packager で書くためには、左の IP Parameter Properties の Enablement dependency に C_M_AXI_SUPPORTS_USER_SIGNALS==1 を設定した。
IP_Packager_AXI_45_130811.png

そうすると、現在は、C_M_AXI_SUPPORTS_USER_SIGNALS==0 なので、C_M_AXI_RUSER_WIDTH は設定ダイアログでハイドされる。
IP_Packager_AXI_46_130811.png


bitmap_disp_cntrler_axi_master のMPDファイルのパラメータすべてを追加することが出来た。
IP_Packager_AXI_47_130811.png

AXI4 Master, AXI4 Lite Slaveバスを持つプロジェクトをVivado IP Packager でIPにする3”に続く。
  1. 2013年08月10日 17:40 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:2

風立ちぬ(映画)を見てきました

今日は、午後から休暇を取って、風立ちぬ(映画)見て来ました。宮崎駿監督のアニメです。
実は、前に1度この映画を見たことがあります。その時は直前に奥さんと喧嘩をしてしまったので、とっても嫌な気持ちで見たので、感動も何もありませんでした。
今日もう一度、見てみようと思って見たら、私にとっても良い映画でした。飛行機への情熱がよく描かれていると思いましたし、時代の風景も良かったです。そして、恋する場面と別れも、こんな感じなんだろうなという仕上がりだと思います。雲の動きは見事でしたし、途中、背景が手抜きかな?と思う場面はあったんですが、2度目は良い映画だと思いました。
  1. 2013年08月09日 20:25 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

AXI4 Master, AXI4 Lite Slaveバスを持つプロジェクトをVivado IP Packager でIPにする1

前回、custom_vtc を Vivado 2013.2 の IP Packager で IP にすることが出来た。

Vivado チュートリアル Designing with IP Lab3 (IP Packager)1
Vivado チュートリアル Designing with IP Lab3 (IP Packager)2
Vivado チュートリアル Designing with IP Lab3 (IP Packager)3


今回は、AXI4 Master, AXI4 Slave Liteバスを持つISEプロジェクトをVivado のプロジェクトとしてインポートして、そのプロジェクトをIPとして登録してみる。その場合にAXI4バスをグループ化する。

最初に、Vivado プロジェクトにインポートするのは、このISEプロジェクトだ。下に示す。

ビットマップ・ディスプレイ・コントローラIPにAXI4 Lite Slave バスを追加1(シミュレーション)
ビットマップ・ディスプレイ・コントローラIPにAXI4 Lite Slave バスを追加2(XPSプロジェクト)


ISEプロジェクトをVivado にインポートするやり方は、custom_vtc の記事を見てもらうことにして、インポートしたところから始める。
IP_Packager_AXI_1_130808.png

(注:ダイアログのNext>ボタンをクリックする時は文章に書きませんので、ご了承下さい)

1.axi_master_bfm がDesign Sources に入っていたので、Simulation Sources に移動する。右クリックメニューから Move to Simulatin Sources を選択した。
IP_Packager_AXI_2_130808.png

2.bitmap_disp_cntrler_axi_master をクリックしてから、Tools メニューから Package IP... を選択した。
IP_Packager_AXI_3_130808.png

3.Package New IP ダイアログが開いた。
IP_Packager_AXI_4_130808.png

4.Package your project のラジオボタンにチェックが入っているので、そのままにする。IP Definition Location が合っていることを確認する。
IP_Packager_AXI_5_130808.png

5.Begin IP Creation が表示されるので、Finishボタンをクリックした。
IP_Packager_AXI_6_130808.png

6.エラーが表示された。
IP_Packager_AXI_7_130808.png

7.右のウインドウにPackage IP タブが表示された。
IP_Packager_AXI_8_130808.png

8.IP Identification を下のように書き換えた。

Vendor: marsee
Display Name: bitmap_disp_cntrler_axi_master by marsee
Description: Custom Video Timing Controller (marsee)
Vendor Display: Marsee
Company Url: http://marsee101.blog19.fc2.com/


IP_Packager_AXI_9_130808.png

9.右のペインで、IP Customization Parameters をクリックして、右のペインからParameter Import Dialog をクリックした。
IP_Packager_AXI_10_130808.png

10.Imprt Paramaters for HDL ダイアログが開いた。Top-Level source file が間違っているので、右の ... ボタンをクリックした。
IP_Packager_AXI_11_130808.png

11.Choose Top-Level source file ダイアログが開いた。bitmap_disp_cntrler_axi_master.v をクリックし、OKボタンをクリックした。
IP_Packager_AXI_12_130808.png

12.Imprt Paramaters for HDL ダイアログに戻った。正しく、bitmap_disp_cntrler_axi_master.v が Top-Level source file に入った。OKボタンをクリックした。
IP_Packager_AXI_13_130808.png

13.パラメータが認識された。
IP_Packager_AXI_14_130808.png

14.次はIPのポートを認識させる。左のペインで IP Ports をクリックした。右のペインから Port Import Dialog をクリックした。
IP_Packager_AXI_15_130809.png

15.Import Ports from HDL ダイアログが開いた。やはり、Top-Level source file が間違っているので、右の ... ボタンをクリックした。
IP_Packager_AXI_16_130809.png

16.Choose Top-Level source file ダイアログが開いた。bitmap_disp_cntrler_axi_master.v をクリックし、OKボタンをクリックした。
IP_Packager_AXI_12_130808.png

17.Imprt Ports for HDL ダイアログに戻った。正しく、bitmap_disp_cntrler_axi_master.v が Top-Level source file に入った。OKボタンをクリックした。
IP_Packager_AXI_17_130809.png

18.IP Ports に IPのポートが入力された。
IP_Packager_AXI_18_130809.png

19.IP Interface をクリックした。右のペインから Interface Wizard をクリックした。
IP_Packager_AXI_19_130809.png

20.IP Interface Wizard ダイアログが表示された。
IP_Packager_AXI_20_130809.png

21.Automatically infer an interface のラジオボタンをクリックした。
IP_Packager_AXI_21_130809.png

22.aximm(多分、AXI Memory Mappedだと思う)を選択した。Finishボタンをクリックした。
IP_Packager_AXI_22_130809.png

23.AXI4バスにマッピングされた。
IP_Packager_AXI_23_130809.png

24.IP Addressing and Memory をクリックした。s_axi_lite のアドレス・レンジが表示された。
IP_Packager_AXI_27_130809.png

25.IP GUI Customization Layout をクリックした。Refresh... をクリックした。これをクリックしないとIPをカスタマイズする際にパラメータが表示されない。
IP_Packager_AXI_28_130809.png

26.Review and Package をクリックした。Package IP ボタンをクリックした。
IP_Packager_AXI_24_130809.png

・bitmap_disp_cntrler_axi_master が、IPとしてパッケージされた。IP Catalog をクリックして見てみよう。

27.Flow Navigator -> Project Manager ->IP Catalog をクリックした。
IP_Packager_AXI_25_130809.png

28.IP Catalog タブのBase IP を展開すると、bitmap_disp_cntrler_axi_master by marsee が見えた。
IP_Packager_AXI_26_130809.png

29.bitmap_disp_cntrler_axi_master by marsee をダブルクリックすると、Customize IP ダイアログが表示された。
IP_Packager_AXI_30_130809.png

30.IP Integrator に、bitmap_disp_cntrler_axi_master by marsee をAdd IPしたところだ。
IP_Packager_AXI_31_130809.png

これで、AXI4 Master, AXI4 Lite Slaveバスを持つISEプロジェクトをVivado のプロジェクトとしてインポートして、そのプロジェクトをIPとして登録することが出来たが、パラメータの詳細な設定がされていないので、次回は分かったらその設定をいじってみたい。

AXI4 Master, AXI4 Lite Slaveバスを持つプロジェクトをVivado IP Packager でIPにする2”に続く。
  1. 2013年08月09日 05:30 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

HelioボードでLinuxをブート

Helioボードが来たので、SDカードにLinuxのブートイメージを書いて、Linuxをブートした。

Helioボードには、説明書が紙1枚だったので、RocketBoards.org Macnica Helio SoC Evaluation Kit のページの Getting Started (v0.31 Preliminary, May.15, 2013) を見ながら設定を行った。

・SDFormatter でSDカードをフォーマット

・Linux SD Card Image (Linux kernel 3.8, Preliminary, May.29, 2013)をダウンロードして、DiskImager でイメージをSDカードにWriteした。

・マニュアルに従って、USB-to-SerialのドライバをWindowsパソコンにインストールした。

・USBケーブル(ミニB)を挿すと、ピポンと言って、ドライバのインストールが始まった。USB-to-SerialのICは、USB給電のようだ。気が利いているね。

・Tera Termを立ちあげ、ボー・レートを 57600 bit/sec に設定した。

・Helioボードの設定ピンやDIP SWはマニュアルの通りだった。

・Helioボードに電源プラグを差し込んだ。(電源SWは未実装で、下のパターンに、たぶん0Ω抵抗が付いていた)

Helio_board_1_130807.jpg

・Linux が立ち上がった。
Helio_board_2_130807.png

・ルート・ディレクトリを ls してみた。
Helio_board_3_130807.png

ZedBoardのZynq-7020 より、FPGAの温度が高い感じがする。FPGAの回路が沢山入っているのだろうか?
温度を測ってみたら、47.3度だった(放射温度計)。ちなみに机の温度は28.4度だ。ず~と触っていることは難しい。

Linuxの起動メッセージを貼っておく。sshd や httpd も起動しているようだ。

U-Boot SPL 2012.10 (Apr 10 2013 - 10:09:43)
SDRAM : Initializing MMR registers
SDRAM : Calibrationg PHY
SEQ.C: Preparing to start memory calibration
SEQ.C: CALIBRATION PASSED
DESIGNWARE SD/MMC: 0


U-Boot 2012.10 (Apr 05 2013 - 14:58:42)

CPU : Altera SOCFPGA Platform
BOARD : Altera SOCFPGA Cyclone 5 Board
DRAM: 1 GiB
MMC: DESIGNWARE SD/MMC: 0
*** Warning - bad CRC, using default environment

In: serial
Out: serial
Err: serial
Net: mii0
Warning: failed to set MAC address

Hit any key to stop autoboot: 0
reading uImage

2720256 bytes read
reading socfpga.dtb

15658 bytes read
## Booting kernel from Legacy Image at 00007fc0 ...
Image Name: Linux-3.8.0
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 2720192 Bytes = 2.6 MiB
Load Address: 00008000
Entry Point: 00008000
## Flattened Device Tree blob at 00000100
Booting using the fdt blob at 0x00000100
XIP Kernel Image ... OK
OK
Loading Device Tree to 0fff8000, end 0fffed29 ... OK

Starting kernel ...

Booting Linux on physical CPU 0x0
Initializing cgroup subsys cpuset
Linux version 3.8.0 (alterasoc@alterasoc-VirtualBox) (gcc version 4.7.3 20121106 (prerelease) (crosstool-NG linaro-1.13.1-4.7-2012.11-20121123 - Linaro GCC 2012.11) ) #1 SMP Tue May 28 17:43:52 JST 2013
CPU: ARMv7 Processor [413fc090] revision 0 (ARMv7), cr=10c5387d
CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
Machine: Altera SOCFPGA, model: Altera SOCFPGA Cyclone V
Memory policy: ECC disabled, Data cache writealloc
PERCPU: Embedded 8 pages/cpu @80d6b000 s10880 r8192 d13696 u32768
Built 1 zonelists in Zone order, mobility grouping on. Total pages: 260096
Kernel command line: console=ttyS0,57600 root=/dev/mmcblk0p2 rw rootwait
PID hash table entries: 4096 (order: 2, 16384 bytes)
Dentry cache hash table entries: 131072 (order: 7, 524288 bytes)
Inode-cache hash table entries: 65536 (order: 6, 262144 bytes)
__ex_table already sorted, skipping sort
Memory: 1024MB = 1024MB total
Memory: 1033952k/1033952k available, 14624k reserved, 0K highmem
Virtual kernel memory layout:
vector : 0xffff0000 - 0xffff1000 ( 4 kB)
fixmap : 0xfff00000 - 0xfffe0000 ( 896 kB)
vmalloc : 0xc0800000 - 0xff000000 (1000 MB)
lowmem : 0x80000000 - 0xc0000000 (1024 MB)
modules : 0x7f000000 - 0x80000000 ( 16 MB)
.text : 0x80008000 - 0x804c9350 (4869 kB)
.init : 0x804ca000 - 0x804f6a80 ( 179 kB)
.data : 0x804f8000 - 0x80527038 ( 189 kB)
.bss : 0x80527038 - 0x8055eb2c ( 223 kB)
SLUB: Genslabs=11, HWalign=64, Order=0-3, MinObjects=0, CPUs=2, Nodes=1
Hierarchical RCU implementation.
NR_IRQS:16 nr_irqs:16 16
sched_clock: 32 bits at 100MHz, resolution 10ns, wraps every 42949ms
Console: colour dummy device 80x30
Calibrating delay loop... 1594.16 BogoMIPS (lpj=7970816)
pid_max: default: 32768 minimum: 301
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
Setting up static identity map for 0x395b80 - 0x395bd8
CPU1: Booted secondary processor
CPU1: thread -1, cpu 1, socket 0, mpidr 80000001
Brought up 2 CPUs
SMP: Total of 2 processors activated (3188.32 BogoMIPS).
devtmpfs: initialized
NET: Registered protocol family 16
DMA: preallocated 256 KiB pool for atomic coherent allocations
L310 cache controller enabled
l2x0: 8 ways, CACHE_ID 0x000000c0, AUX_CTRL 0x32460000, Cache size: 524288 B
hw-breakpoint: found 5 (+1 reserved) breakpoint and 1 watchpoint registers.
hw-breakpoint: maximum watchpoint size is 4 bytes.
bio: create slab at 0
FPGA Mangager framework driver
SCSI subsystem initialized
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
lcd_load_custom_fonts: i2c_master_send returns -121
lcd_cmd_no_params: i2c_master_send returns -121
lcd_cmd_one_param: i2c_master_send returns -121
lcd_cmd_no_params: i2c_master_send returns -121
lcd-comm 0-0028: LCD driver initialized
Switching to clocksource timer0
NET: Registered protocol family 2
TCP established hash table entries: 8192 (order: 4, 65536 bytes)
TCP bind hash table entries: 8192 (order: 4, 65536 bytes)
TCP: Hash tables configured (established 8192 bind 8192)
TCP: reno registered
UDP hash table entries: 512 (order: 2, 16384 bytes)
UDP-Lite hash table entries: 512 (order: 2, 16384 bytes)
NET: Registered protocol family 1
RPC: Registered named UNIX socket transport module.
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
RPC: Registered tcp NFSv4.1 backchannel transport module.
hw perfevents: enabled with ARMv7 Cortex-A9 PMU driver, 7 counters available
arm-pmu arm-pmu: PMU:CTI successfully enabled
NFS: Registering the id_resolver key type
Key type id_resolver registered
Key type id_legacy registered
NTFS driver 2.1.30 [Flags: R/W].
jffs2: version 2.2. (NAND) c 2001-2006 Red Hat, Inc.
msgmni has been set to 2019
io scheduler noop registered (default)
Serial: 8250/16550 driver, 2 ports, IRQ sharing disabled
ffc02000.serial0: ttyS0 at MMIO 0xffc02000 (irq = 194) is a 8250
console [ttyS0] enabled
ffc03000.serial1: ttyS1 at MMIO 0xffc03000 (irq = 195) is a 8250
altera_fpga_manager ff706000.fpgamgr: fpga manager [Altera FPGA Manager] registered as minor 0
brd: module loaded
at24 0-0051: 4096 byte 24c32 EEPROM, writable, 32 bytes/write
cadence-qspi ff705000.spi: master is unqueued, this is deprecated
m25p80 spi2.0: unrecognized JEDEC id ffffff
cadence-qspi ff705000.spi: Cadence QSPI controller driver
dw_spi_mmio fff00000.spi: master is unqueued, this is deprecated
dw_spi_mmio fff01000.spi: master is unqueued, this is deprecated
stmmac - user ID: 0x10, Synopsys ID: 0x37
DMA HW capability register supported
Enhanced/Alternate descriptors
RX Checksum Offload Engine supported (type 2)
TX Checksum insertion supported
Enable RX Mitigation via HW Watchdog Timer
libphy: stmmac: probed
eth0: PHY ID 00221611 at 4 IRQ 0 (stmmac-0:04) active
socfpga_phy_reset_mii writing extended registers to phyaddr 4
Initializing USB Mass Storage driver...
usbcore: registered new interface driver usb-storage
USB Mass Storage support registered.
Using Slave mode
dwc_otg ffb40000.usb: DWC OTG Controller
dwc_otg ffb40000.usb: new USB bus registered, assigned bus number 1
dwc_otg ffb40000.usb: irq 160, io mem 0xffb40000
Init: Port Power? op_state=b_peripheral
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 1 port detected
mousedev: PS/2 mouse device common for all mice
rtc-ds1307 0-0068: rtc core: registered ds1339 as rtc0
i2c /dev entries driver
Synopsys Designware Multimedia Card Interface Driver
dwmmc_socfpga ff704000.dwmmc0: couldn't determine pwr-en, assuming pwr-en = 0
dwmmc_socfpga ff704000.dwmmc0: Using internal DMA controller.
dwmmc_socfpga ff704000.dwmmc0: DW MMC controller at irq 171, 32 bit host data width, 1024 deep fifo
mmc_host mmc0: Bus speed (slot 0) = 100000000Hz (slot req 400000Hz, actual 400000HZ div = 125)
dwmmc_socfpga ff704000.dwmmc0: 1 slots initialized
dwmmc_socfpga ff704000.dwmmc0: Version ID is 240a
ledtrig-cpu: registered to indicate activity on CPUs
usbcore: registered new interface driver usbhid
usbhid: USB HID core driver
oprofile: using arm/armv7-ca9
TCP: cubic registered
NET: Registered protocol family 17
NET: Registered protocol family 15
Key type dns_resolver registered
VFP support v0.3: implementor 41 architecture 3 part 30 variant 9 rev 4
ThumbEE CPU extension supported.
Registering SWP/SWPB emulation handler
Waiting for root device /dev/mmcblk0p2...
dwmmc_socfpga ff704000.dwmmc0: data FIFO error (status=00000800)
mmc0: problem reading SD Status register.
mmc_host mmc0: Bus speed (slot 0) = 100000000Hz (slot req 50000000Hz, actual 50000000HZ div = 1)
mmc0: new high speed SDHC card at address b368
mmcblk0: mmc0:b368 43579 7.45 GiB
mmcblk0: p1 p2 p3
++OTG Interrupt: A-Device Timeout Change++
kjournald starting. Commit interval 5 seconds
EXT3-fs (mmcblk0p2): using internal journal
EXT3-fs (mmcblk0p2): recovery complete
EXT3-fs (mmcblk0p2): mounted filesystem with ordered data mode
VFS: Mounted root (ext3 filesystem) on device 179:2.
devtmpfs: mounted
Freeing init memory: 176K
INIT: version 2.88 booting
Starting Bootlog daemon: bootlogd.
Configuring network interfaces... eth0: device MAC address 82:fa:a7:3f:a0:7b
udhcpc (v1.20.2) started
Sending discover...
Sending discover...
Sending discover...
No lease, failing
Starting portmap daemon...
INIT: Entering runlevel: 5
Starting OpenBSD Secure Shell server: sshd
done.
Starting syslogd/klogd: done
Starting Lighttpd Web Server: lighttpd.
Stopping Bootlog daemon: bootlogd.

Poky 8.0 (Yocto Project 1.3 Reference Distro) 1.3 socfpga_cyclone5 ttyS0

socfpga_cyclone5 login:

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

Vivado チュートリアル Designing with IP Lab3 (IP Packager)3

Vivado チュートリアル Designing with IP Lab3 (IP Packager)2”の続き。

前回で、IP Catalog に自作IPを登録することが出来た。今回は、前回のカスタムIPを新しいプロジェクトで使用するためのチュートリアルとなる。

36.前回のVivado プロジェクトを終了する。

37.新しくVivado 2013.2を起動する。

38.Getting Started 画面で、Create New Project をクリックする。
UG939_93_130805.png

39.Create a New Vivado Project ダイアログが表示された。
UG939_94_130805.png

40.Project name に test_IP を入力して、Project location は lab3 を指定する。
UG939_95_130805.png

41.RTL Projcet のラジオボタンをクリックする。Do not specify sources at this time にチェックを入れる。
UG939_96_130805.png

42.xc7z020clg484-1 を選択した。
UG939_97_130805.png

43.Summary が表示された。Finishボタンをクリックした。
UG939_98_130805.png

44.Vivado2013.2 のプロジェクトが立ち上がった。
UG939_99_130805.png

45.Flow Navigator -> Project Manager -> IP Catalog をクリックした。
UG939_100_130805.png

46.右のウインドウにIP Catalog が開く。そこで、右クリックし、右クリックメニューから IP Setting... を選択した。
UG939_101_130805.png

47.IP の Repository Managaer タブで、Add Repository... ボタンをクリックした。
UG939_102_130805.png

・前回作製したcustom_vtc IP を作製した新しい test_IP プロジェクトの IP Catalog に追加する。

48.lab3 の custom_vtc フォルダを選択した。Selectボタンをクリックした。
UG939_103_130805.png

49.IP Repositories ペインに custom_vtc (Project) が入り、IP in Slected Repository ペインに custom_vtc by marsee が入った。OKボタンをクリックした。
UG939_104_130805.png

50.Video & Image Processing カテゴリに、custom_vtc by marsee が入った。Base IP のカテゴリにも入っていると思う。
UG939_105_130805.png

51.custom_vtc by marsee をダブルクリックした。

52.custom_vtc by marsee の Customize IP ダイアログが表示された。OKボタンをクリックした。
UG939_106_130805.png

53.Generate Output Products ダイアログが表示された。Gnerate ボタンをクリックした。
UG939_107_130805.png

54.custom_vtc が Sources ウインドウに入った。
UG939_108_130805.png

・custom_vtc by marsee を IP Integrator で使用できるかどうか?テストしてみた。

55.Flow Navigator -> IP Integrator -> Create Block Desgin をクリックした。
UG939_110_130805.png

56.Create Block Design ダイアログが表示された。OKボタンをクリックした。
UG939_111_130805.png

57.Diagram タブの Add IP をクリックした。IPを選択するダイアログが開き、Search に cust と入れると、custom_vtc by marsee が出てきた。custom_vtc by marsee を選択した状態で、Enterキーを押した。
UG939_112_130805.png

58.custom_vtc by marsee を IP Integrator で表示することが出来た。
UG939_113_130805.png

59.DIagram タブの X をクリックして、セーブしないで終了した。

60.Flow Navigator -> Synthesis -> Run Synthesis をクリックした。
UG939_114_130807.png

61.Synthesis が成功した。インプリメントを続いて行う。OKボタンをクリックした。
UG939_115_130807.png

62.インプリメントが終了した。Implemented Design を開く。OKボタンをクリックした。
UG939_116_130807.png

63.Implemented Design が開いた。
UG939_117_130807.png

これで、自作IPをパッケージして、他のプロジェクトで使用することが出来た。
  1. 2013年08月07日 05:32 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

Vivado チュートリアル Designing with IP Lab3 (IP Packager)2

Vivado チュートリアル Designing with IP Lab3 (IP Packager)1”の続き。

22.Package IP タブの右のペインで、IP File Groups を選択した。右のペインで右クリックし、右クリックメニューから Add File Group... を選択した。
UG939_79_130805.png

23.Add IP File Group ダイアログが表示された。Product Guide を選択して、OKボタンをクリックした。
UG939_80_130805.png

24.IP File Group に Product Guide が追加された。
UG939_81_130805.png

25.Product Guide をクリックして、右クリックし、右クリックメニューから Add Files... を選択した。
UG939_82_130805.png

26.Add IP Files ダイアログが表示された。Add Files... ボタンをクリックした。
UG939_83_130805.png

27.Files of types を PDF files(.PDF) に変更して、custom_vtc_manual.pdf を選択した。OKボタンをクリックした。
UG939_84_130805.png

28.custom_vtc_manual.pdf が、Add IP Files ダイアログに表示された。Copy source into project をチェックして、OKボタンをクリックした。
UG939_85_130805.png

29.Package IP タブに、custom_vtc_manual.pdf が表示された。
UG939_86_130805.png

30.Package IP タブの左のペインでReview and Package を選択した。(なお、IP File Groups に!が表示されているが、これはProduct Guide をプロジェクトにコピーしなかったためだ、現在、マニュアルをプロジェクトにコピーしているので解消されている)
UG939_87_130805.png

31.Tools メニューから Project Settings... を選択した。
UG939_88_130805.png

32.左のペインで IP を選択し、Pakager タブを選択する。確認したら Cancel ボタンをクリックする。
UG939_89_130805.png

33.Package IP タブの左のペインでReview and Package を選択して、Package IP ボタンをクリックした。(なお、IP File Groups に!が表示されているが、これはProduct Guide をプロジェクトにコピーしなかったためだ、現在、マニュアルをプロジェクトにコピーしているので解消されている)
UG939_90_130805.png

34.Package IP が終了後、Flow Navigator の IP Catalog をクリックした。
UG939_91_130805.png

35.custom_vtc が、Base IP とVideo & Image Processing カテゴリに登録された。
UG939_92_130805.png
  1. 2013年08月06日 05:35 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

Vivado チュートリアル Designing with IP Lab3 (IP Packager)1

Vivado Design Suite Tutorial Designing with IP UG939 (v 2013.2) June 26, 2013”の 32ページの Lab3 をやってみる。なお、Xilinxのサイトからダウンロードすることができるデザインファイル(ug939-design-files.zip) は、ライセンスの懸念から使用しない。以前、AXI VDMAの検証用に使用した custom_vtc を使用する。custom_vtc については、以下のブログを参照のこと。

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


(注:ダイアログのNext>ボタンをクリックする時は文章に書きませんので、ご了承下さい)

1.Vivado を立ち上げる。(2013.2)

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

3.Create a New Vivado Project ダイアログが開いた。
UG939_61_130805.png

4.lab3 フォルダに custom_vtc プロジェクトを作製する。
UG939_62_130805.png

5.すでにISEのプロジェクトがあるので、プロジェクトをインポートする。Imported Project のラジオボタンをクリックした。
UG939_63_130805.png

6.Imported Project のフォルダへのパスを入力した。
UG939_64_130805.png

7.Summary ダイアログが表示された。Finishボタンをクリックした。
UG939_65_130805.png

8.Import ISE Project ダイアログが表示された。OKボタンをクリックした。
UG939_66_130805.png

9.custom_vtc プロジェクトが作製された。
UG939_67_130805.png

10.Tools メニューから Package IP... を選択した。
UG939_68_130805.png

11.Package New IP ダイアログが表示された。
UG939_69_130805.png

12.Package your project ラジオボタンがクリックされているので、そのままにする。
UG939_70_130805.png

13.Finishボタンをクリックした。
UG939_71_130805.png

14.IP Packager Summary が表示された。OKボタンをクリックした。
UG939_72_130805.png

15.右のウインドウに Package IP タブが追加された。
UG939_73_130805.png

16.IP Identification の内容を以下のように変更した。

Vendor: marsee
Display Name: coustom_vtc by marsee
Description: Custom Video Timing Controller (marsee)
Vendor Display Marsee
Company Url: http://marsee101.blog19.fc2.com/


17.Categories を設定するために、右の... ボタンをクリックした。
UG939_74_130805.png

18.Choose IP Categories ダイアログが表示された。Base IPにチェックが入っていた。
UG939_75_130805.png

19.Video & Image Processing にもチェックを入れた。OKボタンをクリックした。
UG939_76_130805.png

20.Categories は、Base IP と Video & Image Processing になった。
UG939_77_130805.png

21.Possible Missing Infomation を見るとMissing product guide になっているので、マニュアルを追加する。
UG939_78_130805.png

Vivado チュートリアル Designing with IP Lab3 (IP Packager)2”に続く。
  1. 2013年08月06日 04:40 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

Vivado チュートリアル Designing with IP Lab2 2(IP Project)

Vivado チュートリアル Designing with IP Lab2 1(IP Project の生成)”の続き。

Step 3: Using Third Party Simulators

ModelSim/QuestaSim でのシミュレーションのやり方なので飛ばします。

Step 4: Generating a Netlist for IP

24.char_fifo を Sources ウインドウで選択し、右クリックメニューから Generate Output Products を選択する。
UG939_45_130804.png

25.Generate Output Products ダイアログが開いた。Generate Synthesized Design Checkpoint (.dcp)にチェックを入れて、Generate ボタンをクリックした。
UG939_46_130804.png

26.synth_design が始まった。
UG939_47_130804.png

27.synth_design が完了した。
UG939_48_130804.png

28.char_fifo フォルダに以下のファイルが増えていた。char_fifo.dcp、char_fifo_synplify.vho、char_fifo_synplify_stub.v
UG939_49_130804.png

29.Search に ethernet と入力してIPを検索して、AXI EthernetLite をダブルクリックして、カスタマイズする。(Tri Mode Ethernet MAC は Purchase なので、IPを購入しないと使用できなかった)
UG939_50_130804.png

30.AXI EthernetLite のカスタマイズ・ダイアログが開いた。AXI Protocol をAXI4 にして、OKボタンをクリックした。
UG939_51_130804.png

31.Generate Output Products ダイアログが開いた。Generate Synthesized Design Checkpoint (.dcp)にチェックを入れて、Generate ボタンをクリックした。
UG939_52_130804.png

32.AXI EthernetLite がプロジェクトに入った。
UG939_53_130804.png

33.C:\Users\Masaaki\Documents\Vivado\Zynq\UG939\lab2\my_lp に axi_ethernetlite_0 フォルダが増えた。
UG939_54_130804.png

34.axi_ethernetlite_0 フォルダの内容。
UG939_55_130804.png

Step 5: Writing a Simulation Netlist

35. char_fifo_synth_1 を右クリックして、右クリックメニューから、Open Synthesized Design を選択した。
UG939_56_130804.png

36. char_fifo_synth_1 の Synthesized Design が開いた。
UG939_57_130804.png

37.Tcl Console で、下に示す2つのコマンドを入れて、Verilog と VHDL のネットリストを生成した。

write_verilog -mode funcsim /Users/Masaaki/Documents/Vivado/Zynq/UG939/lab2/my_lp/char_fifo/char_fifo_sim.v
write_vhdl -mode funcsim /Users/Masaaki/Documents/Vivado/Zynq/UG939/lab2/my_lp/char_fifo/char_fifo_sim.vhd


UG939_58_130804.png

38.char_fifo フォルダに、char_fifo_sim.v、char_fifo_sim.vhd ファイルが増えていた。
UG939_59_130804.png

・char_fifo_sim.v、char_fifo_sim.vhd どちらも、LUT4 や FDCE プリミティブなどを使ってあって、完全にネットリストの雰囲気だった。

Step 6: Using Third Party Synthesis Tools

Synopsys®Synplify Proでインプリメントするので飛ばします。
  1. 2013年08月04日 04:39 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

Vivado チュートリアル Designing with IP Lab2 1(IP Project の生成)

Lab 2: Creating and Managing Reusable IP

・カスタムIPをリポジトリに登録して、管理できるようだ。

・IPカスタマイズファイルがあるらしい。.xci だそうだ。

・IPには、前回見たように、論理合成用、シミュレーション用やサンプルデザインなどを統合できるようだ。

・IP管理の詳細は、UG896 を参照のこと。

・この演習では、リポジトリ内のカスタムIPを生成し、検証します。

・カスタムIPのリポジトリを生成することができる。

・カスタムIPのリポジトリ内に synthesis design checkpoint (DCP) というファイルを作ることができるらしい。

・DCPを使うと合成を高速化出来たり、サードパーティの合成ツールでブラックボックスIP用ネットリストとして使うことができるらしい

Step 1: Starting a Manage IP session

1.Vivado を起動する。(Vivado 2013.2)

2.Manage IP をクリックし、New IP Location... を選択した。
UG939_30_130802.png

3.Create a New Customized IP Location ダイアログが出た。Next>ボタンをクリックした。
UG939_31_130802.png

4.Open IP Catalog ダイアログが出た。PartでFPGAを選択する。右の…ボタンをクリックし、xc7k70tfbg484-2 を選択した。
UG939_32_130802.png

5.Target language をVerilog に、IP location を設定して、Finishボタンをクリックした。
UG939_33_130802.png

6.IP location のフォルダが無かったので、Create Directory ダイアログが出た。OKボタンをクリックした。
UG939_34_130802.png

7.IPの my_lp プロジェクトの IP Catalog が表示された。
UG939_35_130802.png

Step 2: Customizing the FIFO Generator

8.Search に fifo と入力すると fifo の名前のIPが下にリストされるので、一番下のFIFO Generator をダブルクリックした。
UG939_36_130802.png

9.Component Name を char_fifo に変更した。

10.Interface Type は Native でそのまま。

11.Fifo Implementation はドロップダウンメニューで、Independent Clocks Block RAM に変更した。
UG939_37_130802.png

12.Native Ports タブをクリックした。

13.Read Mode のラジオボタンを First Word Fall Through に変更した。

15.Write Width を 8 に変更した。

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

17.Summary タブをクリックして、Summary を表示した。OKボタンをクリックした。
UG939_39_130802.png

18.Generate Output Products ダイアログが出た。Generate ボタンをクリックした。
UG939_40_130802.png

・最新IPコアを使ってくださいとのこと。

・前のバージョンは再カスタマイズや generate output products が出来ないそうだ。

・カスタムIPリポジトリに入っている前のバージョンのIPは、output prouducts ができるそうだ。

19.char_fifo が生成された。
UG939_41_130802.png

20.C:\Users\Masaaki\Documents\Vivado\Zynq\UG939\lab2\my_lp に char_fifo と managed_ip_project の2つのフォルダが生成された。
UG939_42_130802.png

21.char_fifo フォルダの内容を示す。
UG939_42_130802.png

22.managed_ip_project フォルダの内容を示す。
UG939_43_130802.png

23.Vivado に戻って、Source ウインドウの char_fifo を展開した。いろいろなファイルが生成されている。
UG939_26_130801.png

”Vivado チュートリアル Designing with IP Lab2 2(IP Project)”に続く。
  1. 2013年08月03日 04:25 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0
»