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

Генерация констант в VHDL

Требуется создать некий набор констант, число N (integer) которых задается в generic модуля. Там же задано некое число M тоже integer.

В architecture задаю такую конструкцию:

type cons is ARRAY(N - 1 downto 0) of

integer range 0 to (N * M - 1);

А после ключевого слова begin пытаюсь задекларировать нужный мне массив констант NN:

constant NN : cons;

Конкретные значения константам присваиваю далее.

 

ModelSim такую конструкцию проглатывает без проблем и корректно моделирует, а Xilinx ISE не берет.

Ругается на "constant NN : cons;" типа:

Syntax error near "constant".

cons is not a component

 

Подскажите как это можно обойти?

 

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


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

Зачем столько слов? Show the code.

А после ключевого слова begin пытаюсь задекларировать нужный мне массив констант NN:
А почему после?

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


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

А почему после?

Если декларирую "до" тогда ругается уже и ModelSim, типа декларироваться должно в пакадже.

 

Весь код будет так:

architecture RTL of Name is

type cons is ARRAY(N - 1 downto 0) of

integer range 0 to (N * M - 1);

.................................

begin

constant NN : cons;

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


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

Если декларирую "до" тогда ругается уже и ModelSim, типа декларироваться должно в пакадже.
Не занимайтесь пересказом. Приведите сообщение об ошибке точно.

 

Весь код будет так:
Это неправильно.

architecture RTL of Name is

-- область декларации находится здесь

begin

 

Приведите точный код, с generic, типом и константой. Пока нет кода, говорить не о чем. Там могут быть другие ошибки.

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


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

Проблему обошел. Тему закрываю

Так расскажите как обошли, может другим будет интересно...

PS Это на Ваше усмотрение/желание...

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


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

Так расскажите как обошли, может другим будет интересно...

В подобной же ситуации сделал так (правда не с integer, а с natural)

...
Type ValuesArray is array (31 downto 0) of natural;
constant Values:ValuesArray:=(143,147,151,155,159,165,167,171,177,181,185,189,193,197,201,205,209,213,217,
221,225,229,233,237,241,245,249,255,259,263,267,271);
signal Val_s:std_logic_vector(sz-1 downto 0);
begin
z:for k in 0 to 31 generate
    Val_s((k+1)*10-1 downto k*10)<=std_logic_vector(to_unsigned(Values(k),10));
end generate;

Допускаю что есть более изящное решение.

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


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

To Александр77

У меня несколько более сложный случай, число генерируемых констант N заранее не известно и задается директивой generic.

To Maverick

Так расскажите как обошли, может другим будет интересно...

Ничего интересного, просто отказался от маштабируемости проекта.

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


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

число генерируемых констант N заранее не известно и задается директивой generic.

 

1. задается тип - массив переменной длины;

2. описывается функция, возвращающая переменную типа этого массива;

3. задается константа, значение которой задается через функцию.

 

Не?

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


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

1. задается тип - массив переменной длины;

2. описывается функция, возвращающая переменную типа этого массива;

3. задается константа, значение которой задается через функцию.

 

По п.1 -- у меня массив постоянной длинны, просто длинна задается generic-ом.

По пп.2, 3 -- я так и пытался сделать, вопрос где и как описать функцию (N*M) и где задавать константу.

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


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

По пп.2, 3 -- я так и пытался сделать, вопрос где и как описать функцию (N*M) и где задавать константу.

 

Функция описывается там же, где декларируются сигналы. И константа задается там же.

 

architecture behavioral of blablabla is
    function f_blabla return t_const is
    begin
        ...
    end function;

    constant c_const : t_const := f_blabla;
begin
    ...
end

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


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

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

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

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

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

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

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

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

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

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