Guest
#7252619
Hello everyone!
Im trying to make a entity for a N entrances AND, using LOG2 and
geometric progression sum, like below...
Example for N = 8
aux(1 to N) <= entrance;
aux(9) <= aux(1) AND aux(2)
aux(10) <= aux(3) AND aux(4)
aux(11) <= aux(5) AND aux(6)
aux(12) <= aux(7) AND aux(8)
aux(13) <= aux(9) AND aux(10)
aux(14) <= aux(11) AND aux(12)
aux(15) <= aux(13) AND aux(14)
This is what I hope to be produced using the code below...
entity and_gate_Nbits_LOG is
-- Definição do valor de N
generic (
N : natural := 4 -- Número de entradas do AND_GATE
);
-- Lista de Entradas e Saídas da Entidade
port(
entrada : in bit_vector ( 1 to N );
saida : out bit
);
-- Fim da Entidade
end entity;
-- Definição da Arquitetura do AND_GATE de N entradas
architecture main of and_gate_Nbits_LOG is
-- Sinal Auxiliar que armazenará os resultados parciais dos ANDs
entre as entradas
signal aux : bit_vector ( 1 to 2*N );
-- Função que calcula o Logarítmo na base 2 de um número natual X
function LOG_2 ( x : natural ) return natural is
variable temp : natural := x;
variable result : natural := 0;
begin
-- Loop que fatora X em 2
while temp > 1 loop
temp := temp / 2;
result := result + 1;
end loop;
-- Retorna o Log2(X)
return result;
end function LOG_2 ;
-- Início da descrição da Arquitetura do AND_GATE de N entradas
begin
-- Sinal aux replica a entrada
aux(1 to N) <= entrada;
-- Estrutura de repetição que percorre os níveis de AND's
and_Nbits: for i in 1 to LOG_2(N) generate
-- Estrutura de repetição que gera todos os AND's de cada nível
ands_nivel: for j in (1+(N-(N/(2**(i-1))))) to (N-N/(2**(i)))
generate
-- Auxiliar do próximo nível recebe o AND do nível atual
aux(2*(N-N/(2**(i))+1)+(j-(1+(N-(N/(2**(i-1))))))) <=
aux(2*j-1) and aux(2*j);
-- Fim do FOR
end generate ands_nivel;
-- Fim do FOR
end generate and_Nbits;
-- Saída recebe o resultado do último AND
saida <= aux(2*N-1);
-- Fim da Arquitetura do AND_GATE de N entradas
end architecture;
-------------------------------------------------------
But the simulation in ModelSIm is doing
aux(6) <= aux(1) and aux(2)
instead
aux(5) <= aux(1) and aux(2)
The simulation skip 1 aux in every "for j" and I couldnt know why.
Ive tested the math of the code in others languages and everything work
as expected.
I need help! Please someone!