コンポーネントレベルIP (CLIP) をFPGAターゲットに追加するには、FPGAターゲットにコンパイルするためにIPをVHDLコードとして用意する必要があります。

このチュートリアルでは、フリップフロップを使用した16ビット加算器を使用します。

以下のVHDLコードは、2つのI16数値を取得して、その合計を1つのI16数値で返します。また、VHDLコードにはFPGAモジュールからのリセット信号およびクロックが必要です。このサンプルコードを使用する場合は、コードをテキストファイルにコピーして、ファイルをDemoClipAdder.vhdという名前で保存します。

メモ すべての制約が確実に適用されるように、VHDLコードには、インスタンスの境界をスタティックに保ち、階層境界に沿った最適化を防ぐ、keep_hierarchy属性が含まれています。

Library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity DemoClipAdder is port ( clk : in std_logic; aReset : in std_logic; cPortA : in std_logic_vector(15 downto 0); cPortB : in std_logic_vector(15 downto 0); cAddOut : out std_logic_vector(15 downto 0) := (others => '0') ); end DemoClipAdder; architecture rtl of DemoClipAdder is attribute keep_hierarchy : string; attribute keep_hierarchy of rtl : architecture is "yes"; begin process(aReset, clk) begin if(aReset = '1') then cAddOut <= (others => '0'); elsif rising_edge(clk) then cAddOut <= std_logic_vector(signed(cPortA) + signed(cPortB)); end if; end process; end rtl;

CLIPに制約を追加する

以下のUCFコードにより、合計出力のクロックレートは少なくとも100 MHzに制約されます。このサンプルコードを使用する場合は、コードをテキストファイルにコピーして、ファイルをDemoClipAdder.ucf (Xilinx ISE) またはDemoClipAdder.xdc (Xilinx Vivado) という名前で保存します。この制約を行うには、CLIPを構成ウィザードのシンセシスファイルとしてVHDファイルと一緒にこの制約ファイルを追加します。

(Xilinx ISE)

NET "%ClipInstancePath%/cAddOut*" TNM_NET = %ClipInstanceName%AddOut;TIMESPEC TS_%ClipInstanceName%ThruAdder = TO "%ClipInstanceName%AddOut" 10 ns;

(Xilinx Vivado)

create_clock -period 10.000 -name %ClipInstanceName%Clk -waveform {0.000 5.000} -add [get_pins %ClipInstancePath%/clk]set_clock_latency -clock [get_clocks {%ClipInstanceName%Clk}] 10.0 [get_pins {%ClipInstancePath%/cAddOut[0]}]

前: CLIPチュートリアル: コンポーネントレベルIPをFPGAプロジェクトに追加する 次: CLIPチュートリアル パート2: インタフェースを定義する