[Q2HB] Data Format Adapter(DFA)

[Altera][Q2HB] Data Format Adapter(DFA)

Component Overview

データ信号の定義が異なるインタフェースをハンドルします.このコンポーネントがよく用いられるのは,バス幅の適応です.例えば,2つの8bit/symbolのドライブインタフェースから,4つの8bit/symbolのドライブインタフェースへ変換します.

  • souceとsinkのsymbolあたりのbit数が異なるとき\接続はできません.
  • souceとsinkeの1beatあたりのシンボル数が異なるとき\sourceの幅から,sinkの幅へ変換します.\インタフェースが広いほうから狭いほうへの適合であれば,入力端におけるデータのbeatは,出力端におけるデータのbeatの倍数です.\単発のbeatにて,入力エラー信号がアサートされるとき,数倍のbeatのため,出力にアサートされます.
    \インタフェースが狭いほうから広いほうへの適合の場合,単発の出力beatを埋めるために,数倍の入力beatが要求されます.そして,出力エラーは入力エラーの論理和が出力されます.

Instantiating the Timing Adapter in SOPC Builder

入力インタフェースパラメタ(Input Interface Parameters)

Data Symbols Per Beat有効サイクルごとに転送されるシンボル数を入力します.
Include the empty signal"endofpacket"信号を含むサイクルが,emptyシンボルを含むことができるなら,Onにしてください.beatあたりのシンボル数が1であれば,この信号(訳注:empty)は不要です.

出力インタフェースパラメタ(Output Interface Parameters)

Data Symbols Per Beat有効サイクルごとに転送されるシンボル数を入力します.
Include the empty signal"endofpacket"信号を含むサイクルが,emptyシンボルを含むことができるなら,Onにしてください.beatあたりのシンボル数が1であれば,この信号(訳注:empty)は不要です.

入出力共通(Common to Input & Output)

Channel Signal Width (bits)"channel"信号の幅を入力します.4つのチャネルの幅は16チャネルまでです.チャネル信号の最大幅は8bitです.チャネルが未使用であれば,"0"(ゼロ)を入力してください.
Max Channelインタフェースがサポートするチャネルの最大数を入力します.有効な値は0~255です.
Include Packet Supportインタフェースが,"startofpacket","endofpacket","empty"信号を含むパケットプロトコルをサポートするならば,Onにしてください.
Error Signal Width (Bits)エラー信号の幅を入力してください.有効な値は0~31bitsです.未使用の場合は"0"(ゼロ)を入力してください.
Error Signal Descriptionエラービットごとの記述を入力してください.記述フィールドは,セミコロンによって分割されます.接続が作られるためには,sourceとsinkのエラービットの記述が合致しなければなりません.ビットが不整合とすることのできる適合については,12-9の"Error Adapter"を参照ください.
Data Bits Per Symbolシンボルあたりのビット数を入力してください.

生成されたHDLからの情報

24bit→8bitのAvalon-ST変換を行った.module宣言部は以下のようになっている.(以降,生成されたコードの空白・コメントは変更している可能性あり.)

module lcd_dfa_pc2vgen (
  // Interface: clk
  input              clk,
  input              reset_n,
  // Interface: in
  output reg         in_ready,
  input              in_valid,
  input      [23: 0] in_data,
  input              in_startofpacket,
  input              in_endofpacket,
  input      [ 1: 0] in_empty,
  // Interface: out
  input              out_ready,
  output reg         out_valid,
  output reg [ 7: 0] out_data,
  output reg         out_startofpacket,
  output reg         out_endofpacket,
  output reg         out_empty
);

ざっとみたところ,Interface入力は全てDFFで受けて,その信号をロジックで参照してステートマシンを蹴っているように見える.また,入力データのempty信号も参照し,(この場合は)3beat→1beatへの変換を行っている.入力が24bit(8bit x 3/beat)できたものを,8bit(8bit x 1/beat x 3)へ変換する.
→クロックは特に変化せず,変わるのはデータレートのみ. 入力インタフェースで,Sourceに対してNot Readyを示し,フロー制御を行う.




注意事項

英語力の弱い人が適当に訳しています.
自分では意味がわかるようにとれたものと,そうでないものとがあります.概要理解の参考にしていただければ幸いですが,オリジナルの英文を参照されることを強く推奨いたします.
また,自分なりに理解して解説したり,参照した資料などへのリンクも記述していますが,ALTERA社の検閲は入っておりません.
入門者の敷居を下げるべく,説明文の誤り指摘や修正案等のコメントをいただけますと幸いです.