2016-06-03 14 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); 

Das Problem ist also, dass & real'image(log3X) zeigt den richtigen Wert im richtigen Fall in TCL, aber & real'image(cmp_diference) zeigt: 3.252959e-03 auch im richtigen Fall aber falschen Wert ... Der Wert Expected angezeigt zu werden ist ~ -0.003847 ...vivado zeigt falsche reellen Zahlen - Prüfstand - vhdl

Ist etwas falsch mit Vivado 2016.1, oder ist etwas falsch, das ich mache?

Vielen Dank!

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; 

Antwort

1

Es wäre höflich einen kompletten Testfall (MCVE) zu machen, so dass andere leicht Ihren Code testen können, ohne in sie unnötige Mühe geben zu müssen. So etwas wie

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; 

Lauf es mit einem anderen Simulator ...

$ 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 

Da die assert Tests return true, wenn eine dieser Brände behauptet, etwas in Vivado sehr falsch ist.

Wahrscheinlicher ist, dass ein anderer behauptet, irgendwo anders feuert, in Code, den Sie nicht gepostet haben - erinnern Sie sich an den MCVE? - und verwirrte dich zu denken, dass einer von ihnen gefeuert wurde.

+0

jetzt gibt es einen MCVE meines CODE. Allerdings ist mein Codebeispiel mehr das gleiche, was Sie in Ihrem Beispiel hier getan haben. Wenn es einen Weg gibt, es zu lösen, dann kann es mir sehr helfen ... – Limko

+0

Ihr MCVE wird nicht einmal kompiliert. –

+0

Behebung, dass GHDL meldet 'tb_log3x.vhd: 27: 12: @ 21200us: (Assertionsfehler): log3X = 4.925892517018708 tb_log3x.vhd: 28: 12: @ 21200us: (Assertionsfehler): Difence = 2.074829812910294e-4 'das stimmt mit keiner der Zahlen in Ihrer Frage überein, sieht aber angemessen aus. Aktualisieren Sie die Frage gegebenenfalls mit der tatsächlichen Ausgabe von Ihrem (korrigierten) MCVE. –