Перейти к содержанию
    

VHDL. Массив пакетов.

Я получаю пакеты по 8 байт. Я хочу организовать место для хранения 16 таких пакетов. Это не FIFO потому что я должен иметь возможность считать данные с любого пакета. Как лучше реализовать такую задачу?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я получаю пакеты по 8 байт. Я хочу организовать место для хранения 16 таких пакетов. Это не FIFO потому что я должен иметь возможность считать данные с любого пакета. Как лучше реализовать такую задачу?

16 64-битных регистра или память с адресом в 4 разряда, если не требуется записывать(считывать) одновременно в несколько ячеек.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

16 64-битных регистра или память с адресом в 4 разряда, если не требуется записывать(считывать) одновременно в несколько ячеек.

а не лучше создать entity и потом сгенерировать 16?

 

или так?

type can_mailbox is record
    --can header
    sid0   : std_logic_vector(7 downto 0);
    sid1   : std_logic_vector(7 downto 0);
    eid0   : std_logic_vector(7 downto 0);
    eid1   : std_logic_vector(7 downto 0);
    dlc    : std_logic_vector(7 downto 0);
     --can data
    data0   : std_logic_vector(7 downto 0);
    data1   : std_logic_vector(7 downto 0);
    data2   : std_logic_vector(7 downto 0);
    data3   : std_logic_vector(7 downto 0);
    data4   : std_logic_vector(7 downto 0);
    data5   : std_logic_vector(7 downto 0);
    data6   : std_logic_vector(7 downto 0);
    data7   : std_logic_vector(7 downto 0);
end record;

type array_can_mailbox_t is array (0 to 15) of can_mailbox;

Изменено пользователем Jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а не лучше создать entity и потом сгенерировать 16?

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

или так?

А покомпактнее нельзя? Я просто VHDL не помню, на verilog для реализации с помощью регистров так:

reg [63:0] data [0:15];

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

А покомпактнее нельзя? Я просто VHDL не помню, на verilog для реализации с помощью регистров так:

reg [63:0] data [0:15];

мне кажеться рекорд удобней. не надо выковыривать данные. все уже разложенно по полочкам.

 

можно и так

type can_mailbox is array(0 to 12) of std_logic_vector(7 downto 0);

но рекорд как мне кажется наглядней.

Изменено пользователем Jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я получаю пакеты по 8 байт. Я хочу организовать место для хранения 16 таких пакетов. Это не FIFO потому что я должен иметь возможность считать данные с любого пакета. Как лучше реализовать такую задачу?

Смотрите ARRAY

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...