VCD Дамп только под-части дизайна через modelsim - PullRequest
0 голосов
/ 10 августа 2011

У меня большой дизайн, который включает в себя тестовый стенд, некоторую тестовую схему и саму тестируемую схему. Я использую 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;

Ура, Ste

Ответы [ 2 ]

5 голосов
/ 10 августа 2011

Последний параметр для vcd add - это путь иерархии design (с использованием имен экземпляров) сигналов, которые вы хотите добавить (* означает все сигналы, хотя с -r сигнал также распространяется на все уровни дизайна ниже указанной вами иерархии).

Таким образом, если ваш minimips создан в sim_minimips с использованием имени экземпляра i_minimips, правильный способ добавить все сигналы в (этот конкретный) minimips и любые блоки, которые он может создать, -

vcd add -r /sim_minimips/i_minimips/*

Если вы хотите ограничить элементы для добавления в VCD немного дальше, вы можете добавить один или несколько параметров -in, -inout, -out, -internal или -ports, которые выбирают только предметы этих типов. Или пропустите -r, чтобы не спускаться в иерархию - обычно используется vcd add -ports /sim_minimips/minimips/*, который добавляет только порты верхнего уровня проектирования, подходящие для генерации стимула для многих типов испытательных стендов.

Следует отметить, что vcd add работает "просто", как wave add, то есть спецификация объекта находится в точно таком же формате. Таким образом, часто самый простой способ добавить элементы в VCD - это добавить их к волне в пользовательском интерфейсе Modelsim, скопировать команду из транскрипта и просто изменить 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/.

0 голосов
/ 06 марта 2017

Ответ на вопрос уже дан в предыдущем посте. Ниже приведен альтернативный метод для создания файла VCD в Modelsim, который будет принят инструментом Tetramax ATPG компанией Synopsys

.
# Simulate the design
vsim -novopt work.mips_tb

# Create the VCD file
vcd dumpports -file mips.vcd /mips_tb/tb/*

Мой испытательный стенд (для справки)

module mips_tb;
mips_core tb
        (
            clk,rst,cop_dout,
            din,  ins_i,iack_o,cop_addr_o,
            cop_data_o,cop_mem_ctl_o,  addr_o,
            dout,  pc_o,  wr_en_o
        );
...
...