Предположим, у меня есть две схемы (описанные в vhdl), первая из которых выполняет следующий алгоритм в цикле (псевдокод):
C<=A+B;
D<=C+F;
RES <= D;
Я представляю этот алгоритм, применяя логику конечного автомата (FSM). Таким образом:
State1:C<=A+B;
out_ready<='0';--the result is not ready yet
nextstate<=State2;
State2:D<=C+F;
nextstate<=S_out;
S_out: RES<=D;
out_ready<='1';--the result is ready
nextstate<=State1;
Второй алгоритм также является последовательным и представлен через автоматную логику. Имейте в виду, что CSA — это Carry Save Adder, имеющий 3 входа (A, B, C) и мгновенно генерирующий два результата S и C:
S <= '0'&(A xor B xor C);
C <= (A and B) or (A and C) or (B and C) & '0';
Если мы суммируем S и C, мы получаем результат суммы
RES <= S+C;
Преимущество заключается в том, что в некоторых случаях вы можете работать только с векторами S и C (генерирует за один такт) без необходимости их добавления. Хорошо, вернемся к моему второму алгоритму:
(S,C)=(A,B,Carry_in);
(S,C)=(S,C,F);
RES_S=S;
RES_C=C;
Также это представляло применение FSM:
State_CSA_1:
S <= '0'&(A xor B xor 0);
C <= (A and B) or (A and 0) or (B and 0) & '0';
out_ready<='0';--the result is not ready yet
nextstate<=State_CSA_2;
State_CSA_2:
S <= '0'&(S xor C xor F);
C <= (S and C) or (S and F) or (C and F) & '0';
nextstate<=S_out;
S_out:
RES_S<=S;
RES_C<=C;
out_ready<='1';--the result is ready
nextstate<=State_CSA_1;
Итак, если я выполняю симуляцию (я использовал modelsim) с файлом тестового стенда, который меняет полярность тактового сигнала каждые 0,5 нс, я получаю, что в обоих случаях результат генерируется после 3 тактовых циклов. Но очевидно, что второй алгоритм гораздо быстрее. Учитывая, что я должен написать отчет о различиях между двумя схемами, у меня есть следующие вопросы:
1) Я хочу знать время, необходимое для выполнения двух алгоритмов. Если я проведу временной анализ, например, с помощью Xilinx ISE, будут ли различия между производительностью двух схем? Или и в этом случае время будет выводиться по 3 тактам?
2) Я должен сообщить время, потребляемую мощность и занимаемую площадь (площадь). Какое программное обеспечение вы рекомендуете? Поскольку у меня не так много времени, что-то простое в использовании или хорошо документированное (учебники и т. д.).
PS Два алгоритма были придуманы, пока я писал этот пост, я занимаюсь другими скучными вещами.