FC2カウンター FPGAの部屋 Virtex4の入力用DDRレジスタ(IDDR)1
FC2ブログ

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

FPGAの部屋

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

Virtex4の入力用DDRレジスタ(IDDR)1

Virtex4のお勉強をするに当たって入力用DDRレジスタ(IDDR)からやってみたいと思う。Virtex4の内のxc4vlx25-11FF676を使用する。(Virtex4の基板は持っていないので実際には確かめられない)
まずはIDDRをみると、3つのモードがあるようだ。そのうちのOPPOSITE_EDGEモードからやってみようと思う。これはVirtex2の入力用DDRと同一のモードだ。
8つのOPPOSITE_EDGEモードのIDDRをインスタンスして動作を見てみることにする。
クロックはDCMを通して供給する。


entity V4_IDDR_test is
Port ( clk : in STD_LOGIC;
indata : in std_logic_vector(7 downto 0);
q1 : out std_logic_vector(7 downto 0);
q2 : out std_logic_vector(7 downto 0));
end V4_IDDR_test;

.....

IDDR_GEN : for i in 7 downto 0 generate
IDDR_inst : IDDR generic map(
DDR_CLK_EDGE => "OPPOSITE_EDGE"
)port map(
Q1 => q1(i),
Q2 => q2(i),
C => clk_out,
CE => logic1,
D => indata(i),
R => iddr_reset,
S => logic0
);
end generate IDDR_GEN;


これをインプリメントしてFPGA Editorでindataパッドを見てみたのが下の図だ。Virtex2やVirtex2proと比べてIOBの中に入出力用DDRレジスタが入っていないで別になっているようだ。
(下の図はindataを1つしかインスタンスしていない時にキャプチャしたものである)
Virtex4_IDDR_1_060608.png

図1 indataのIOパッド付近の様子

図1で青いところが入力用のDDRレジスタが入っている箱である。中をダブルクリックして内部がどうなっているかを見てみる。
Virtex4_IDDR_2_060608.png

図2 入力用DDRレジスタ

図2を見ると上の2つのD-FFしか使用していない。Virtex2と同じだ。次に図1で赤い箱はIO標準だけを設定できるところのようだ。LVCMOS,LVTTL,LVDS,SSTL2などだ。
Virtex4_IDDR_3_060608.png

図3 IO標準の設定

ためしにDDRのデータを入れて論理シミュレーションで確かめてみると、図4の用にVirtex2と同様の波形になった。
Virtex4_IDDR_wave_060608.png

図4 OPPOSITE_EDGEモードのIDDRでのシミュレーション波形

まったくUCFを設定せずにISEツールにお任せでインプリメントした。Timing AnalyzerでAnalyzeメニューからAgainst Auto Generated Design Constrains...で見てみると、セットアップ時間は1.395ns、クロックからの出力時間は5.040nsのようだ。
下にセットアップ時間のTiming Analyzer結果を示す。
Virtex4_IDDR_4_060608.png

図5 セットアップ時間のTiming Analyzer結果

今度は比較するためにISEのBack-annotate Pin Locationsをダブルクリックして、今出来たインプリメントのIOピンのロケーションをUCFファイルにバックアノテーションした。出来たUCFファイルは下のようになる。

#PINLOCK_BEGIN

NET "indata<1>" LOC = "C19";
NET "indata<2>" LOC = "B19";
NET "indata<3>" LOC = "F18";
NET "q1<0>" LOC = "B20";
NET "indata<4>" LOC = "A19";
NET "q1<1>" LOC = "C18";
NET "indata<5>" LOC = "B17";
NET "q1<2>" LOC = "A20";
NET "indata<6>" LOC = "E20";
NET "q1<3>" LOC = "E18";
NET "indata<7>" LOC = "K18";
NET "q2<0>" LOC = "J19";
NET "q1<4>" LOC = "A18";
NET "q2<1>" LOC = "D19";
NET "q1<5>" LOC = "F17";
NET "q2<2>" LOC = "H18";
NET "q1<6>" LOC = "F20";
NET "q2<3>" LOC = "D18";
NET "q1<7>" LOC = "L19";
NET "q2<4>" LOC = "E17";
NET "q2<5>" LOC = "A17";
NET "q2<6>" LOC = "G20";
NET "q2<7>" LOC = "F22";
NET "clk" LOC = "AA14";
NET "indata<0>" LOC = "B21";
#PINLOCK_END


となった。
次は新たに増えたSAME_EDGEモードを試してみようと思う。
  1. 2006年06月08日 22:01 |
  2. Virtex4のお勉強
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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