古川制御日記

佐賀県武雄市の組み込み開発屋ブログ

logiCORE PCI

Initiator Data Phase Control

この章では、ユーザーアプリケーションがデータのソースまたはシンクの能力に合わせてイニシエータートランザクションの側面を制御する方法について説明します。
ユーザーアプリケーションは、最初のデータ転送の前に待機状態を挿入して、準備ができていない場合には追加の時間を可能にします
さらに、ユーザーアプリケーションは、トランザクションを完了する時期を示すことによってデータフェーズの数を制御できます。

可能な限り、待機状態での初期レイテンシの生成はお勧めできません。
この手法は、貴重なバス帯域幅を浪費します。
帯域幅の観点からは、トランザクションを実行する準備が整うまで、ユーザーアプリケーションがバス要求の作成を遅らせる方がよいでしょう。

Control Modes

データ位相制御は、M_READYおよびCOMPLETE信号を使用して実現されます。
2つの制御信号の組み合わせは、以下のモードを含む。

  • Wait BurstPCIインターフェイスによるIRDY_IOのアサートを遅延させることによって、 PCIバストランザクションの開始時にウェイトステートを挿入します(最初のデータフェーズを保持します)。
    この特定の待機モードは、イニシエータバーストトランザクションで使用するためのものです。
    このモードを使用すると、PCIインターフェイスに、ユーザーアプリケーションが準備ができていないことが示され、複数のデータフェーズが試行されます。

  • Wait Singleはウェイトバーストモードと同じ方法で、PCIバストランザクションの開始時にウェイトを挿入します。
    ただし、このモードは単一のイニシエータトランザクションで使用するためのモードです。
    このモードの使用は、PCIインターフェイスに対して、ユーザアプリケーションが準備ができておらず、複数のデータフェーズを試みないことを示します。

  • ProceedPCIバスのデータフェーズを中断することなく進めることを可能にします。
    選択したターゲットが待機状態を挿入したり、トランザクションを途中で終了したりすることがありますが、ユーザーアプリケーションはデータをフルスピードで転送する準備が必要です。
    これは、複数のデータフェーズ転送でのみ使用できます。

  • Finishを使用すると、PCIインターフェイスはできるだけ早くトランザクションを完了します。
    これは、単一および複数のデータフェーズ転送の両方で使用するためのものです。

ここでも、正確な切断シーケンスは、選択されたターゲットがトランザクションを終了するかどうかによって影響されます。
PCIインターフェイスは自動的に正しい動作を生成します。

f:id:fullphong:20180614014152p:plain

あるモードから別のモードへの変更は、任意の順序で行うべきではありません
さらに、トランザクションで発生するデータフェーズの数を正確に制御するためには、モード遷移のタイミングが重要です。
これは、フィニッシュモードに切り替えるときに特に重要です。

図11-1に、PCIインタフェースを使用したイニシエータデザインの許可されたデータ位相制御シーケンスを示します。
正確なタイミングの詳細は、この章の次のセクションで定義されています。

f:id:fullphong:20180614014147p:plain

図11-1に示す制御シーケンスは、ユーザーアプリケーションがトランザクションを終了していることを前提としています。
実際には、トランザクションは、ターゲットアプリケーションの終了やタイムアウトなど、ユーザーアプリケーションが制御できない理由で終了することがあります
そのような状態の後にイニシエータ状態マシンが非アクティブになると、シーケンシングルールはもはや適用されない。

厳しいPCIバスのパフォーマンス要件を満たすために、PCIインターフェイスはすべてのバス制御信号とデータパスをパイプラインします。
したがって、M_READY信号およびCOMPLETE信号は、所望の効果の前に提示されなければならない。

ウェイトモードは、トランザクション内の任意のデータフェーズでウェイトステートを挿入するために使用できないことに注意してください。
これらは、イニシエータトランザクション最初のデータフェーズの完了を遅延させるためにのみ使用できます。
これは、PCIローカルバス仕様ではマスタデータレイテンシと呼ばれます。

すべてのイニシエータは、FRAME_IOのアサートから8クロック以内にトランザクションの最初のデータフェーズを完了する必要があります
PCIローカルバス仕様は、マスタデータレイテンシの使用を強く推奨しておらず、一般的にそれを使用する理由はないと述べています。
ユーザアプリケーションは、この要件を遵守する責任があります。

信号M_READYおよびCOMPLETEは、複数の論理レベルを介してイニシエータ状態マシンに接続する。
このため、これらの信号を駆動するロジックをできるだけシンプルに保つことを強く推奨します。
これらの信号をユーザアプリケーションのフリップフロップからドライブすることは有益ですが、これは典型的には最も単純な(バーストではない)デザイン以外では不可能です。

Control Pipeline

ユーザアプリケーションは、REQUESTをアサートしてから1サイクル以内に、正しい初期データ位相制御モードを提示しなければなりません。
この後、図11-1に示すシーケンシングに違反しない限り、ユーザーアプリケーションはモードを変更できます。

いずれの場合も、ユーザアプリケーションがイニシエータトランザクションの終了を決定すると、M_READYとCOMPLETEを適切に設定して終了モードを選択する必要があります。
ユーザアプリケーションがトランザクションを終了することを通知すると、トランザクションの終了時までM_READYおよびCOMPLETEを保持する必要があります。

PCIインタフェースによるM_DATAのアサーション解除は、転送が終了したことを示します

Transaction Termination Rules

ユーザアプリケーションが単一のデータワードを送信または受信している場合、
ユーザアプリケーションは、REQUESTをアサートしてから1サイクル以内に待機シングルモードまたは終了モードを通知する必要があります

ユーザアプリケーションがウェイトシングルモードを使用してウェイトステートを挿入する場合は、
PCIインタフェースがマスタデータレイテンシ仕様に違反する前に終了モードに切り替える必要があります。
再び、ユーザーアプリケーションがトランザクションを終了するように信号を送ると、
M_DATA状態の終わりまでM_READYとCOMPLETEを保持する必要があります。

ユーザアプリケーションが2つのデータワードを送信または受信している場合、ユーザアプリケーションは、ウェイトバーストまたは進行モードのいずれかで開始することができる
ウェイトバーストモードで開始する場合、ユーザインターフェイスは、PCIインターフェイスがマスタデータレイテンシ仕様に違反する前に、進行モードに切り替える必要があります。
進行モードに入ると、次の両方の条件が満たされると、ユーザーアプリケーションは終了モードに切り替える必要があります。

  • 進行モードは、少なくとも1サイクル
  • 信号M_DATAが少なくとも1サイクルアサートされている

3つ以上のデータワードのバースト転送の場合、初期モード選択は2転送の場合と同じである。
3つの転送が残り、M_DATA_VLDがアサートされると、ユーザアプリケーションは終了モードに切り替える必要があります。

Implementation

上に示した規則はテキストで表示すると複雑に見えますが、次の例では一般的なケースでM_READYとCOMPLETEを駆動するために必要なロジックを示します。
この例は、前の章で示した例を基にしており、簡単なバースト転送を実行できます。
このコードは、M_READYとCOMPLETEを生成した以前のロジックを置き換えます。

ほとんどのイニシエータ設計では、転送カウンタを使用して希望のバースト長を追跡します。
次のロジックは転送カウンタを実装し、残りの転送数を示す3つの出力を生成します。
BURST_LENGTHおよびSTART信号は、ユーザアプリケーション内の他の場所で生成されます。
読み書きの場合、M_DATA_VLDは、PCIバス上のデータ転送が成功したことを示すために使用されます。

次のロジックは、後でM_READYおよびCOMPLETEロジックで使用されるイニシエータレディ信号を生成します。
イニシエータとしてウェイトステートを挿入しないユーザアプリケーション設計では、このロジックを最適化することができます。
ロジックは、READY_FLAGという信号をサンプリングします。この信号は、ユーザーアプリケーションの別の場所で生成されます。
この信号は、ユーザーアプリケーションがデータを転送する準備ができていることを示します。

最後のステップは、M_READYとCOMPLETEを生成することです。
典型的には、イニシエータ待ち状態は使用されず、INIT_WAITED信号は方程式から最適化されるべきである。
タイミングの理由から可能な限りロジックを減らすことが重要です。

Avalon Packets to Transactions Converter Core

Transaction Packet Format

Byte Field Description
0 Transaction code Type of transaction. See Properties of Avalon-ST Interfaces table.
1 Reserved Reserved for future use.
[3:2] Size Transaction size in bytes. For write transactions the size indicates the size of the data field. For read transactions the size indicates the total number of bytes to read.
[7:4] Address 32-bit address for the transaction.
[n:8] Data Transaction data; data to be written for write transactions.

Response Packet Format

Byte Field Description
0 Transaction code The transaction code with the most significant bit inversed.
1 Reserved Reserved for future use.
[4:2] Size Total number of bytes read/written successfully.

Supported Transactions

Transaction Code Avalon-MM Transaction Description
0x00 Write non-incrementing address. Writes data to the given address until the total number of bytes written to the same word address equals to the value specified in the size field.
0x04 Write incrementing address. Writes transaction data starting at the given address.
0x10 Read non-incrementing address. Reads 32 bits of data from the given address until the total number of bytes read from the same address equals to the value specified in the size field.
0x14 Read incrementing address. Reads the number of bytes specified in the size field starting from the given address.
0x7f No transaction. No transaction is initiated. You can use this transaction type for testing purposes. Although no transaction is initiated on the Avalon-MM interface the core still returns a response packet for this transaction code.

f:id:fullphong:20171011230824p:plain

Avalon-ST関連コンポーネント

Avalon Streaming Channel Multiplexer and Demultiplexer Cores

Avalon Packets to Transactions Converter Core

Avalon-ST Bytes to Packets and Packets to Bytes Converter Cores

https://www.altera.com.cn/zh_CN/pdfs/literature/hb/nios2/qts_qii55011.pdf

DesignSpark Mechanicalなどで使える3Dモデルの探し方

tracepartsonline.net ここだと、かなりいろんな形式のデータフォーマットで落とせる。 ダウンロードまでにちょっと時間かかる。

自分的には二列のピンヘッダーを結構使うのでこういう任意ピン数のデータが落とせるのは非常にありがたい。

メス側以下 http://www.tracepartsonline.net/(S(ijmz22zhvanjnplvtawsarif))/PartDetails.aspx?Class=ASSMANN&clsid=&ManID=ASSMANN&PartFamilyID=10-23062010-091210&PartID=10-23062010-091210&SrchRsltType=4&SrchRsltId=2

あとこういうよくあるタイプのコネクタはここで落としてる。 f:id:fullphong:20170330173133p:plain

J.S.T. Mfg. Co., Ltd.

http://www.3dcontentcentral.com/

PCB Cad Eagleの古いバージョンのダウンロード方法

というかダウンロードサイト
cadsoft.deのFTPサービスが生きているみたいですね。 以下から古いバージョン落とせます。
ftp://ftp.cadsoft.de/eagle/program/
ありがたやー

$ ftp ftp://ftp.cadsoft.de/eagle/program/

Connected to cheetah.cadsoft.de.
220-Welcome to the CadSoft Computer FTP service.
220-Please log in as "anonymous" or "ftp".
220
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
200 Switching to Binary mode.
250 Directory successfully changed.
250 Directory successfully changed.
ftp>
ftp> ls
229 Entering Extended Passive Mode (|||30096|)
150 Here comes the directory listing.
lrwxrwxrwx    1 10001    2001            6 Feb 01  2006 4.0 -> 4.09r2
dr-xr-xr-x    2 10001    2001         4096 Jan 29  2015 4.09r2
lrwxrwxrwx    1 10001    2001            6 Dec 13  2006 4.1 -> 4.16r2
dr-xr-xr-x    2 10001    2001         4096 Dec 19  2006 4.16r2
lrwxrwxrwx    1 10001    2001            4 Aug 29  2013 5.0 -> 5.12
dr-xr-xr-x    2 10001    2001         4096 Dec 13  2011 5.12
dr-xr-xr-x    2 10001    2001         4096 Jun 02  2014 6.6
dr-xr-xr-x    2 10001    2001         4096 Jul 14  2014 7.0
drwxr-xr-x    2 10001    2001         4096 Aug 11  2014 7.1
dr-xr-xr-x    2 10001    2001         4096 Nov 27  2014 7.2
dr-xr-xr-x    2 10001    2001         4096 May 11  2015 7.3
dr-xr-xr-x    2 10001    2001         4096 Aug 31  2015 7.4
dr-xr-xr-x    2 10001    2001         4096 Jan 26  2016 7.5
dr-xr-xr-x    2 10001    2001         4096 May 18  2016 7.6
dr-xr-xr-x    2 10001    2001         4096 Oct 05 09:16 7.7
lrwxrwxrwx    1 10001    2001            3 Oct 05 11:25 latest -> 7.7
226 Directory send OK.
ftp> 

当方4.16r2のライセンスしかもっておらず未だにこれを使ってますが、KiCadに移行するか考え中。
とりあえず今の仕事まではEagle4.16r2にお世話になろう。

Eagle PCB CAD「Board and shcematic are not consistent!」時の対策

Board and shcematic are not consistent!
No forward-/backannotation will be performed!
Use the ERC command to get a detailed error report.

何がきっかけなのかわからないがたまにこれが発生する。
この状態だとSchematic側で部品を追加してもBoard側には反映されなくなる。何しろすでに一貫性ないから、無い一貫性を維持しようがない。

このときのこの症状が発生したときのERCの結果メッセージは以下ような内容を含んでいる(はず)。

Pins/Pads with different connections:

  Part     Gate     Pin        Net      Pad      Signal

  CN5      G$1      GND        GND/2    7        N$63
  U16      A        I4         GND/3    4       
  U16      A        I5         GND/3    5       
  U16      A        I6         GND/3    6       
  U16      A        I7         GND/3    7       

このときの対策としてまずは、

  • Schematic側でCN5,U16を削除する。
  • Board側でCN5,U16を削除する。

という手順を実施すれば一貫性は復活する(はず)。
一貫性が復活したのちは再びCN5であった部品とU16であった部品を手動で追加すればOK。

ということがわかったのでメモった。

Lattice Diamondの回路図記述回路(.schファイル)をModelSIMでシミュレーション

Lattice Diamondのスケマティック(.schファイル)記述はVHDLに自動的に変換されるのでそれを使えばModelSIMでシミュレーションすることができます。
が、以下のように

library xp2;
use xp2.components.all;

Lattice製のコンポーネントに依存したVHDLに変換されます。
これらのコンポーネントにはor2,inv,nr2などの論理素子が含まれ、ソースコードC:\lscc\diamond\3.8\cae_library\simulation\vhdlにありました。 これらをModelSIMのプロジェクトに含めてコンパイルしても

** Error: src.vhd(5): (vcom-1598) Library "xp2" not found.
** Error: src.vhd(6): (vcom-1136) Unknown identifier "xp2".
** Error: src.vhd(8): VHDL Compiler exiting

と言われて失敗するので、

xp2ライブラリとしてコンパイルしたいファイル群を選択してProperties...右クリックメニューを開いて

f:id:fullphong:20170306132238p:plain

としたのちTranscriptウィンドウから

vlib xp2

と入力後、コンパイル及び実行できました。