FC2カウンター FPGAの部屋 Vivado 2013.4でAXI IIC v2.0 を使用した時のIOBUF
FC2ブログ

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

FPGAの部屋

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

Vivado 2013.4でAXI IIC v2.0 を使用した時のIOBUF

今回は、一時今やっているシリーズを離れて、”Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製3”で使用した iic_3state_buf について書いておこうと思う。更に、ikwzm さんに教えてもらった方法についてもやってみることにする。

AXI IICは、Xilinx社のI2CインターフェースのAXIバス用のIPである。このIPのI2Cの出力がIICバス出力で、トライステート・バッファが付いていない状態になっている。詳しくは、”LogiCORE IP AXI IIC Bus Interface v2.0 Product Guide for Vivado Design Suite PG090 December 18, 2013”を参照のこと。今回は、AXI IIC v2.0 のIICバス出力にインターフェース出来るIICバス入力のトライステート・バッファを作る。

iic_3state_bufプロジェクトをVivado 2013.4で作製して、iic_3state_buf.v を書いた。下に、Vivado 2013.4のプロジェクトを示す。
iic_3state_buf_1_140124.png

iic_3state_buf.v を示す。

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date: 2014/01/18 20:31:13
// Design Name:
// Module Name: iic_3state_buf
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////

`default_nettype none

module iic_3state_buf(
    output  wire    sda_i,
    input   wire    sda_o,
    input   wire    sda_t,
    output  wire    scl_i,
    input   wire    scl_o,
    input   wire    scl_t,
    inout   wire    sda,
    inout   wire    scl
);
    assign sda = (sda_t==1'b1) ? 1'bz : sda_o;
    assign sda_i = sda;
    assign scl = (scl_t==1'b1) ? 1'bz : scl_o;
    assign scl_i = scl;
endmodule

`default_nettype wire


簡単なコードだ。

これを、IP化した。入力は、interface_iic として定義した。
iic_3state_buf_2_140124.png

ワーニングが10個出ているが、大丈夫のようだ?
これで、CamD_VDMA で使用している iic_3state_buf が出来た。(IPとして生成しています)

(2014/02/03:追記 上のiic_3state_buf IPでは、AXI IICの外部ポートがうまくインプリメントできなかったです。下のikwzm さんに教えてもらった手順を行うことを強くお勧めします)詳しくは、”Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製15(ハードウェアのデバック3)”参照。

次に、ikwzm さんに教えてもらった手順を以下に示す。

1) Open Block Design で該当するデザインを開く.

2) AXI_IICのインスタンスのIICポートを右クリックして、Make Externalをクリックして IIC を外部端子とする

3)Souces窓の .bd ファイルを右クリックして Create HDL Wrapper...をクリック.

4) Let Vivado manager wrapper and auto-update を選択.

こうして生成したラッパーファイルには IIC の入出力ポートに 双方向のIOBUF が追加されています。

追記)Project Setting で Top module name を生成したラッパーファイルに変更するのを忘れずに.


ikwzmさん、度々教えて頂いて、ありがとうございます。

さて、新規プロジェクトを作製してやってみよう。
iic_3state_buf_3_140124.png

因みに、S_AXIポートやIICポートを作製する際には、右クリックメニューから、Create Interface Port... を選択して、インターフェース・ポートを作製した。

design_1_i の右クリックメニューから、Create HDL Wrapper...を行って、ラッパーファイルを作ったら、IOBUFがインスタンスされていた。
iic_3state_buf_4_140124.png

見事に、IOBUFがインスタンスされていた。

この方法がオフィシャルな方法なのかもしれないが、やはり自分でIOBUFのIPを作ったほうが、IP Integrator で完結しているので、自分の好みにあっている。自作IOBUF IPを使用しようと思う。

Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製12(実機でテスト)”に続く。
  1. 2014年01月24日 04:27 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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