動作中のバス機能モデルを編成し、一般的に使用される手順 (CPU サブルーチンのように見える) をパッケージにプッシュして、メインの CPU モデルから取り出したいのですが、行き詰まっています。
プロシージャは、パッケージにプッシュされている場合、ハードウェア ビットにアクセスできません。Verilog では、一般的に使用される手順をインクルード ファイルに入れ、特定のテスト スイートの必要に応じてそれらを CPU モデルにリンクします。
詳細:
シミュレーション テスト ベンチ用に、CPU の動作するバス機能モデルがあります。「ユーザー インターフェイス」レベルでは、「メイン」と呼ばれるプロセスが CPU モデル内で実行され、次のように定義済みの「命令セット」を呼び出します。
cpu_read(address, read_result);
cpu_write(address, write_data);
等
これらの呼び出しのグループを、次のようなより高いレベルの手順にまとめます
configure_communication_bus;
clear_all_packet_counters;
等
次のレイヤーで、これらの汎用関数は、デザインのインターフェイス タイミングを認識しているよりハードウェア固有のバージョンを呼び出します。これらのプロシージャは、入力レコードと出力レコードを使用してハードウェア モジュール ポートに接続し、必要に応じて CPU バス信号を揺らします。
cpu_read 呼び出しhardware_cpu_read(cpu_input_record, cpu_output_record, address)
;
このようなもの:
procedure cpu_read (address : in std_logic_vector(15 downto 0);
read_result : out std_logic_vector(31 downto 0));
begin
hardware_cpu_read(cpu_input_record, cpu_output_record, address, read_result);
end procedure;
およびは、cpu モデルの vhdl ファイルでタイプ nnn_record の信号として宣言されていますcpu_input_record
。cpu_output_record
したがって、これはすべて機能していますが、これらのプロシージャはすべて cpu VHDL モジュール ファイルに格納され、すべてプロシージャ宣言セクションに格納されているため、すべてが同じスコープ内にあります。
チーム メンバーとモデルを共有する場合、チーム メンバーは独自のテスト サブルーチンを追加する必要があり、それらもすべてファイル内の同じ場所にあり、シミュレーション テスト コードは私のものと一緒に「メイン」プロセスに入る必要があります。 .
モデルの外部からさまざまなテストをリンクし、モデル固有の手順のみをモデル ファイルに保持したいと思います。
皮肉なことに、最下位レベルのハードウェア プロシージャをパッケージにプッシュし、それらのプロシージャを「メイン」プロセス内から呼び出すことはできますが、上位レベルのプロセスは、そのパッケージまたは他のパッケージに配置することはできません。cpu_read_record
およびへのアクセスcpu_write_record
。
このコードをクリーンアップしてモジュール化する簡単な方法が必要だと思いますが、明らかに何かが欠けています。
ちなみに、コマンド インタープリターを作成し、テスト コードをビヘイビアー ROM にロードすることが正しい方法だとは思いません。Cプログラムを接続するためにシミュレータインターフェースと戦っているわけでもありませんが、故障してこれを試すかもしれません..