FC2カウンター FPGAの部屋 ISimでシミュレーションするときにunisimライブラリを使用する
FC2ブログ

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

FPGAの部屋

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

ISimでシミュレーションするときにunisimライブラリを使用する

VHDLで書いているときに、自分が使用するプリミティブなどのライブラリをuse する必要がある。
例えば、VHDLを使用して、Virtex-5で出力用のDDRレジスタ、ODDRを使用して、論理シミュレーションする場合には、unisimライブラリをuseする必要がある。

間抜けな話だが、これを忘れてしまって、少々悩んでしまった。備忘録として書いておく。

使用するボードはXUPV5-LX110Tで、キャラクタ・ディスプレイ・コントローラをDVI出力で出力しようとしている。
書いたVHDLソースの一部を下に貼っておく。

-- CharDispCtrlerTest.vhd

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
USE ieee.std_logic_arith.all;

entity CharDispCtrlerTest is
    port(
        clk : in std_logic;
        reset : in std_logic;
        
        dvi_xclk_p : out std_logic;    
        dvi_xclk_n : out std_logic;
        dvi_reset_b : out std_logic;
        dvi_hsync : out std_logic;
        dvi_vsync : out std_logic;
        dvi_de : out std_logic;
        dvi_d : out std_logic_vector(11 downto 0)
    );
end CharDispCtrlerTest;

    ODDR_dvi_xclk_p : ODDR
    port map(
        Q => dvi_xclk_p,
        C => clkdv,
        CE => '1',
        D1 => '1',
        D2 => '0',
        R => reset,
        S => '0'
    );
    
    ODDR_dvi_xclk_n : ODDR generic  map(
        DDR_CLK_EDGE  =>  "OPPOSITE_EDGE",  --  "OPPOSITE_EDGE"  or  "SAME_EDGE"
        INIT  =>  '1',      --  Initial  value  for  Q  port  (’1’  or  ’0’)
        SRTYPE  =>  "SYNC")  --  Reset  Type  ("ASYNC"  or  "SYNC")
    port map(
        Q => dvi_xclk_n,
        C => clkdv,
        CE => '1',
        D1 => '0',
        D2 => '1',
        R => reset,
        S => '0'
    );


Virtex-5用のODDRプリミティブを使用している。上のソースのようにunisimのuse宣言がないと、下のシミュレーションのように信号が'U'になってしまう。
ISim_2_110415.png

左のInstance and Process Nameウインドウを見ても、ODDRのインスタンスがない。
ISimでは下のようなワーニングが出ている。

WARNING:HDLCompiler:89 - "C:/HDL/FndISEWork/Virtex5_VLX110T/CharDispCtrler/CharDispCtrlerTest/CharDispCtrlerTest_synth/../CharDispCtrlerTest.vhd" Line 191: remains a black-box since it has no binding entity.


そこで、umisimライブラリ書き足した。

-- CharDispCtrlerTest.vhd

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
USE ieee.std_logic_arith.all;

library unisim;
use unisim.vcomponents.all;


こうすると、ちゃんと左のInstance and Process NameウインドウにODDRがインスタンスされて、シミュレーションが正常になった。
ISim_3_110415.png

unisimを書いていないと、ISimでエラーにならずにワーニングが出るだけだ。何でシミュレーションがおかしいのか、わからないので注意。
  1. 2011年04月17日 16:23 |
  2. ISim
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
https://marsee101.blog.fc2.com/tb.php/1778-dfc76179
この記事にトラックバックする(FC2ブログユーザー)