[MAVA] Avalon-MMの仕様

[Altera][MAVA]Avalon-MMの仕様

referto: mnl_avalon_spec.pdf

Signals

Avalonシステムでは,全ての信号はアクティブ-Highとなっている.postfixが"-n"と表記している信号は,アクティブ-Lowとして参照が可能な信号である.

基本的な信号
Signal TypeWidthDirDescription
read,read_n1In読み出し要求.アサートされていればreaddataを要求されている.
write,write_n1In書き込み要求.writedataが有効.
address1-32In当該I/Fのデータ幅を1としてアドレッシングされる.\'1'であっても,16bit幅なら2byte目,32bit幅なら4byte目相当となる
readdata8*2**N(N=0-7)Outslaveからmasterへ出力するデータ信号.
writedata8*2**N(N=0-7)Inmasterからslaveへ出力されるデータ信号.
byteenable,byteenable_n2**N(N=0-7)Inバイトレーンを指定する.\データ幅が複数バイトのときに,アサートされているビットに対応したバイト値が有効であることを示す.
begintransfer1Inwaitrequest信号にかかわらず,書く転送の最初のサイクルにアサートされる.
Wait-state信号
Signal TypeWidthDirDescription
waitrequest,waitrequest_n1Outread/write要求に応答できないときに,slaveによってアサートされる.アサートされたとき,slaveへの制御信号(begintransferとbeginbursttransferを除く)は値を維持する.\Avalon-MM slaveは,アイドルサイクルの間,waitrequestをアサートすべきです.\Avalon-MM master mayは,waitrequestがアサートされたときにトランザクションを初期化すべきです.\Avalon-MM slaveのデザインは,この可能性を考慮に入れなければなりません.

サンプルのチャートをみると,masterからのreadrequest/writerequestがアサートされたときに脊髄反射する必要があるみたい.コンポーネント自身がデータの準備ができていない場合に,デアサートしておいたほうが無難かもしれん.masterが常にwaitrequestを受けていても問題が無いかはわからんけど.

# 参照していないだろうし大丈夫かなぁ


Pipeline Signals
Signal TypeWidthDirDescription
readdatavalid,readdatavalid_n1Outパイプライン読み出し転送の可変長レイテンシに使われます.readdata信号が,前の読み出し要求に対する応答の有効なデータを含んでいることを示すために,slaveによってアサートされます.\readdatavalidを有するslaveは,要求を受けたそれぞれの読み出しサイクルのために,読み出しの受領とreaddatavalidのアサートの間に,この信号を1サイクル以上のレイテンシだけアサートする必要があります.

Burst Signals
Signal TypeWidthDirDescription
burstcount1-32Inburstの1サイクル目の間,burstcountはバースト転送回数を示します.burstcountのポート幅がNの場合,サイズ2**(N-1)の最大バースト数がエンコードできます.\burstcount信号は全体の転送に一定のままで残っています.(Figureでは1stサイクルだけなんだが)
beginbursttransfer1Inburst転送の開始のとき,burstの1サイクル目のためにアサートされます.\この信号はwaitrequestの値に関係なく,1サイクル後にデアサートされます.

Flow Control Signals
Signal TypeWidthDirDescription
readyfordata1Outペリフェラルがwrite転送準備を整えたことを示します.
dataavailable1Outペリフェラルがread転送準備を整えたことを示します.

Reset Signals
Signal TypeWidthDirDescription
resetrequest,resetrequest_n1OutペリフェラルにAvalon-MMシステム全体をリセットすることを許可します.システムリセット信号を生成するために,全てのリセット信号が互いにORされます.

Slave Interface Properties

NameDef.Value有効範囲説明
readLatency00-63読み出しレイテンシが固定の場合に使用されるレイテンシの値.\readdatavalid信号が含まれる場合は未使用となる.
writeWaitTime00-1000slaveがwriteを許容するまでのサイクル数を示す.タイミングは,slaveがwaitrequestをwriteWaitTimeサイクルだけアサートしたようになる.

waitrequest信号が含まれる場合は未使用となる.|

readWaitTime10-1000slaveがread応答するまでのサイクル数を示す.タイミングは,slaveがwaitrequestをreadWaitTimeサイクルだけアサートしたようになる.
maximumPendingRead Transactions11-64slaveによってqueueに入れることができる最大のread要求数.
burstOnBurstBoundariesOnlyfalsetrue/falseもしtrueにするならば,このインタフェースで提供されるburst転送が,burstサイズの倍数となるアドレスから始まることが保障される.\(使い手が保障するのか?よくわからん)
linewrapBurstsfalsetrue/falsetureの場合,slaveがインクリメンタルバーストに変えて,line wrapping burstを実装していることを示します.\wrapping burstについて,アドレスがburst境界に達したときに,下位のビットだけが,アドレシングに使用される必要があるように,以前のburst境界にラップバックします.\Ex.) burst境界が32byteで32bit幅のインタフェースがアドレス0x0Cにアクセスするwrapping burstは,次の順にアクセスを行う.(burst sizeより大きいビットは変化しないことに注意)\0xC, 0x10, 0x14, 0x18, 0x1C, 0x00, 0x04, 0x08
maxBurstSize164slaveが許容する最大burstサイズ
bridgesToMasternull同じコンポーネントのAvalon-MM masterslaveとmasterから構成され,特定のbyteまたはbytesを要求するslaveへのアクセスで,masterは同じbyteまたはbytesを要求するような特徴を持つAvalon-MMブリッヂ.
associatedClock--このslave I/Fが同期化するクロックインタフェース名.


注意事項

英語力の弱い人が適当に訳して抜粋,補強しています.
あやしいな,と思ったらご指摘いただけますと幸いです.
なお,オリジナルの英文を参照されることを強く推奨いたします.

[Q2HB] PIO Core

[Altera][Q2HB][IP] PIO Core

refer to:"Volume 5: Embedded Peripherals","Section I. Off-Chip Interface Peripherals","Chapter 9, PIO Core"


Function Description

各PIOコアは最大32のI/Oポートを提供します.マイクロプロセッサのようなインテリジェントホストが,Avalon-MMインタフェースのレジスタマップに対して読み書きすることで,PIOポートを制御します.ホストの制御下において,PIOコアは入力のデータを取り込んだり,データを出力(駆動)します.PIOポートがI/O端子に直接接続されるとき,ホストはPIOコアの制御レジスタに書き込むことで,Tri-stateにすることができます.

SOPC Builderで生成した場合には,ユーザに見える2つの仕様を持ちます.

  • MMインタフェース経由で見える,data,direction,interrupt-mask,edgecaptureレジスタ
  • 1~32のI/O port(FPGA内部への接続でも,FPGA外部端子への接続も可能です.)

Instantiating the PIO Core in SOPC Builder

Basic Settings
WidthI/Oポートの幅を指定します.1~32の値が設定できます.
Direction以下に示すテーブル(Direction Settings)から機能を選択します.
Output Port Reset Value出力ポートのリセット値を指定できます.正しい値の幅は,ポート幅に依存します.

Direction Settings

Bidirectional (tristate) portsこのモードでは,PIO bitはデータの駆動と取得のためにデバイス端子を共有します.各端子の方向は独立して選択可能です.FPGA I/Oをtrie-state状態にするには,directionは入力にします.
Input ports onlyこのモードでは,PIOポートは取り込み入力のみです.
Output ports onlyこのモードでは,PIOポートは出力駆動のみです.
Both input and output portsこのモードでは,入出力ポートのバスが分離し,n bitの端方向バスとなります.
Input Options

edge-captureとIRQ生成に関する指定を行います.Basic Settingsで,入力ポートが無ければ設定できません.

Edge Capture Register(作業中)

Interrupt(作業中)

Software Programming Model

ここで紹介するAPI・マクロは,"altera_avalon_pio_regs.h"をincludeすることで使えます.
baseは,scriptによる自動生成でシステムが作ってくれる.(定義されるファイルは"system.h")

書き込みマクロ

  • IOWR_ALTERA_AVALON_PIO_DATA(base, data)
  • IOWR_ALTERA_AVALON_PIO_DIRECTION(base, data)
  • IOWR_ALTERA_AVALON_PIO_IRQ_MASK(base, data)
  • IOWR_ALTERA_AVALON_PIO_EDGE_CAP(base, data)

読み出しマクロ

  • IORD_ALTERA_AVALON_PIO_DATA(base)
  • IORD_ALTERA_AVALON_PIO_DIRECTION(base)
  • IORD_ALTERA_AVALON_PIO_IRQ_MASK(base)
  • IORD_ALTERA_AVALON_PIO_EDGE_CAP(base)

アドレス計算マクロ

  • IOADDR_ALTERA_AVALON_PIO_DATA(base)
  • IOADDR_ALTERA_AVALON_PIO_DIRECTION(base)
  • IOADDR_ALTERA_AVALON_PIO_IRQ_MASK(base)
  • IOADDR_ALTERA_AVALON_PIO_EDGE_CAP(base)

# 方言"__builtin_ldwio"が入っているので,単純に(volatile*)(ADDR)で読み出せるのかは怪しい?

[Q2HB] Video Sync Generator

[Altera][Q2HB][IP] Video Sync Generator

refer to: "Volume 5: Embedded Peripherals", "Section IV. Peripherals", "23. Video Sync Generator and Pixel Converter Cores"

Core Overview

video sync generator coreはRGBフォーマットのピクセルデータの連続したストリームを許容し,適切なタイミングでoff-chipのDisplayコントローラにデータを出力します.

"pixel converter core"は,ピクセルデータをvideo sync generatorコアが要求するデータフォーマットに変換します.
(訳注:使用想定図を貼り付けましょう..)Avalon-MM経由でSG-DMAがデータを吸い上げ,Avalon-STとしてFIFOに吐き出し.FIFO(32bit)からPixel Converter(32bit->24bit)を経由して,DataFormatAdapterへ.そこで8bit x 3beatに変換されて,VideoSyncGenに流れ込む.


Instantiating the Core in SOPC Builder

Parameter
Horizontal Sync Pulse PixelsH-syncパルス幅をピクセル単位で指定する.
Total Vertical Scan Lines1videoフレームあたりの全ライン数を指定する.これには,(表示)行数・垂直Blankライン数・垂直フロントポーチライン数の和である.
Number of Rowsvideoフレームごとの有効なスキャンライン数を指定する.
Horizontal Sync Pulse PolarityH-syncパルスの極性を指定する.0:active low,1:active high
Horizontal Front Porch Pixels有効なピクセルの後ろに続く,ブランキングピクセルの数を指定する.この区間では,Avalon-ST sinkポートからLCDへのデータ出力ポートへのデータフローはない.
Vertical Sync Pulse PolarityV-syncパルスの極性を指定する.0:active low,1:active high
Vertical Sync Pulse LinesV-syncパルス幅を,行数で指定する.
Vertical Front Porch Lines有効なラインが後ろに続く,ブランキングライン数を指定します.この区間では,Avalon-ST sinkポートからLCDへのデータ出力ポートへのデータフローはない.
Number of Columns行ごとの有効なピクセル数を指定します.
Horizontal Blank Pixels有効なピクセルに先行する,ブランキングピクセルの数を指定します.この区間では,Avalon-ST sinkポートからLCDへのデータ出力ポートへのデータフローはない.
Total Horizontal Scan Pixels一行あたりのそうピクセル数を指定する.この値は,(有効な)列数・水平ブランキングピクセル数・水平フロントポートピクセル数の和となる.
Beats Per Pixel1ピクセルを転送するために必要なbeat数を指定します.有効な値は1か3です.このパラメタは,"Data Stream Bit Width"の倍数を乗じたときに,1ピクセルあたりの総ビット数に一致しなくてはならない.このパラメタは,以下の数式に示すように,動作クロック周波数に影響を与えます.\Operating clock frequency = (Beats per pixel) * (Pixel_rate)\ ただし, [bf:Pixel_rate (in MHz) = ((Total Horizontal Scan Pixels) * (Total Vertical Scan Lines) * (Display refresh rate in Hz))/1000000.}
Vertical Blank Lines有効な行に先行するブランキングライン数を指定します.
Data Stream Bit Width入力データ・出力データの幅
Signals

Global Signals

Signal NameWidth (Bits)DirectionDescription
clk1inputSystem Clock
reset1inputSystem Reset

Avalon-ST Signals

datavariableinput入力ピクセルデータ.データ幅は,パラメタ"Data Stream Bit Width"で定義される.
ready1outputこの信号は,VideoSyncGeneratorがピクセルデータの受信準備ができたときにアサートされます.
valid1inputAvalon-ST valid信号
sop1inputAvalon-STのStartOfPacket信号
eop1inputAvalon-STのEndOfPacket信号

LCD Output Signals

rgb_outvariableoutput表示データ.データ幅は,パラメタ"Data Stream Bit Width"で定義される.
hd1output水平同期パルス
vd1output垂直同期パルス
den1outputこの信号は,VideoSyncGeneratorコアが有効なデータを出力したときにアサートされる




注意事項

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

[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社の検閲は入っておりません.
入門者の敷居を下げるべく,説明文の誤り指摘や修正案等のコメントをいただけますと幸いです.

[Q2HB] Avalon Streaming Interconnect Components

[Altera][Q2HB] Avalon Streaming Interconnect Components

Component Overview

refer to: "Volume 4: SOPC Builder, Section III. Interconnect Components, Chapter 12, Avalon Streaming Interconnect Components"

readyレイテンシが異なる,source/sinkインタフェースに対応します.timing adapterは,ready信号とvalid信号を除いた全ての信号をペイロードのように処理し,souceからsinkへ単純に駆動します.タイミングアダプタの挙動を以下に記します.

  • source:ready, sink:not ready (データ入力がこない)\sourceはbackpressureを返しますが,sinkは応答する必要がない.sourceインタフェースへのready入力は論理1に直結される.
  • source:not ready, sink:ready (出力先busy?)\sink(取り込み側)はbackpressureが適用されるが,sourceは応答できない.sourceはvalidだがsinkがnot readyのときに,アダプタが妨げてデータロスをさせないための機能はない.アダプタはシミュレーション時のエラーメッセージを提供し,データが恒常的に失われるならばエラーを示す.\ユーザーがwarningの存在を確認し,接続を許可される.
  • source/sinkともにbackpressure対応, soureよりsinkのreadyレイテンシのほうが大きい.(入力が遅い)\souce(排出側)がreadyアサートやデアサートへ応答するのは,sinkがreadを要求するよりも早い.sourceとsinkの,readyサイクルが同じに見えるようにするために,readyレイテンシの差に等しいパイプラインステージ数が,sink backからsouceへのreadyパスに挿入される.
  • source/sinkともにbackpressure対応, soureよりsinkのreadyレイテンシのほうが小さい.(出力しきれない)\souce(排出側)が,sinkの条件を満たしてreadyアサートやデアサートへ応答するのは不可能.readyレイテンシの差に等しい深さのバッファが,sourceが時間内に応答できないことを補うために挿入される.\# あふれないか?

Instantiating the Timing Adapter in SOPC Builder

  • Input Interface Parameters
    • Support Backpressure with the ready signal\Checkすると,backpressure機能を追加する.
    • Ready Latency\ready信号が使われるとき,この値はready信号がアサートされたときとvalid dataが駆動されたときの間のサイクル数をさします.
    • Include valid signal\valid信号を含むときにCheckしてください.これをoffにすることは,データ受信が常に許可となることを意味します.
  • Output Interface Parameters
    • Support Backpressure with the ready signal\Checkすると,backpressure機能を追加する.
    • Ready Latency\ready信号が使われるとき,この値はready信号がアサートされたときとvalid dataが駆動されたときの間のサイクル数をさします.
    • Include valid signal\valid信号を含むときにCheckしてください.これをoffにすることは,データ送出が常に許可となることを意味します.
  • Common to Input and Output Interfaces
    • Channel Signal Width (bits)\チャネルsignalの幅を入力します.4つのチャネル幅は16チャネルまで許容します.チャネル信号の最大幅は8bitです.チャネル未使用時は0をセットしてください.
    • Max Channel\インタフェースがサポートするチャネル数の最大値をセットしてください.値は0~255が有効です.
    • Data Bits Per Symbol\シンボルあたりのビット数を入力します.
    • Data Symbols Per Beat\有効な転送ごとのシンボル数を入力します.
    • Include Packet Support\インタフェースがパケットプロトコルをサポートするときにonにしてください.
    • Include Empty Signal\endofpacket信号を含んだ,サイクル中のemptyシンボル数を指定するためにこの信号を使えます.number of symbols per beatが1なら不要です.
    • Error Signal Width (Bits)\エラー信号の幅を入力します.有効な値は0~31bitです.未使用時は0としてください.
    • Error Signal Description\エラービットそれぞれの記述を入力します.記述フィールドはセミコロンで分割します.接続が作られるためには,sourceとsinkのエラービットの記述が合致しなければなりません.ビットが不整合とすることのできる適合については,12-9の"Error Adapter"を参照ください.
Refer to “Error Adapter” on
page 12-9 for the adaptations that can be made when the bits do not
match. Lissy: I wrote this using common sense. Please check.

★pdf化前のreviewメモが残されている気がする.





注意事項

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