DSP Builder Advanced Blockset バージョン 17.1 以前の問題により、Simulink® が BusStimulus ブロックの前で他のバスブロックを実行すると、次のエラーが表示されることがあります。
- 午氾的な Bus 2009 ブロックの書き込み有効は、決して主張しません
- すべてのバスブロック上のその他の出力は、1 クロックサイクル後に発生します
DSP Builder では、バスブロック (RegField ブロックなど) は BusStimulus ブロックに依存しています。その間に暗黙の配線があります。そのため、Simulink は他のバスブロックの前で BusStimulus ブロックを実行する必要があります。しかし、Simulink はこの依存性を認識しないため、Simulink はこれらのブロックを任意の順序で自由に実行できます。
バスブロックの実行順序は、設計の変更によって変更されることがあります。例えば、自動検証のためにバスのレイテンシーに依存するデザインでは、スコープブロックを追加したためにエラーが発生する可能性があります。追加のブロックは、BusStimulus ブロックの前に RegField ブロックを配置することで実行順序を変更し、その間のレイテンシーを変更する場合があります。
この問題を回避するには、BusStimulus ブロックの優先度を DSP Builder デザインを含むサブシステム・ブロックより低い値に設定します。例えば、BusStimulus ブロック Priority を 0 に設定し、DSPBA サブシステム・ブロックを 1 に設定します。Simulink は、サブシステムの何より前に BusStimulus ブロックを実行し、一貫したバス動作を保証する必要があります。
実行順序を表示するには、メイン・メニュー・バーで[Display -> Blocks -> Sorted Execution Order (ソートされた実行順序)] を選択します。
ブロックの優先度を設定するには、ブロックを右クリックして、[プロパティ: 優先度] フィールドを [全般] タブで選択します。
注:優先度の値は、低い値が最初に実行されるという点で、実行順序に似ています。ただし、優先度の値は、サブシステムをまたがらないという点で実行順序とは異なります。これは、DSP Builder サブシステムに含まれるバスブロックではなく、DSP Builder サブシステムで優先順位を設定することが要件の理由です。