0

我知道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 板上后需要多长时间才能产生最终结果?或者我可以在代码中添加一些能够给出这个结果的东西吗?

谢谢

4

3 回答 3

5

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

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

于 2013-10-22T22:30:07.610 回答
1

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++ 更好:-)。

于 2017-06-18T16:28:15.267 回答
0

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

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

于 2013-10-22T21:26:50.803 回答