Mudanças entre as edições de "Medição de tempos de propagação em circuitos combinacionais - Quartus II"
(Criou página com 'O circuito abaixo realiza o cálculo da [https://en.wikipedia.org/wiki/Hamming_distance distância de Hamming] entre dois sinais. O hardware está descrito em VHDL de forma gen...') |
|||
Linha 6: | Linha 6: | ||
use ieee.std_logic_1164.all; | use ieee.std_logic_1164.all; | ||
use ieee.numeric_std.all; | use ieee.numeric_std.all; | ||
− | entity | + | entity hamming_distance is |
generic ( | generic ( | ||
N: natural := 31; | N: natural := 31; | ||
M: natural := 5); -- M = ceil(log2(N)) | M: natural := 5); -- M = ceil(log2(N)) | ||
port( | port( | ||
− | a, b : | + | a, b : in std_logic_vector (N-1 downto 0); |
− | y : | + | y : out std_logic_vector (M-1 downto 0)); |
end entity; | end entity; | ||
− | architecture ifsc_arch_gen of | + | architecture ifsc_arch_gen of hamming_distance is |
signal diff: unsigned (N-1 downto 0); | signal diff: unsigned (N-1 downto 0); | ||
signal sum: unsigned (M-1 downto 0); | signal sum: unsigned (M-1 downto 0); | ||
Linha 33: | Linha 33: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | |||
+ | ==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. | ||
+ | |||
+ | [[Arquivo:CriticalPath_HammingDistance.png | Tempos de Propagação]] |
Edição das 10h20min de 23 de março de 2016
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.