|
Генерация констант в VHDL, Не получается корректно задекларировать |
|
|
|
Jun 19 2017, 11:31
|
Профессионал
    
Группа: Свой
Сообщений: 1 167
Регистрация: 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 Подскажите как это можно обойти?
|
|
|
|
|
 |
Ответов
(1 - 10)
|
Jun 19 2017, 13:31
|
Профессионал
    
Группа: Свой
Сообщений: 1 167
Регистрация: 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;
|
|
|
|
|
Jun 19 2017, 14:18
|
Профессионал
    
Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757

|
Цитата(vladec @ Jun 19 2017, 16:31)  Если декларирую "до" тогда ругается уже и ModelSim, типа декларироваться должно в пакадже. Не занимайтесь пересказом. Приведите сообщение об ошибке точно. Цитата Весь код будет так: Это неправильно. Код architecture RTL of Name is
-- область декларации находится здесь
begin Приведите точный код, с generic, типом и константой. Пока нет кода, говорить не о чем. Там могут быть другие ошибки.
|
|
|
|
|
Jun 20 2017, 17:47
|
Знающий
   
Группа: Свой
Сообщений: 608
Регистрация: 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; Допускаю что есть более изящное решение.
|
|
|
|
|
Jun 21 2017, 09:09
|
Профессионал
    
Группа: Свой
Сообщений: 1 167
Регистрация: 3-10-05
Из: Москва
Пользователь №: 9 158

|
To Александр77 У меня несколько более сложный случай, число генерируемых констант N заранее не известно и задается директивой generic. To Maverick Цитата Так расскажите как обошли, может другим будет интересно... Ничего интересного, просто отказался от маштабируемости проекта.
|
|
|
|
|
Jun 21 2017, 10:01
|
Местный
  
Группа: Свой
Сообщений: 211
Регистрация: 18-11-12
Пользователь №: 74 459

|
Цитата(vladec @ Jun 21 2017, 12:09)  число генерируемых констант N заранее не известно и задается директивой generic. 1. задается тип - массив переменной длины; 2. описывается функция, возвращающая переменную типа этого массива; 3. задается константа, значение которой задается через функцию. Не?
|
|
|
|
|
Jun 22 2017, 06:52
|
Профессионал
    
Группа: Свой
Сообщений: 1 167
Регистрация: 3-10-05
Из: Москва
Пользователь №: 9 158

|
Цитата 1. задается тип - массив переменной длины; 2. описывается функция, возвращающая переменную типа этого массива; 3. задается константа, значение которой задается через функцию. По п.1 -- у меня массив постоянной длинны, просто длинна задается generic-ом. По пп.2, 3 -- я так и пытался сделать, вопрос где и как описать функцию (N*M) и где задавать константу.
|
|
|
|
|
Jun 22 2017, 08:33
|
Местный
  
Группа: Свой
Сообщений: 211
Регистрация: 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
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|