Не могу вывести ошибку регистрации, когда тип выходного массива как порт в VHDL - PullRequest
0 голосов
/ 19 июня 2019

Я новичок в VHDL. В настоящее время я пытаюсь прочитать кадр из нескольких байтов через UART и вывести их в виде массива для последующего декодирования.

Я использую тип массива в качестве выходного порта (или есть что-нибудь лучше, вы, ребята, можете предложить это мне, пожалуйста).

library ieee;
use ieee.std_logic_1164.all;

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

package body pkg is
end package body;

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

entity read_frame is
port(
    CLK         : in std_logic;
    dout_valid  : in std_logic;
    data_in         : in std_logic_vector(7 downto 0);
    data_out        : out std_logic_vector(19 downto 0);
    frame_out   : out frame_type(0 to 9);
    frame_check : out std_logic
);
end read_frame;

architecture arch of read_frame is
--type frame_type is array(0 to 9) of std_logic_vector(7 downto 0);
signal frame_duration: std_logic;
signal frame : frame_type(0 to 9);
signal count : natural range 0 to 9 := 9;
signal data  : std_logic_vector(7 downto 0);
--signal frame_t : frame_type;

begin
    process(CLK, dout_valid)
        begin
            if (rising_edge(dout_valid)) then
                if (rising_edge(CLK)) then
             --Getting data
                data <= data_in;
                if (data = "11111111") then  --Start frame
                    count <= 0;
                    frame_duration <= '1';
                    frame <= (others => (others => '0'));
                elsif (data = "00000000") then  -- end frame
                    count <= 0;
                    frame_duration <= '0';
                else
                    frame(count) <= data;
                    count <= count + 1;
                end if;
            end if;
        end if;
    end process;

    process(CLK, frame_duration)
        begin
            if (falling_edge(frame_duration)) then
                frame_out <= frame;
            end if;
        end process;
    frame_check <= frame_duration;
end arch;

Однако я продолжаю получать эти ошибки

Error (10821): HDL error at read_frame.vhd(39): can't infer register for "frame[9][0]" because its behavior does not match any supported register model
Error (10821): HDL error at read_frame.vhd(39): can't infer register for "frame[9][1]" because its behavior does not match any supported register model

И так далее. Я думал, что массив я использую только 1 измерение? Возможно способ, которым я назначаю массив, неправильный. Если нет, то как вы назначаете член массива по индексу? Заранее спасибо, что нашли время помочь мне.

...