VHDL: невозможно назначить что-либо для выходного порта массива Integer - PullRequest
0 голосов
/ 30 апреля 2018

Я не могу присвоить какое-либо значение выходному порту, который определен как целочисленный массив. Я получаю вывод как «UUUUUUU» в поведенческом моделировании. Я пытаюсь использовать 8-битный массив Integer в качестве входных данных и сортировать и выводить его в другой 8-битный целочисленный массив. Но массив может быть любой длины. Я планирую использовать подсчет сортировки. Но здесь я не могу пройти базовое назначение выходного массива. Что не так с кодом Форма волны моделирования

Код проекта:

library ieee;
use ieee.std_logic_1164.all;

package sorting_pkg is
    type intarray is array(natural range <>) of std_logic_vector(7 downto 0);
end package;

library ieee;
use ieee.std_logic_1164.all;
library work; 
use work.sorting_pkg.all;
use IEEE.NUMERIC_STD.all;
use ieee.std_logic_unsigned.all;

entity HWsort is
generic (
  N : integer:= 10 );
port( 
    inStream : in intarray(0 to N-1);
    outStream : out intarray(0 to N-1)
);
end HWsort;

architecture Behavioral of HWsort is

begin
  outStream <= inStream;
end Behavioral;

Код TestBench:

library ieee;
use ieee.std_logic_1164.all;
library work; 
use work.sorting_pkg.all;
use IEEE.NUMERIC_STD.all;
use ieee.std_logic_unsigned.all;
entity tb_Sort is
--  Port ( );
end tb_Sort;

architecture Behavioral of tb_Sort is
component HWsort
    PORT
        (
        inStream : in intarray(0 to 9);
        outStream : out intarray(0 to 9));
end component;

signal inStream : intarray(0 to 9);
signal outStream : intarray(0 to 9);

begin
    uut:HWsort port map (inStream => inStream, outStream => outStream);

sim_tb:process
    begin
        wait for 100ns;

        inStream(0 to 9) <= (0 => x"22",
                      1 => x"12",
                      2 => x"1A",
                      3 => x"4A",
                      4 => x"02",
                      5 => x"5B",
                      6 => x"66",
                      7 => x"09",
                      8 => x"35",
                      9 => x"71");
        wait;
        end process;
end Behavioral;

1 Ответ

0 голосов
/ 30 апреля 2018

Это ваш код, с небольшим исправлением неиспользуемых пакетов и пробелом между 100 и ns, как того требует стандарт edit и с ссылкой на сущность HWsort напрямую

library ieee;
use ieee.std_logic_1164.all;

package sorting_pkg is
    type intarray is array(natural range <>) of std_logic_vector(7 downto 0);
end package;

use work.sorting_pkg.all;

entity HWsort is
    generic (
      N : integer:= 10 );
    port( 
        inStream : in intarray(0 to N-1);
        outStream : out intarray(0 to N-1)
    );
end HWsort;

architecture Behavioral of HWsort is begin
    outStream <= inStream;
end Behavioral;

entity tb_Sort is end tb_Sort;

library ieee;
use ieee.std_logic_1164.all;
use work.sorting_pkg.all;

architecture Behavioral of tb_Sort is
    signal inStream : intarray(0 to 9);
    signal outStream : intarray(0 to 9);
begin
    uut: entity work.HWsort port map (inStream => inStream, outStream => outStream);

    sim_tb:process begin
        wait for 100 ns;

        inStream <= (
            0 => x"22",
            1 => x"12",
            2 => x"1A",
            3 => x"4A",
            4 => x"02",
            5 => x"5B",
            6 => x"66",
            7 => x"09",
            8 => x"35",
            9 => x"71");
        wait;
    end process;
end Behavioral;

Это вывод после имитации 200 нс: waveform

Итак, что касается вашего вопроса: ничего не так с вашим кодом. edit За исключением того, что объявление компонента HWsort отличается от сущности, как в: универсальный отсутствует, как упомянуто user1155120.

...