0

テストベンチ、いくつかのテスト回路、およびテスト対象の回路自体を含む大きな設計があります。デザインのシミュレーションに modelsim を使用していますが、シミュレーションのダンプが必要です。次のコマンドを使用してダンプを生成するように提案されました。

vcd file myvcd1.vcd
vcd add -r /sim_minimips/*

動作するように見えますが、テスト中の回路に対してのみダンプを生成したいと考えています。

考慮したいファイルの名前だけを指定して、同じコマンドを使用しようとしました:

vcd file myvcd2.vcd
vcd add -r /minimips/*

しかし、次のエラーが生成されました:

Error vsim 3561 No object matching minimips

エラーがわかりません。これがサブパーツを分離するための正しい手順であるかどうかもわかりません。

この値の変更のダンプに関するまともな簡単なチュートリアルをどこで入手できるかを知っている人はいますか?

テスト ベンチ エンティティをアタッチします。

library IEEE;
use IEEE.std_logic_1164.all;

library std;
use std.textio.all;

library work;
use work.pack_mips.all;

entity sim_minimips is
end;

architecture bench of sim_minimips is

  component minimips is
  port (
      clock    : in std_logic;
      reset    : in std_logic;

      ram_req  : out std_logic;
      ram_adr  : out bus32;
      ram_r_w  : out std_logic;
      ram_data : inout bus32;
      ram_ack  : in std_logic;

      it_mat   : in std_logic
  );
  end component;


  component ram is
    generic (mem_size : natural := 256;
             latency : time := 10 ns);
    port(
        req        : in std_logic;
        adr        : in bus32;
        data_inout : inout bus32;
        r_w        : in std_logic;
        ready      : out std_logic
  );
  end component;

  component rom is
  generic (mem_size : natural := 256;
           start : natural := 0;
           latency : time := 10 ns);
  port(
          adr : in bus32;
          donnee : out bus32;
          ack : out std_logic;
          load : in std_logic;
          fname : in string
  );
  end component;

  signal clock : std_logic := '0';
  signal reset : std_logic;

  signal it_mat : std_logic := '0';

  -- Connexion with the code memory
  signal load : std_logic;
  signal fichier : string(1 to 7);

  -- Connexion with the Ram
  signal ram_req : std_logic;
  signal ram_adr : bus32;
  signal ram_r_w : std_logic;
  signal ram_data : bus32;
  signal ram_rdy : std_logic;

begin

    U_minimips : minimips port map (
        clock => clock,
        reset => reset,
        ram_req => ram_req,
        ram_adr => ram_adr,
        ram_r_w => ram_r_w,
        ram_data => ram_data,
        ram_ack => ram_rdy,
        it_mat => it_mat
    );

    U_ram : ram port map (
        req => ram_req,
        adr => ram_adr,
        data_inout => ram_data,
        r_w => ram_r_w,
        ready => ram_rdy
    );

    U_rom : rom port map (
        adr => ram_adr,
        donnee => ram_data,
        ack => ram_rdy,
        load => load,
        fname => fichier
    );

    clock <= not clock after 20 ns;
    reset <= '0', '1' after 5 ns, '0' after 70 ns;
    ram_data <= (others => 'L');

    process
        variable command : line;
        variable nomfichier : string(1 to 3);
    begin
        write (output, "Enter the filename : ");
        readline(input, command);
        read(command, nomfichier);

        fichier <= nomfichier & ".bin";

        load <= '1';
        wait;
    end process;

    -- Memory Mapping
    -- 0000 - 00FF      ROM

    process (ram_adr, ram_r_w, ram_data)
    begin -- Emulation of an I/O controller
        ram_data <= (others => 'Z');

        case ram_adr is
            when X"00001000" => -- program an interrupt after 1000ns
                                it_mat <= '1' after 1000 ns;
                                ram_rdy <= '1' after 5 ns;
            when X"00001001" => -- clear interrupt line on cpu
                                it_mat <= '0';
                                ram_data <= X"FFFFFFFF";
                                ram_rdy <= '1' after 5 ns;
            when others      => ram_rdy <= 'L';
        end case;
    end process;

end bench;

乾杯、ステ

4

2 に答える 2

5

の最後のパラメーターvcd addは、追加する信号のデザイン階層パス (インスタンス名を使用) です (*すべての信号を意味しますが、-r信号を使用すると、指定した階層の下のデザインのすべてのレベルにも展開されます)。 )。

したがって、インスタンス名を使用してminimipsがインスタンス化されている場合、(その特定の) すべての信号とそれがインスタンス化する可能性のあるブロックを追加する正しい方法は次のとおりです。sim_minimipsi_minimipsminimips

vcd add -r /sim_minimips/i_minimips/*

VCD に追加する項目をさらに制限したい場合は、これらのタイプの項目のみを選択する-in-inout-out-internalまたはの 1 つ以上のパラメーターを追加できます。-portsまたは-r、階層に降りないように を省略します。一般的な使用法はvcd add -ports /sim_minimips/minimips/*、デザインのトップ レベルのポートのみを追加することで、多くのタイプのテスト ベンチのスティミュラスを生成するのに適しています。

vcd addのように「まったく」動作することに注意してくださいwave add。つまり、オブジェクトの仕様はまったく同じ形式です。したがって、VCD に項目を追加する最も簡単な方法は、Modelsim UI で項目を Wave に追加し、トランスクリプトからコマンドをコピーして貼り付け、単純に を に変更するwave addことvcd addです。

また、ここではファイル名は重要ではなく、デザイン自体の構造のみが重要です。たとえば、次のようなものがあるとします。

entity sim_minimips is
    port (
        -- ...
    );
end sim_minimips;

entity minimips is
    port (
        -- ...
    );
end minimips;

architecture tb of sim_minimips is
    component minimips
        port (
            -- ...
        );
    end component;
begin
    I_MINIMIPS: minimips
        port map (
            -- ...
        );
end architecture tb;

この場合、minimipsインスタンスへのパスは/sim_minimips/I_MINIMIPS/.

于 2011-08-10T06:08:58.617 に答える