Как инициализировать массив записей в VHDL?

Я инициализирую массив записей, который также содержит строку. Я получаю сообщение об ошибке HDLCompiler:806 Line 109: Синтаксическая ошибка рядом с «text_passages» (последняя строка кода ниже). Каков правильный способ инициализации?

type text_info is
    record
        text : string(1 to 15);
        x: integer;
        y: integer;
    end record;
constant init_text_info: text_info := (text => "               ", x => 0, y => 0);
type text_info_array is array(natural range <>) of text_info;

Моя декларация и инициализация выглядят следующим образом

signal text_passages : text_info_array(0 to 1) := (others => init_text_info);
text_passages(0) <= (text => "This is a Test.", x => 50, y => 50);

Удаление второй скобки в назначении tex_passages(0) лишает ваших читателей возможности воспроизвести ответ, даже если они создадут свой собственный минимальный воспроизводимый пример.

user1155120 10.04.2019 12:28
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
2
1
1 002
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ну, у вас есть лишняя скобка в конце последней строки, но в остальном все в порядке. (Я сомневаюсь, что сообщение об ошибке, о котором вы сообщаете, вызвано этой скобкой.) Последняя строка должна быть:

text_passages(0) <= (text => "This is a Test.", x => 50, y => 50);

[MCVE]:

entity E is
end entity ;

architecture A of E is

  type text_info is
    record
        text : string(1 to 15);
        x: integer;
        y: integer;
    end record;
  constant init_text_info: text_info := (text => "               ", x => 0, y => 0);
  type text_info_array is array(natural range <>) of text_info;
  signal text_passages : text_info_array(0 to 1) := (others => init_text_info);

begin

  text_passages(0) <= (text => "This is a Test.", x => 50, y => 50);

end architecture A;

https://www.edaplayground.com/x/4ARJ

(Всегда лучше отправить MCVE.)

Он компилируется на каждом из четырех симуляторов VHDL на EDA Playground (VCS, Incisive, Riviera Pro, GHDL) без ошибок. Попытайся. Какой симулятор используете?

Matthew Taylor 10.04.2019 09:56

Или вы пытаетесь поместить строку, начинающуюся с text_passages(0), перед begin, то есть внутри декларативная область архитектуры?

Matthew Taylor 10.04.2019 10:00

Я поставил его перед началом. Спасибо.

Y. Gopee 10.04.2019 10:05

Я рад слышать, что вы разобрались. Вот почему MCVE всегда является хорошей идеей: ошибка была фактически в коде, который вы не включили в свой вопрос.

Matthew Taylor 10.04.2019 10:08

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