Medição de tempos de propagação em circuitos combinacionais - Quartus II
Ir para navegação
Ir para pesquisar
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 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 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;