Medição de tempos de propagação em circuitos combinacionais - Quartus II
O circuito abaixo realiza o cálculo da distância de Hamming entre dois sinais. O hardware está descrito em VHDL de forma genérica para permitir o estudo dos diferentes tempo de propagação e área do chip ocupado pelo circuito conforme as restrições de tempo impostas. Os valores de N e M definem respectivamente o tamanho dos vetor de entrada a e b e do vetor de saída y. A distância de Hamming é fornecida através de um número binário sem sinal. Note que M = ceil(log2(N)), ou seja para N = 8 bits => M = 4 bits, pois o número 8 é representado como "1000".
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity hamming_distance is
generic (
N: natural := 31;
M: natural := 5); -- M = ceil(log2(N))
port(
a, b : in std_logic_vector (N-1 downto 0);
y : out std_logic_vector (M-1 downto 0));
end entity;
architecture ifsc_arch_gen of hamming_distance is
signal diff: unsigned (N-1 downto 0);
signal sum: unsigned (M-1 downto 0);
begin
diff <= unsigned(a xor b);
process (diff)
variable tmp : integer range 0 to N;
begin
tmp := 0;
for i in diff'range loop
tmp := tmp + to_integer(unsigned'('0' & diff(i)));
end loop;
sum <= to_unsigned(tmp,M);
end process;
y <= std_logic_vector(sum);
end architecture;
Tempo de Propagação entre entrada e saída
Para realizar a medição dos tempos de propagação entre cada bit de entrada e os bits de saída, realize a compilação do código VHDL acima utilizando o Quartus, e analise o "Compilation Report" (Processing > Compilation Report > TimeQuest Timing Analyzer >Datasheet Report > Propagation Delay). Para encontrar o caminho crítico ("Critical Path") do circuito ordene os tempos de propagação do maior para menor. No exemplo da figura abaixo o caminho crítico é entre a entrada a[24] e saída y[2], com tempo de propagação de 23,772 ns.