FC2カウンター FPGAの部屋 Zybot に超音波距離センサを搭載する5(usonic_sensor_inf IP の作製)

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

FPGAの部屋

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

Zybot に超音波距離センサを搭載する5(usonic_sensor_inf IP の作製)

Zybot に超音波距離センサを搭載する4(ussensor_iobuf IP の作製)”の続き。

Zybot に超音波距離センサを搭載する4(ussensor_iobuf IP の作製)”で作ったussensor_iobuf IP とVivado HLS で作ったultrasonic_sensor_inf IP を IP として統合したが、IP の名前がおかしくなって、論理合成できなくなり、うまく行かなかった。そこで、Vivado HLS で作ったultrasonic_sensor_inf IP のVerilog HDL コードにトップのVerilog HDL コードを追加して、IOBUF をインスタンスしてIP 化した。

まずは、usonic_sensor_inf プロジェクトをVivado 2016.2 で作成した。
Ultrasonic_senser_inf_24_161212.png

sources フォルダを作成して、ultrasonic_sensor_inf\solution1\impl\ip\hdl\verilog のultrasonic_sensor_inf.v と ultrasonic_sensor_inf_AXILiteS_s_axi.v をコピー&ペーストした。(ultrasonic_sensor_in はVivado HLS でIP 化してある)

更にトップのVerilog HDL ファイル usonic_sensor_inf.v を作成した。(なお下の図はIP 化まで終了しているため余計なファイルが見えている)
Ultrasonic_senser_inf_32_161212.png

usonic_sensor_inf.v を示す。

// usonic_sensor_inf.v
// 2016/12/12 by marsee
//

`default_nettype none

module usonic_sensor_inf #(
    parameter   ap_const_int64_8 = 8,
    parameter   C_S_AXI_AXILITES_DATA_WIDTH = 32,
    parameter   C_S_AXI_AXILITES_ADDR_WIDTH = 5,
    parameter   C_S_AXI_DATA_WIDTH = 32,
    parameter   C_S_AXI_AXILITES_WSTRB_WIDTH = (C_S_AXI_AXILITES_DATA_WIDTH / ap_const_int64_8),
    parameter   C_S_AXI_WSTRB_WIDTH = (C_S_AXI_DATA_WIDTH / ap_const_int64_8)

)(
    input   wire    ap_clk,    // Clock
    input   wire    ap_rst_n,  // Asynchronous reset active low
    inout   wire    ussensor_inout,
    input   wire    s_axi_AXILiteS_AWVALID,
    output  wire    s_axi_AXILiteS_AWREADY,
    input   wire    [C_S_AXI_AXILITES_ADDR_WIDTH - 1 : 0]   s_axi_AXILiteS_AWADDR,
    input   wire    s_axi_AXILiteS_WVALID,
    output  wire    s_axi_AXILiteS_WREADY,
    input   wire    [C_S_AXI_AXILITES_DATA_WIDTH - 1 : 0]   s_axi_AXILiteS_WDATA,
    input   wire    [C_S_AXI_AXILITES_WSTRB_WIDTH - 1 : 0]  s_axi_AXILiteS_WSTRB,
    input   wire    s_axi_AXILiteS_ARVALID,
    output  wire    s_axi_AXILiteS_ARREADY,
    input   wire    [C_S_AXI_AXILITES_ADDR_WIDTH - 1 : 0]   s_axi_AXILiteS_ARADDR,
    output  wire    s_axi_AXILiteS_RVALID,
    input   wire    s_axi_AXILiteS_RREADY,
    output  wire    [C_S_AXI_AXILITES_DATA_WIDTH - 1 : 0]   s_axi_AXILiteS_RDATA,
    output  wire    [1:0]   s_axi_AXILiteS_RRESP,
    output  wire    s_axi_AXILiteS_BVALID,
    input   wire    s_axi_AXILiteS_BREADY,
    output  wire    [1:0]   s_axi_AXILiteS_BRESP,
    output  wire    interrupt
);

    wire    sensor_out_V;
    wire    sensor_out_en_V;
    wire    sensor_in_V_V;
    wire    sensor_in_V_V_ap_vld;
    wire    sensor_in_V_V_ap_ack;

    IOBUF ussensor_iobuf(
        .I(sensor_out_V),
        .IO(ussensor_inout),
        .O(sensor_in_V_V),
        .T(!sensor_out_en_V)
    );

    assign  sensor_in_V_V_ap_vld = 1'b1;

    ultrasonic_sensor_inf ussensor_inf_i (
        .ap_clk                 (ap_clk),
        .ap_rst_n               (ap_rst_n),
        .sensor_out_V           (sensor_out_V),
        .sensor_out_en_V        (sensor_out_en_V),
        .sensor_in_V_V          (sensor_in_V_V),
        .sensor_in_V_V_ap_vld   (sensor_in_V_V_ap_vld),
        .sensor_in_V_V_ap_ack   (sensor_in_V_V_ap_ack),
        .s_axi_AXILiteS_AWVALID (s_axi_AXILiteS_AWVALID),
        .s_axi_AXILiteS_AWREADY (s_axi_AXILiteS_AWREADY),
        .s_axi_AXILiteS_AWADDR  (s_axi_AXILiteS_AWADDR),
        .s_axi_AXILiteS_WVALID  (s_axi_AXILiteS_WVALID),
        .s_axi_AXILiteS_WREADY  (s_axi_AXILiteS_WREADY),
        .s_axi_AXILiteS_WDATA   (s_axi_AXILiteS_WDATA),
        .s_axi_AXILiteS_WSTRB   (s_axi_AXILiteS_WSTRB),
        .s_axi_AXILiteS_ARVALID (s_axi_AXILiteS_ARVALID),
        .s_axi_AXILiteS_ARREADY (s_axi_AXILiteS_ARREADY),
        .s_axi_AXILiteS_ARADDR  (s_axi_AXILiteS_ARADDR),
        .s_axi_AXILiteS_RVALID  (s_axi_AXILiteS_RVALID),
        .s_axi_AXILiteS_RREADY  (s_axi_AXILiteS_RREADY),
        .s_axi_AXILiteS_RDATA   (s_axi_AXILiteS_RDATA),
        .s_axi_AXILiteS_RRESP   (s_axi_AXILiteS_RRESP),
        .s_axi_AXILiteS_BVALID  (s_axi_AXILiteS_BVALID),
        .s_axi_AXILiteS_BREADY  (s_axi_AXILiteS_BREADY),
        .s_axi_AXILiteS_BRESP   (s_axi_AXILiteS_BRESP),
        .interrupt              (interrupt)
   );

endmodule

`default_nettype wire


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

Packaging Steps の Identification で Vendor を marsee に変更した。
Ultrasonic_senser_inf_25_161212.png

File Groups では、ドライバ・ソフトウェアを追加しよう。
File Groups で 右のペインを右クリックし右クリックメニューからAdd File Groups を選択した。
Add File Groups ダイアログで Software Driver を選択してOK ボタンをクリックした。
Ultrasonic_senser_inf_33_161212.png

File Groupes のAdvanced に Software Driver フォルダができた。

次に、Vivado HLS のultrasonic_sensor_inf\solution1\impl\ip\drivers の下のultrasonic_sensor_inf_v1_0 フォルダをこのプロジェクトのSources フォルダの下にコピーした。
Ultrasonic_senser_inf_30_161212.png

File Groupes のAdvanced の Software Driver フォルダを右クリックし、右クリックメニューからAdd Files... を選択した。
Add Files (Software Driver) ダイアログのAdd Directories ボタンをクリックして、Sources フォルダのultrasonic_sensor_inf_v1_0 フォルダを選択した。
これで、ultrasonic_sensor_inf_v1_0 フォルダ下のファイルが追加された。しかし、mdd ファイルだけが追加されていなかったので、もう一度追加した。
Ultrasonic_senser_inf_26_161212.png

Ports and Interface を示す。
Ultrasonic_senser_inf_27_161212.png

Customization GUI を示す。
Ultrasonic_senser_inf_28_161212.png

Review and Package でCreate archive of IP になっていることを確認して、Package IP ボタンをクリックした。
Ultrasonic_senser_inf_29_161212.png

usonic_sensor_inf\Sources\marsee_user_usonic_sensor_inf_1.0.zip にIP がまとめられている。
Ultrasonic_senser_inf_31_161212.png
  1. 2016年12月13日 05:21 |
  2. Zybot
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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