2016-06-03 2 views
0
variable cmp_diference : real; 
variable y_aus_tb  : real := 4.9261; 
variable log3X   : real := 4.929947e+00; 
.  
. 
cmp_diference := y_aus_tb - log3X; 
assert cmp_diference < 0.005 report "log3X = " & real'image(log3X); 
assert cmp_diference < 0.005 report "Diference = " & real'image(cmp_diference); 

Таким образом, проблема в том, что & real'image(log3X) отображает правильное значение в правильном случае в TCL, но & real'image(cmp_diference) дисплеи: 3.252959e-03 также в правильном случае, но неправильное значение ... Значение для отображения будет ~ -0.003847 ...vivado отображает неправильно действительные числа - испытательный стенд - VHDL

Есть ли что-то не так с Vivado 2016.1, или что-то не так, что я делаю?

Большое спасибо!

LIBRARY ieee; 
    USE ieee.std_logic_1164.ALL; 
    USE ieee.numeric_std.ALL; 
    USE IEEE.MATH_REAL.ALL; 

    ENTITY tb_log3X IS 
    END tb_log3X; 

    ARCHITECTURE behavior OF tb_log3X IS 

    BEGIN 
    Test_IO : process 
     variable log3X : real  := 0.0; 
     variable x_ein_tb : integer := 0; 
     variable cmp_diference : real := 0.0; 
     variable y_aus_tb : real := 0.0; 

    begin 
     wait for 21.2 ms; --wait for some reason 
      x_ein_tb := 224; 
      y_aus_tb := 4,9261; 
      -- Caclulate log3X 
      log3X := (log(real(x_ein_tb)))/(log(3.0)); -- logarithm to base 3 of 224 
      -- Compare log3X to Y 
      cmp_diference := y_aus_tb - log3X; 
      -- If diference > 0.009, generate Error message and dispaly the diference between log3X and Y 
      assert cmp_diference > 0.009 report "log3X = " & real'image(log3X); 
      assert cmp_diference > 0.009 report "Diference = " & real'image(cmp_diference); 
     end process Test_IO; 
    END; 

ответ

1

Было бы вежливо, чтобы сделать полный TestCase (MCVE), так что другие могут легко проверить свой код без необходимости ставить ненужные усилия в него. Что-то вроде

entity tb_real is 
end tb_real; 

architecture basic of tb_real is 
begin 

process 
variable cmp_diference : real; 
variable y_aus_tb  : real := 4.9261; 
variable log3X   : real := 4.929947e+00; 
begin 
report "Run process"; 
cmp_diference := y_aus_tb - log3X; 
assert cmp_diference < 0.005 report "log3X = " & real'image(log3X); 
assert cmp_diference < 0.005 report "Diference = " & real'image(cmp_diference); 
report "reporting log3X = " & real'image(log3X); 
report "reporting Diference = " & real'image(cmp_diference); 
wait; 
end process; 

end basic; 

Запуск его с другим симулятором ...

$ ghdl -a tb_real.vhd 
$ ghdl -e tb_real 
$ ghdl -r tb_real 
tb_real.vhd:12:2:@0ms:(report note): Run process 
tb_real.vhd:16:2:@0ms:(report note): reporting log3X = 4.929947 
tb_real.vhd:17:2:@0ms:(report note): reporting Diference = -3.847000000000377e-3 

В тестах утверждают, возвращает истину, если любой из них утверждает, пожары, что-то очень неправильно в Vivado.

Скорее, некоторые другие утверждают, что где-то в другом месте стреляют, в коде, который вы не опубликовали, - помните о MCVE? - и смущает вас, думая, что один из них уволен.

+0

сейчас есть MCVE моего кода. Однако мой пример кода - это то же самое, что вы сделали в приведенном здесь примере. Если есть способ его решить, это может мне очень помочь ... – Limko

+0

Ваш MCVE doess даже не компилируется. –

+0

Исправление, что GHDL сообщает 'tb_log3x.vhd: 27: 12: @ 21200us: (ошибка утверждения): log3X = 4.925892517018708 tb_log3x.vhd: 28: 12: @ 21200us: (ошибка утверждения): Difference = 2.074829812910294e-4 'который не согласуется ни с одним из чисел в вашем вопросе. но выглядит подходящим. При необходимости обновите вопрос с фактического вывода из вашего (скорректированного) MCVE. –

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