FC2カウンター FPGAの部屋 Synchronizer IP をVivado 2016.2 で作った
fc2ブログ

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

FPGAの部屋

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

Synchronizer IP をVivado 2016.2 で作った

PmodHB5 のセンサー・フィードバック処理IP を作ってみた2”で作ったセンサー・フィードバック端子の入力はベースクロックに同期しているわけではないので、シンクロナイザーが必要だ。
FF を数個並べてシンクロナイザーを作ることにした。これはVivado HLS で作ろうとしてみたのだが、やはり作ることは難しい。
そこで、久しぶりにVerilog HDL を使って、シンクロナイザーを作ることにした。

ZYBO 用のVivado 2016.2 のSynchronizer プロジェクトを作成した。
Synchronizer_1_160630.png

Synchronizer.v を示す。 for 文を使用している。

// Synchronizer.v
// 2016/06/29 by marsee
//

`default_nettype none

module Synchronizer #(
    parameter   integer NUMBER_OF_STAGES    = 2,
    parameter   integer BIT_WIDTHS          = 1
)(
    input   wire                        clk,
    input   wire    [BIT_WIDTHS-1:0]    inp,
    output  wire    [BIT_WIDTHS-1:0]    outp
);

    integer i;
    reg [BIT_WIDTHS-1:0] ff[NUMBER_OF_STAGES-1:0];

    always @(posedge clk) begin : proc_gen_ff
        for (i=0; i<=NUMBER_OF_STAGES-1; i=i+1) begin
            if (i==0) begin
                ff[i] <= inp;
            end else begin
                ff[i] <= ff[i-1];
            end
        end
    end
    assign outp = ff[NUMBER_OF_STAGES-1];
endmodule

`default_nettype wire


NUMBER_OF_STAGES にFF の段数を与えて、BIT_WIDTHS にビット幅を与えるとその条件のシンクロナイザーを生成してくれる。

次にテストベンチの Synchronizer_tb.v を貼っておく。

// Synchronizer_tb.v
// 2016/06/29 by marsee
//

`timescale 100ps / 1ps

module Synchronizer_tb;
    parameter   integer NUMBER_OF_STAGES    = 2;
    parameter   integer BIT_WIDTHS          = 1;

    reg     [BIT_WIDTHS-1:0]    inp;
    wire    [BIT_WIDTHS-1:0]    outp;
    reg     clk = 1'b0;

    Synchronizer # (
        .NUMBER_OF_STAGES(NUMBER_OF_STAGES),
        .BIT_WIDTHS(BIT_WIDTHS)
    ) uut (
        .clk(clk),
        .inp(inp),
        .outp(outp)
    );

    initial begin
        inp = 0;

        #1000
        inp = -1;

        #7000
        inp = 0;
    end

    always #(500)
        clk = ~clk;

endmodule


このシミュレーション結果を示す。
Synchronizer_2_160630.png

次に、

parameter   integer NUMBER_OF_STAGES    = 3;
parameter   integer BIT_WIDTHS          = 8;

の場合のシミュレーション結果を示す。
Synchronizer_3_160630.png

Elaborated Desgin の Schematic を示す。
Synchronizer_4_160630.png

Tools メニューから Create and Package IP... を選択してIP 化を行った。
Synchronizer_5_160630.png

Synchronizer_6_160630.png

Synchronizer.srcs フォルダの下に component.xml ができた。Synchronizer.srcs フォルダをコピーしてIP として使えるようだ。
Synchronizer_7_160630.png
  1. 2016年06月30日 04:55 |
  2. IP
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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