Я знаю, что verilog — это HDL и все о параллельной обработке, но проблема, с которой я сталкиваюсь, заключается в том, что мне нужно написать отчет о том, почему раздел кода на C ++ лучше в среде HDL.
Итак, у меня есть код C ++, который я написал в Verilog. Работает отлично. Теперь я должен написать отчет о том, как этот раздел кода работает быстрее в 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 и использование $time
или же $realtime
Команды ничего не скажут вам о том, сколько времени на самом деле требуется вашему аппаратному алгоритму для запуска.
Что вам нужно сделать, это синтезировать ваш Verilog в FPGA, а затем посмотреть на отчеты об синтезе, чтобы увидеть, сколько времени потребуется от изменения входных данных алгоритма до тех пор, пока выходные данные не станут действительными. Конечно, вам может понадобиться добавить конвейерную обработку или использовать ограничения синтеза, чтобы получить достойный результат от синтеза. Это не тривиальный процесс, поэтому ожидайте потратить время на изучение того, как это делается и делается хорошо.
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 ++ лучше :-).
Я думаю, что вы ищете это: $ время
Вот быстрый пример:
http://www.asic-world.com/verilog/vbehave2.html
пример