реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Генерация констант в VHDL, Не получается корректно задекларировать
vladec
сообщение Jun 19 2017, 11:31
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 963
Регистрация: 3-10-05
Из: Москва
Пользователь №: 9 158



Требуется создать некий набор констант, число 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

Подскажите как это можно обойти?
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Jun 19 2017, 11:33
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 760
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Зачем столько слов? Show the code.
Цитата(vladec @ Jun 19 2017, 14:31) *
А после ключевого слова begin пытаюсь задекларировать нужный мне массив констант NN:
А почему после?
Go to the top of the page
 
+Quote Post
vladec
сообщение Jun 19 2017, 13:31
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 963
Регистрация: 3-10-05
Из: Москва
Пользователь №: 9 158



Цитата
А почему после?

Если декларирую "до" тогда ругается уже и 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;
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Jun 19 2017, 14:18
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 760
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(vladec @ Jun 19 2017, 16:31) *
Если декларирую "до" тогда ругается уже и ModelSim, типа декларироваться должно в пакадже.
Не занимайтесь пересказом. Приведите сообщение об ошибке точно.

Цитата
Весь код будет так:
Это неправильно.
Код
architecture RTL of Name is

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

begin


Приведите точный код, с generic, типом и константой. Пока нет кода, говорить не о чем. Там могут быть другие ошибки.
Go to the top of the page
 
+Quote Post
vladec
сообщение Jun 20 2017, 08:47
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 963
Регистрация: 3-10-05
Из: Москва
Пользователь №: 9 158



Проблему обошел. Тему закрываю
Go to the top of the page
 
+Quote Post
Maverick
сообщение Jun 20 2017, 09:25
Сообщение #6


я только учусь...
******

Группа: Модераторы
Сообщений: 3 295
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



Цитата(vladec @ Jun 20 2017, 11:47) *
Проблему обошел. Тему закрываю

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


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
Александр77
сообщение Jun 20 2017, 17:47
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 551
Регистрация: 10-07-09
Из: Дубна, Московская область
Пользователь №: 51 111



Цитата(Maverick @ Jun 20 2017, 12:25) *
Так расскажите как обошли, может другим будет интересно...

В подобной же ситуации сделал так (правда не с 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;

Допускаю что есть более изящное решение.
Go to the top of the page
 
+Quote Post
vladec
сообщение Jun 21 2017, 09:09
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 963
Регистрация: 3-10-05
Из: Москва
Пользователь №: 9 158



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

Ничего интересного, просто отказался от маштабируемости проекта.
Go to the top of the page
 
+Quote Post
Amurak
сообщение Jun 21 2017, 10:01
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 158
Регистрация: 18-11-12
Пользователь №: 74 459



Цитата(vladec @ Jun 21 2017, 12:09) *
число генерируемых констант N заранее не известно и задается директивой generic.


1. задается тип - массив переменной длины;
2. описывается функция, возвращающая переменную типа этого массива;
3. задается константа, значение которой задается через функцию.

Не?
Go to the top of the page
 
+Quote Post
vladec
сообщение Jun 22 2017, 06:52
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 963
Регистрация: 3-10-05
Из: Москва
Пользователь №: 9 158



Цитата
1. задается тип - массив переменной длины;
2. описывается функция, возвращающая переменную типа этого массива;
3. задается константа, значение которой задается через функцию.


По п.1 -- у меня массив постоянной длинны, просто длинна задается generic-ом.
По пп.2, 3 -- я так и пытался сделать, вопрос где и как описать функцию (N*M) и где задавать константу.
Go to the top of the page
 
+Quote Post
Amurak
сообщение Jun 22 2017, 08:33
Сообщение #11


Частый гость
**

Группа: Свой
Сообщений: 158
Регистрация: 18-11-12
Пользователь №: 74 459



Цитата(vladec @ Jun 22 2017, 09:52) *
По пп.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
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th June 2017 - 00:28
Рейтинг@Mail.ru


Страница сгенерированна за 0.0143 секунд с 7
ELECTRONIX ©2004-2016