DDRレジスタのインスタンシエート

[] [] []


IOブロック内のFFはクロックの立ち上がりと立ち下がりの両エッジで動くDouble Data Rate(DDR)レジスタとして使えるようになっている。

1)クロック出力

クロックをFPGA外部へ出力するとき、直接出力するとクロックバッファからPADまでの配置配線によって遅延が変わってしまうが、出力DDRレジスタを使えば一定の遅延で出力できる。特に、データといっしょにクロックを出力するとき(ソースシンクロナスクロック)に使う。

 

出力DDRレジスタはRTLで書けないのでFPGA固有のプリミティブをインスタンシエートする。プリミティブの代わりにIP生成ツールでラッパをかぶせたものを生成してもよい。

/* Xilinxの出力DDRレジスタ */

ODDR oddr_clk_out

    (.Q(clk_out),.D1(1'b1),.D2(1'b0)

    ,.C(clk),.CE(1'b1),.R(1'b0),.S(1'b0));

 

2DDR入力

入力DDRレジスタはRTLで書けるが、FPGA固有のプリミティブをインスタンシエートした方が確実かもしれない。

/* RTLで書いた入力DDRレジスタ */

(* iob="true" *) input[15:0] din;

always @(posedge clk) din_pos_reg <= din;

always @(negedge clk) din_neg_reg <= din;

 

/* Xilinxの入力DDRレジスタ */

IDDR iddr_din

    (.Q1(din_pos_reg),.Q2(din_neg_reg),.D(din)

    ,.C(clk),.CE(1'b1),.R(rst),.S(1'b0));


[] [] []