メインコンテンツ

このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。

タイムスケール:絶対的、相対的、自動的

この例では、HDL コシミュレーション ブロック内のさまざまなタイムスケール設定を示し、これらが Simulink® と HDL シミュレータのタイミング関係にどのように影響するかを説明します。シンプルな Verilog パリティ チェック モデルを使用して、Simulink とコシミュレーションに使用される HDL シミュレータ (ModelSim® または Xcelium™) のタイミング関係を示します。

はじめに

このモデルは、単純なパリティ チェッカーの HDL 実装のコシミュレーションを示し、HDL コシミュレーション ブロックの タイムスケール ペインで使用できるさまざまなオプションを紹介します。このペインでは、Simulink 時間は絶対的または相対的な意味で HDL シミュレータ時間に関連付けられます。関係を明示的に設定することも、Simulink および HDL 設計の知識に基づいてソフトウェアがいずれかのモードで関係を自動的に選択するようにすることもできます。

Simulinkモデルを開く

ModelSim または QuestaSim を使用している場合は、モデル parity_check_mq.slx が開いている必要があります。Xcelium を使用している場合は、ModelSim モデルを閉じて、モデル parity_check_in.slx を開きます。

% For ModelSim:
modelName = 'parity_check_mq';
open_system(modelName);
% For Xcelium:
modelName = 'parity_check_in';
open_system(modelName);

協調シミュレーションに使用される Verilog コード

パリティ チェックは、データにエラーがないかチェックするためにデータ ストリームにパリティ ビットを追加する方法です。この例では、「偶数パリティ ビット」方式を使用します。この方式では、特定のビット セット内の 1 の数が奇数の場合 (パリティ ビットを含めた 1 の合計数が偶数になる)、パリティ ビットが 1 に設定されます。

パリティ チェッカーへの入力を 8 ビット、出力を 1 ビットとして選択します。この例で使用される Verilog コードは paritychecker.v です。

協調シミュレーションのためのモデルの準備

この例のさまざまな手順をガイドするために、番号付きの手順を用意しました。番号の付いた各ステップの後に、そのステップについての簡単な説明が続きます。

1.ModelSim/Xcelium を起動する

モデルを実行する前に、まず HDL シミュレーターを起動する必要があります。これには、モデル内で提供されている起動コマンドを使用するか、以下のシミュレータ固有のコマンドを実行します。これにより、HDL シミュレータの解像度も 1ns に設定されます。

Modelsim/Questasim の場合:

vsim('tclstart', paritycmds('1ns'));

Xcelium の場合:

nclaunch('tclstart', paritycmds_in('1ns'));

2. HDLコシミュレーションブロックのポートペイン内の設定を確認します

HDL コシミュレーション ブロックをダブルクリックして、コシミュレーション パラメータを編集します。[ポート] ペインを選択します。

  • 出力信号のサンプル時間は、モデルのサンプリング レートである Ts に設定されます。Ts の値を指定する方法は多数あります。モデルの PreLoadFcn コールバック内から Ts を設定しました (モデルのコールバックの作成 (Simulink) を参照)。MATLAB® コマンド プロンプトでベース ワークスペースの Ts の値を設定することもできます。

  • 直接フィードスルーを許可するオプションがチェックされていることに注意してください。これは、Verilog コードが純粋に組み合わせであるためです。

このモデルは、次の 3 つのタイミング モードで動作するように設定されています。絶対、相対、自動タイムスケール。これらのモードの詳細については、ユーザー ガイドのセクション シミュレーションのタイムスケール を参照してください。

絶対タイムスケール

絶対タイミング モードでは、絶対時間単位とスケール係数に基づいて Simulink と HDL シミュレータ間のタイミング関係を定義できます。

3. モデル内の絶対モード注釈をクリックして、次のように設定します:

  • サンプル時間 Ts = 10

  • HDL コシミュレーション ブロックのタイムスケール ペインを「Simulink の 1s は HDL シミュレータの 1ns に対応します」に設定します。

または、次の関数を呼び出します。

paritytimescale('absolute');

この場合の絶対時間単位は「ns」、スケール係数は「1」です。

4.モデルを実行する

HDL シミュレータの波形は 100 ns のシミュレーション実行を示しますが、Simulink スコープはモデルが 100 秒間実行された様子を示します。これは、HDL シミュレータの Simulink = 1ns のタイムスケール設定が 1s の場合に予想されます。

相対的な時間スケール

相対タイミング モードでは、Simulink と HDL シミュレータ間のタイミング関係を相対的に、つまり HDL シミュレータのティック数として定義できます。

5. モデル内の相対モード注釈をクリックして、次のように設定します:

  • サンプル時間 Ts = 10

  • HDL コシミュレーション ブロックのタイムスケール ペインを「Simulink の 1 秒は HDL シミュレータの 1 ティックに対応します」に設定します。

paritytimescale('relative');

この場合の時間単位は HDL シミュレータのティックであり、スケール係数は '1' です。

6. HDLシミュレーションを再起動します。

ModelSimの場合:HDL シミュレータ内から再起動を呼び出すことができます。

vsim> restart

Xcelium の場合:まずすべての HDL シミュレータ ウィンドウを閉じて、シミュレータを再起動します。

nclaunch('tclstart',paritycmds_in('1ns'));

7. モデルを実行する

HDL シミュレータの波形は 100 ns のシミュレーション実行を示しますが、Simulink スコープはモデルが 100 秒間実行された様子を示します。これは、HDL シミュレータの Simulink = 1 Tick でタイムスケールが 1 秒に設定されている場合に予想されます (シミュレータの解像度は 1ns に設定されています)。得られた波形は、絶対時間スケーリング モードで得られた波形と似ています。

8. HDL シミュレータの解像度を変更する

ここで、HDL シミュレータの解像度を 1ps に変更した場合の効果を確認します。すべての HDL シミュレータ ウィンドウを閉じ、1ps のタイムスケール解像度を使用して再起動します。

Modelsim/Questasim の場合:

vsim('tclstart',paritycmds('1ps'));

Xcelium の場合:

nclaunch('tclstart',paritycmds_in('1ps'));

同じ 10 個のサンプルに対して Simulink モデルを実行します。HDL シミュレータでは、タイムスケールが Simulink = 1 ティックで 1 秒に設定されているため、HDL シミュレータは 100 ps 実行されます。

自動タイムスケール

HDL コシミュレーション ブロックの [タイムスケール] ペイン内の [今すぐタイムスケールを決定] プッシュボタンは、Simulink と HDL シミュレータ間のタイミング関係を計算します。リンクは HDL シミュレータの解像度を見つける必要があるため、HDL シミュレータを起動して実行しておく必要があることに注意してください。

1ns 解像度を使用して HDL シミュレータを再起動します

まず、開いている HDL シミュレータ ウィンドウをすべて閉じます。操作:

ModelSimの場合:

vsim('tclstart',paritycmds('1ns'));

Xcelium の場合:

nclaunch('tclstart',paritycmds_in('1ns'));

リンク ソフトウェアでタイミング関係を定義できるようにすると、HDL シミュレータと Simulink 間のタイムスケール係数を、HDL シミュレータの 1 秒 = Simulink の 1 秒 (絶対タイムスケール モード) にできるだけ近くなるように設定しようとします。この設定が不可能な場合、HDL Verifier は Simulink モデル ポートの信号レートを HDL シミュレータ ティックの可能な限り低い数に設定しようとします (相対タイムスケール モード)。

次の手順に示すように、モデル内で自動タイムスケールを使用します。

9. タイムスケール ペインの [今すぐタイムスケールを決定] ボタンをクリックします

これにより、タイムスケールを「HDL シミュレーターで Simulink の 1s = 1e-10s」に設定することが提案されます。情報ペインが表示されます:

HDL Verifier ソフトウェアは最初に 1:1 のタイムスケール設定を実現しようとしましたが、HDL シミュレータの解像度が 1ns に設定されており、Ts=10 秒を表すと 10e9 のティック数になり、2^31 - 1 (=2.1475e9) の許容制限を超えるため、実現できませんでした。2^31 - 1 は int32 の最大値です。

HDL Verifier が絶対的な 1:1 タイムスケールを確立できなくなると、相対タイムスケール モードに切り替わり、基本サンプル時間 (Ts=10 秒) が 1 HDL ティックと等しくなります。したがって、Simulink の 10 秒は 1 HDL ティックに対応し、つまり、Simulink の 1 秒は HDL シミュレーターの 0.1 ティックに対応します。

HDL コシミュレーション ブロックによって提案された変更を適用します。

11.モデルを実行する

HDL シミュレータ内および Simulink スコープからの波形を以下に示します。HDL シミュレーターが 10ns で進行するのに対し、Simulink モデルは 100 秒間実行されることに注意してください。

HDL Verifier が 1:1 マッピングを選択しなかった理由を理解することが重要です。タイムスケール設定を「Simulink の 1 秒が HDL シミュレータの 1 秒に対応する」に設定し、この変更を適用してモデルを実行すると、Simulink で次のエラーが発生します。

12.無理数サンプリング時間(Ts = pi*1e-9)を設定する

Simulink 内で無理数のサンプル時間 (たとえば、Ts = pi*1e-9) を使用すると、自動タイムスケールは Simulink シミュレーションと HDL シミュレーション時間の間の正確な関係を維持できなくなります。この場合、コシミュレーションの結果は正しいものの、Simulink スコープと HDL シミュレータの時間軸は 1:1 の関係にはなりません。

13.タイムスケールを「Simulink の 1 秒 = HDL シミュレータの 1 秒」 に設定します。

1:1 の関係が不可能である理由を理解するには、タイムスケールを「Simulink の 1 秒 = HDL シミュレータの 1 秒」に設定し、モデルを実行します (HDL シミュレータでシミュレーションを再開した後)。この場合、π は無理数であり、1ns (HDL シミュレータの解像度) の整数倍ではないため、1:1 のタイミング関係は不可能です。この場合、Simulink は次の画像に示すようにエラー メッセージを表示します。

メモ: HDL コシミュレーション ブロック内のタイムスケール設定を変更するたびに、HDL シミュレータ内でシミュレーション実行を再開する必要があります。