【问题标题】:vivado displays wrong real numbers - testbench - vhdlvivado 显示错误的实数 - testbench - vhdl
【发布时间】:2016-06-03 09:33:30
【问题描述】:
 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);

所以问题是&amp; real'image(log3X)在TCL中以正确的大小写显示正确的值,但&amp; real'image(cmp_diference)显示:3.252959e-03也以正确的大小写但错误的值...预期显示的值是@ 987654325@...

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;

【问题讨论】:

    标签: vhdl vivado


    【解决方案1】:

    制作一个完整的测试用例 (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
    

    由于断言测试返回 true,如果这些断言中的任何一个触发,则 Vivado 中出现了严重错误。

    更有可能其他地方的其他断言正在触发,在您没有发布的代码中 - 还记得 MCVE 吗? - 并让你误以为其中一个被解雇了。

    【讨论】:

    • 现在我的代码有一个 MCVE。但是,我的代码示例 more less 与您在此处提供的示例中所做的相同。如果有办法解决它,那么它可能对我有很大帮助......
    • 你的 MCVE 甚至没有编译。
    • 解决这个问题,GHDL 报告 tb_log3x.vhd:27:12:@21200us:(assertion error): log3X = 4.925892517018708 tb_log3x.vhd:28:12:@21200us:(assertion error): Diference = 2.074829812910294e-4 与您问题中的任何一个数字都不一致。但看起来很合适。如果合适,请使用(更正后的)MCVE 的实际输出更新问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    相关资源
    最近更新 更多