【问题标题】:Can I find the execution time of verilog code?我可以找到verilog代码的执行时间吗?
【发布时间】:2013-10-22 20:15:29
【问题描述】:

我知道 verilog 是一种 HDL 并且它完全是关于并行处理,但我面临的问题是我必须写一份报告,说明为什么一段 C++ 代码在 HDL 环境中更好。

所以我有了用 Verilog 编写的 C++ 代码。它完美地工作。现在我必须写一篇关于这部分代码如何在 Verilog 中更快的报告。所以我必须做执行时间比较。

我设法使用以下方法找到了我的 C++ 代码的执行时间:

#include <iostream.h>
#include <time.h>
using namespace std;


int main()
{
    clock_t t1,t2;
    t1=clock();
    //code goes here
    t2=clock();
    float diff ((float)t2-(float)t1);
    cout<<diff<<endl;
    system ("pause");
    return 0;

}

现在如何在 Verilog 中获得相同的结果? Xilinx 编译器中是否有任何选项可以告诉我该代码在被编程到 FPGA 板上后需要多长时间才能产生最终结果?或者我可以在代码中添加一些能够给出这个结果的东西吗?

谢谢

【问题讨论】:

  • 这段代码不是用 Verilog 写的,这不是 Verilog 的语法,可能是你写的,并为 Xilinx Linux 交叉编译过......你无法合成这样的代码......
  • 我给出的代码是 C++。这只是一个例子。实际代码很长。我想说的是&lt;time.h&gt;是我在C++中用来查找执行时间的方法。
  • 在 fpga 或 verilog 模拟器上,计算结果需要多个时钟周期。将其乘以 1/clock_frequency 即可得到执行时间。

标签: c++ hardware verilog fpga hdl


【解决方案1】:

我认为你完全没有抓住重点。您不用 Verilog 执行程序,而是用它设计硬件。它是一种硬件描述语言。运行 Verilog 模拟并使用 $time$realtime 命令不会告诉您算法在硬件中运行实际需要多长时间。

您需要做的是将 Verilog 合成到 FPGA,然后查看合成报告,了解从算法输入发生变化到输出有效需要多长时间。当然,您可能需要添加流水线或使用综合约束才能从综合中获得不错的结果。这不是一个简单的过程,所以希望花时间学习它是如何完成的并且做得很好。

【讨论】:

  • 我同意 OP 显然错过了他的作业重点,但我只想指出您在 Verilog 中执行“执行程序”。它是并且一直是模拟语言。将 Verilog 描述转化为硬件是一个难题,可以通过启发式方法解决,并且只使用语言的一个子集。
  • @EML 在这种情况下,OP 特别询问“在将其编程到 FPGA 之后”的执行时间,我认为在 Verilog 中运行 simulation 仍然是与在 Verilog 中编写程序大不相同。如果我的语气很严厉,我深表歉意,但我对那些将 Verilog 和 VHDL 视为另一种编程语言的学生感到筋疲力尽。
【解决方案2】:

Verilog 是关于描述硬件行为的。 verilog 模拟器就是在电脑上模拟描述。 一个verilog模拟器就是模拟fpgas中的行为实现。

在任何情况下,模拟或仿真都需要多个周期。您的 C++ 程序只需要“1”个周期。所以,首先你必须让它运行多个周期,提供时钟的变化。像这样的:

for (int i = 0; i < MAX_CYCLES; i++) {
    myClk = ~ myClk;
    executeMyCode(myClk);
}

对于 verilog 模拟,您需要类似的东西来切换时钟:

initial begin
    for (int i = 0; i < MAX_CYCLES; i++) begin
        #1 myClk= ~myClk
    end
    $finish;
end

您无法在 fpgas 中合成上述内容,因此对于仿真,您需要使用时钟并告诉仿真器运行多长时间(MAX_CYCLES?),确保时钟更改的次数与 c++ 或仿真中的一样多。

verilog 模拟从不在计算机上并行运行。它只是通过改变模型不同部分的评估顺序来假装这样做。

仿真基于硬件实现实现真正的并行性。

根据代码的性质,您可能会发现 c++ 更好:-)。

【讨论】:

    【解决方案3】:

    我认为您正在寻找的是:$time

    这是一个简单的例子: http://www.asic-world.com/verilog/vbehave2.html example

    【讨论】:

    • 我会一直使用 $realtime,那么你就不受时间准确性的限制了。
    猜你喜欢
    • 2021-01-12
    • 2015-07-20
    • 2014-02-17
    • 2021-02-07
    • 2021-11-15
    • 1970-01-01
    • 2015-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多