2015-08-19 2 views
2

Я пытаюсь MONITER состояние этой переменной:Есть ли способ показать переменные в ISim?

shared variable Div16 : integer := 0; 

Но я ПОЛУЧАТЬ эту ошибку в Isim:

Isim еще не поддерживает отслеживание VHDL переменных.

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

Полный код:

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; 
+0

Вы должны объявить переменную в процессе, поэтому не нужно объявлять ее как общую. – Paebbels

ответ

2

Вы можете добавить:

signal Div16_signal : integer := 0; 

, а затем в то конец вашего процесса добавления:

Div16_signal <= Div16; 
+0

это исправляет, спасибо! – VKkaps

+1

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

+0

@Paebbels Так будет ли объявление сигнала выглядеть следующим образом: "Div16_signal: unsignedinteger: = 0;" и я не совсем уверен, что выражение переменной для преобразования будет выглядеть так: – VKkaps

0

В дополнение к ответу @ 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; 

 Смежные вопросы

  • Нет связанных вопросов^_^