Есть ли способ показать переменные в ISim?

Я пытаюсь отслеживать состояние этой переменной:

shared variable Div16 : integer := 0;

Но я получаю эту ошибку в ISim:

ISim пока не поддерживает трассировку переменных VHDL.

Можете ли вы преобразовать переменную в сигнал в файле тестовой среды? Или есть другой способ показать изменение этого значения в виде сигнала?

Полный код:

entity MAIN_UART is
  generic (
    DIVISOR: natural := 120 -- DIVISOR = 50,000,000 / (16 x BAUD_RATE)
    -- 9600 -> 120
     -- 19200 -> 60
  );
  port (
    CLK: in std_logic;        -- clock
    RST: in std_logic         -- reset
  );
end MAIN_UART;

architecture Behavioral of MAIN_UART is

    signal Top16: std_logic; -- 1 clk spike at 16x baud rate    
    shared variable Div16 : integer := 0;

--  constant COUNTER_BITS : natural := integer(ceil(log2(real(DIVISOR))));

begin

-- --------------------------
-- Clk16 Clock Generation
-- --------------------------
    process (RST, CLK)
    begin
        if RST='1' then
            Top16 <= '0';  --good
            Div16 := 0;
        elsif rising_edge(CLK) then
            Top16 <= '0';
                if Div16 = Divisor then
                    Div16 := 0;
                    Top16 <= '1';  --good
                else
                    Div16 := Div16 + 1;
                end if;
        end if;
    end process;

end Behavioral;

person VKkaps    schedule 19.08.2015    source источник
comment
Вы должны объявить переменную в процессе, поэтому нет необходимости объявлять ее как совместно используемую.   -  person Paebbels    schedule 19.08.2015


Ответы (2)


Можете добавить:

signal Div16_signal : integer := 0;

А затем в конце вашего процесса добавьте:

Div16_signal <= Div16;
person 0xMB    schedule 19.08.2015
comment
Если вы хотите, чтобы iSim предлагал другие радиусы, отличные от значения по умолчанию, вам нужно объявить сигнал div16 как, например, SIGNED и добавить преобразование в переменную для назначения сигнала :). - person Paebbels; 19.08.2015
comment
@Paebbels Итак, объявление сигнала будет выглядеть так: signal Div16_signal: unsignedinteger: = 0; и я не совсем уверен, как будет выглядеть переменная в операторе преобразования - person VKkaps; 19.08.2015

В дополнение к ответу @ 0xMB.

Если вы хотите, чтобы iSim предлагал другие радиусы, отличные от значения по умолчанию, вам необходимо объявить сигнал div16 как, например, SIGNED и добавить преобразование в переменную для присвоения сигнала.

architecture rtl of myEntity is
  signal DBG_div16  : SIGNED(31 downto 0);
begin

  process(clk)
    variable div16 : integer := 0;
  begin
    -- some code

    -- assign the variable to a signal, so iSim can display it's value
    DBG_div16 <= signed(div16, DBG_div16'length);
  end process;

end architecture;
person Paebbels    schedule 19.08.2015