シングルサイクルタイミングループ内でI/Oを同期する
- 更新日2025-03-06
- 6分で読める
LabVIEWは、ターゲットFPGAで実装する際に、FPGAハードウェアI/OとFPGA I/Oノードの間に同期レジスタを配置します。入力データの同期レジスタ数を0、1、または2として指定し、出力データの同期レジスタ数を0または1として指定することができます。入力が自動 (デフォルト) に設定されている場合、入力データと出力データの同期レジスタ数はそれぞれ2と1です。
| 注意 シングルサイクルタイミングループにネストされたケースストラクチャ内のデジタル出力リソースで同期レジスタとして0を指定すると、LabVIEWは有効チェーンがアサート解除する際にデジタル出力リソースの以前の状態を保持できず、予期しない出力が発生することがあります。NIは、以前の状態を保持するために必要な論理を追加していない限り、同期レジスタとして0を指定しないことを推奨します。 |
デフォルトの同期レジスタ数を使用したサンプルコード
以下の図で示すようなシングルサイクルタイミングループで実行するデジタルI/O操作を持つFPGA VIについて考えてみましょう。
デジタル入力信号のデジタル入力1をデジタル出力信号のデジタル出力1に接続します。ケースセレクタに配線されたトリガ制御は、ケースストラクチャを使用していつアプリケーションがデジタル入力1からの読み取りおよびデジタル出力1への書き込みを実行するかを指定します。
入力同期レジスタ数がデフォルトの自動に設定されている時、以下の図に示すような回路がFPGA上で作成されます。
この例で、デジタル入力1はFPGA上の物理DIOピンで、2つの同期レジスタに接続されています。最初の同期レジスタはメタステーブル状態を処理します。2番目の同期レジスタの出力はデジタル出力1に接続される同期レジスタに直接配線され、デジタル出力1の同期レジスタはFPGA上の出力DIOピンに接続されます。トリガ制御器に対応するレジスタ出力は、信号を出力するタイミングを決定するために、出力同期レジスタの有効チェーン入力に接続されます。
サンプルコード: 同期レジスタ数をゼロに設定する
上記の図と同じブロック図で、同期レジスタ数がデジタル入力と出力の両方とも0に設定された場合について考えてみましょう。FPGAの等価回路を以下に示します。
ここで、デジタル入力信号であるデジタル入力1は、FPGA上でデジタル出力信号であるデジタル出力1に直接ハードワイヤ接続されています。コンパイルプロセスには、いつデジタル入力1の読み取りおよびデジタル出力1の書き込みを実行するかを判断する制御論理は含まれません。この場合、ビットファイルがFPGAにダウンロードされると、即座にデジタルI/Oラインが相互接続します。
サンプルコード: 同期レジスタを使用せず論理関数を使用する
シングルサイクルタイミングループ内でI/O同期レジスタの数を設定する必要があり、同期レジスタ数をゼロに設定したサンプルコードに記載された動作に不満がある場合は、アプリケーションの入力と出力の間に論理が含まれていることを確認する必要があります。I/O入力と出力間に論理を追加することにより、制御論理に関係なく動作する直接的なワイヤ接続を回避できます。以下のブロックダイアグラムは、同期レジスタなしでコードを実装した1例です。
上のブロックダイアグラムは、ケースストラクチャの代わりに「And」関数を使用して、信号がデジタル出力1に到達するかどうかを制御します。デジタル入力1とトリガ制御は「And」関数の入力で、「And」関数の出力はデジタル出力1ノードに接続します。FPGAの等価回路を以下に示します。
上の回路は、トリガ制御がTRUEに設定された場合にのみデジタル入力1とデジタル出力1間が接続されるという点で、サンプルコード: デフォルトの同期レジスタ数を使用するの回路に似ています。ただし、回路はデジタル入力1とデジタル出力1の間の信号パス上に同期レジスタがない点で異なります。デジタル出力1は、シングルサイクルタイミングループを制御するクロックとは無関係に変化する可能性があります。