Четно-нечетная сортировка слиянием 64 входов в 64 выхода сортированных 32-битных слов работает частично

У меня есть модуль в VHDL, который делает то, что состояние в заголовке. Дело в том, что эта строка безупречна в отсортированном наборе чисел, в отсортированном по убыванию множестве и в полу-смешанном наборе чисел, но с действительно случайными числами этот модуль работает, какая-то идея, почему?

Я использую модуль от 64 до 64, который использует два от 32 до 32, этот использует два от 16 до 16, и, наконец, последний использует два от 8 до 8 модулей, я уверен, что модули от 8 до 8 и от 16 до 16 верны, были сделаны моим учителем, но не так уверены насчет 64 на 64, пожалуйста, дайте мне обратную связь, что может быть не так:)

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

use work.set_of_data_items.all; 

entity merge64to64 is
--generic ( M                   : integer := 4;
--          N                   : integer := 16 );
  Port (        input_1items    : in set_of_8items;
                input_2items    : in set_of_8items;
                input_3items    : in set_of_8items;
                input_4items    : in set_of_8items;

                input_5items    : in set_of_8items;
                input_6items    : in set_of_8items;
                input_7items    : in set_of_8items;
                input_8items    : in set_of_8items;

                sorted          : out set_of_64items);

end merge64to64;

architecture Behavioral of merge64to64 is

signal sorted1,sorted2      : set_of_32items;
signal out1_in2,out2_in3    : set_of_64items;
signal out3_in4,out4_in5    : set_of_64items;
signal out5_in6             : set_of_64items;

begin 


sort32items1: entity work.merge32to32
                        port map(input_1items,input_2items,input_3items,input_4items,sorted1);

sort32items2: entity work.merge32to32
                        port map(input_5items,input_6items,input_7items,input_8items,sorted2);


stage6:
            for i in 8*N/2-1 downto 0 generate
                group1stage6:   entity work.Comparator
                                    port map(sorted1(i),sorted2(i),out1_in2(i),out1_in2(i+32));

                check1stage6:   if(i>=16) generate 
                                    group2stage6:   entity work.Comparator
                                                        port map(out1_in2(i),out1_in2(i+16),out2_in3(i),out2_in3(i+16));
                                end generate;
                check2stage6:   if(i<16) generate
                                    out2_in3(i)<=out1_in2(i);
                                    out2_in3(i+48)<=out1_in2(i+48);
                                end generate;

                check3stage6:   if(i>=24) generate
                                    group3stage6:   entity work.Comparator
                                                        port map(out2_in3(i),out2_in3(i+8),out3_in4(i),out3_in4(i+8));
                                end generate;
                check4stage6:   if(i<24) generate
                                    out3_in4(i)<=out2_in3(i);
                                    out3_in4(i+40)<=out2_in3(i+40);
                                end generate;

                check5stage6:   if(i>=4 and i<8) generate
                                    on_stage6: for j in 0 to 6 generate
                                                    group4stage5:   entity work.Comparator
                                                                            port map(out3_in4(j*8+i),out3_in4(j*8+i+4),out4_in5(j*8+i),out4_in5(j*8+i+4));
                                    end generate on_stage6;
                                end generate;

                check6stage6:   if(i<4) generate
                                    out4_in5(i)<=out3_in4(i);
                                    out4_in5(i+60)<=out3_in4(i+60);
                                end generate;

                check7stage6:   if(i< 15) generate
                                    on2_stage6: for k in 0 to 1 generate
                                            group5stage6:   entity work.Comparator
                                                                port map(out4_in5(2+i*4+k),out4_in5(2+i*4+k+2),out5_in6(2+i*4+k),out5_in6(2+i*4+k+2));
                                    end generate on2_stage6;
                                end generate;

                check8stage6:   if(i<2) generate
                                    out5_in6(i)<=out4_in5(i);
                                    out5_in6(i+62)<=out4_in5(i+62);
                                end generate;

                check9stage6:   if(i<31) generate
                                        check9stage6:   entity work.Comparator
                                                            port map(out5_in6(1+i*2),out5_in6(1+i*2+1),sorted(1+i*2),sorted(1+i*2+1));
                                        end generate;
end generate stage6;

sorted(0)<=out5_in6(0);
sorted(63)<=out5_in6(63);

end behavioral;

0 ответов

Другие вопросы по тегам