« Spartan-6のMCBを使ってみた | トップページ | Spartan-6のODDR2の件、解決 »

2010.07.30

ISE12.1のバグを発見した(かも)

ISE12.1のバグを発見したかもしれません。

現象は、
Spartan-6において、特定のピンでODDR2の出力が変化しない
というものです。

具体的にいうと、XC6S16LX CSG324では、G1番ピン、G3番ピン、G16番ピン、G18番ピンのODDR2が動作しません。これらのピンは、MCBを使う際のクロック端子に使われるピンです。

G16_bug1

MCBのクロック出力端子はODDR2で使うなということでしょうか。これでは、自作のDDR2 SDRAMコントローラが作れません。つまり「Spartan-6にはMCBがあるんだから自分でSDRAMコントローラを作るな」ということでしょうか。あんまりです。

ソースコードを公開しますので、お時間のある方は試してみてください。


library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
library UNISIM;
use UNISIM.VComponents.all;
entity main is
Port ( xtalclk_ip : in STD_LOGIC;
DDR2_CK_P : out std_logic;
DDR2_CK_N : out std_logic
);
end main;
architecture Behavioral of main is
signal clk : std_logic;
signal clkn : std_logic;
begin
clk <= xtalclk_ip;
clkn <= not clk;
ODDR2_inst_p : ODDR2 port map (
Q => DDR2_CK_P,
C0 => clk,
C1 => clkn,
CE => '1',
D0 => '0',
D1 => '1',
R => '0',
S => '0'
);
ODDR2_inst_n : ODDR2 port map (
Q => DDR2_CK_N,
C0 => clk,
C1 => clkn,
CE => '1',
D0 => '1',
D1 => '0',
R => '0',
S => '0'
);
end Behavioral;


NET "xtalclk_ip" TNM_NET = "xtalclk_ip";
TIMESPEC "TS_xtalclk_ip" = PERIOD "xtalclk_ip" 20 ns HIGH 50 %;
NET "xtalclk_ip" LOC = "D11";
NET "DDR2_CK_P" LOC = "G3"; # G16 for MCB1 , G1 for MCB1
NET "DDR2_CK_N" LOC = "G1"; # G18 for MCB1 , G3 for MCB3

なお、ISE11では問題ありませんでした。12.2で改善されているといいのですが・・

さらに不思議なことに、この現象は正側のODDR2ではD0に固定値'0'、D1に固定値'1'を入れた場合に起こります。負側のODDR2ではD0に固定値'1'、D1に固定値'0'を入れた場合にのみ起こります。
G16_bug2

さっそく、XILINXのWebCaseに投げてみることにします。

追記:解決しました。アンサーにあるそうです。詳細は次の記事で

|

« Spartan-6のMCBを使ってみた | トップページ | Spartan-6のODDR2の件、解決 »

コメント

コメントを書く



(ウェブ上には掲載しません)




« Spartan-6のMCBを使ってみた | トップページ | Spartan-6のODDR2の件、解決 »