FC2カウンター FPGAの部屋 2010年10月21日
FC2ブログ

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

FPGAの部屋

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

AlteraのFPGAでのクロック出力とデータ出力1

XilinxでFPGAからSDRAMなどの外部デバイスにクロックを供給する場合は、グローバルクロックからIOブロック(IOB)のDDRレジスタを叩いてクロックを生成した。データも同じグローバルクロックラインからクロックを供給されるクロックを使用するものは、IOBのレジスタ(DDR or SDR)を使用するとFPGAから供給するクロックと大体(スキューがあるときがあるから)同期できた。
Alteraではどうなんだろう?FPGAからSDRAMなどの外部デバイスにクロックを供給する場合のクロックの遅延は?出力するデータの同期はどうなるのか、IOブロックの中のFFを使用するにはどうするのか?実際にDE0のCyclone III (EP3C16F484C6)で、テストプロジェクトを作って調べてみることにした。

まずは、MegaWizard Plug-In Manager でALTPLLを作成して、50MHz入力、133.333MHz外部出力用のc0と内部で使用するためのc1を作成した。
CLK_DATA_test_1_101021.png

これを使って、上のモジュール(CLK_DATA_test.v)を書いた。CLK_DATA_test.vを下に示す。

// CLK_DATA_test.v

`default_nettype none

module CLK_DATA_test (
    input    wire    clk,
    input    wire    reset,
    input    wire    [7:0] din,
    output    wire    clk_out,
    output    wire    [7:0] dout
);
    
    reg [7:0] d0, d1, d2;
    wire c0_sig, c1_sig;
    wire locked_sig;
    wire reset_sig;

    clk_data_test_pll    clk_data_test_pll_inst (
        .areset ( reset ),
        .inclk0 ( clk ),
        .c0 ( c0_sig ),
        .c1 ( c1_sig ),
        .locked ( locked_sig )
    );
    
    assign reset_sig = ~locked_sig;
    
    always @(posedge c1_sig) begin
        if (reset_sig) begin
            d0 <= 8'd0;
            d1 <= 8'd0;
            d2 <= 8'd0;
        end else begin
            d0 <= din;
            d1 <= d0;
            d2 <= d1;
        end
    end
    assign dout = d2;
    
    assign clk_out = c0_sig;
    
endmodule

`default_nettype wire


これで、Quartus II 10.0SP1でコンパイルしてみた。制約ファイルは全く書いていない状態だ。
CLK_DATA_test_2_101022.png

次にChip Plannerを起動して、内部を覗いてみた。
左下をほんの少し使ってある。どうやら、4つの隅にPLLが実装されているようだ。
CLK_DATA_test_3_101022.png

使っている部分を拡大する。ピンクの四角や黒い四角で囲んだ部分が使用されている部分だ。
CLK_DATA_test_4_101022.png

黒い四角で囲んだ部分がPLLなので、これをダブルクリックすると内部構造が見える。Resource Property Editorが開いてPLLのプロパティを見ることができた。
CLK_DATA_test_5_101022.png

CLK0とCLK1がイネーブルされて、133.33MHzが出力されるように設定されている。

さて、一番見たかったのが、最後のFFのd2が何処に割り当てられているかだ。IOブロックのFF(Flip-Flop)かそれともLE(Logic Element)か?
LEの割り当てられていた。
CLK_DATA_test_6_101022.png

PLLのC0の出力先IOピン(clk_out)を見てみる。
CLK_DATA_test_7_101022.png

PLLからIOパッドまで行く配線は立ち上がりの遅延が1.764ns、立ち下がりの遅延が1.783nsだった。
次に、PLLでc0とc1の配線を反対にしてコンパイルしてみた。Chip Planner を立ち上げて、PLLからIOパッドまで行く配線を見てみたが、配線遅延は変化がなかった。

  1. 2010年10月21日 05:50 |
  2. AlteraのFPGA
  3. | トラックバック:0
  4. | コメント:0