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

Глобальный файл констант в проэкте VDHL

В проэкте есть немало констатнт которые участвуют в коде. Хоть они и константы в конечно варианте, в процессе разработки/debugа нужно ими играться. Желателен доступ к константам из разных файлов проэкта (VHDL).

Подозреваю есть путь определения единого файла в проэкте (опять-же написанном VHDL) в котором можно определить все константы глобально, и затем их употреблять в других sources данного проэкта. (Нечто типа .h файлов в С).

 

Как это делается ? Делается ли просто entity со списком generic параметров (после чего entity закрывается) ?

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


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

В проэкте есть немало констатнт которые участвуют в коде. Хоть они и константы в конечно варианте, в процессе разработки/debugа нужно ими играться. Желателен доступ к константам из разных файлов проэкта (VHDL).

Подозреваю есть путь определения единого файла в проэкте (опять-же написанном VHDL) в котором можно определить все константы глобально, и затем их употреблять в других sources данного проэкта. (Нечто типа .h файлов в С).

 

Как это делается ? Делается ли просто entity со списком generic параметров (после чего entity закрывается) ?

--    GF_N_pkg.vhd
--
--    Purpose: This package defines the global variables to be used by the GF_N project
--   It defines:
--         K = Galois Field Size
--           P = Irreducable Polynomial to be used
--         A = Multiplier
--          B = Multiplicand


library IEEE;
use IEEE.STD_LOGIC_1164.all;

package GF_N_pkg is


--  Declare K, where K is number of bits of Galois Field  (i.e. GF(K) )
  constant K        : integer := 8;

--  Declare P, the irreducable Polynomial.
--  This will be stored in PTerms

--****************************************************************
-- GF4 Polynomial = "0011"
-- constant P        : std_logic_vector(K-1 downto 0) := "0011";
--****************************************************************

--**************************************************************** 
-- GF8 Polynomial = 0x1B
  constant P        : std_logic_vector(K-1 downto 0) :=  "00011011";
--****************************************************************

  constant A         : std_logic_vector(K-1 downto 0) :=  "01010111";
  constant B         : std_logic_vector(K-1 downto 0) :=  "10000011"; 
  
end GF_N_pkg;

 

Например так

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


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

Спасибо, вернулся к проэкту.

Определил package констант, сохранил как vhd source файл в одной директории с рабочим VHDL сорсом который будет пользоваться константами из данного package.

В рабочем VHDL файле задекларировал вначале use package_name.all

 

Проблема, при компиляции выдается ошибка ignoring use clause - ignoring pcakge_name и ессно вследствии этого не опознания используемых констант.

 

Что я ее не сделал что-бы рабочие сорсы "видели" и принимали мою библиотеку с этим package ? Нужно ли файл содержащий package_name отдельно предварительно компилировать спец. образом ?

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


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

Спасибо, вернулся к проэкту.

Определил package констант, сохранил как vhd source файл в одной директории с рабочим VHDL сорсом который будет пользоваться константами из данного package.

В рабочем VHDL файле задекларировал вначале use package_name.all

 

Проблема, при компиляции выдается ошибка ignoring use clause - ignoring pcakge_name и ессно вследствии этого не опознания используемых констант.

 

Что я ее не сделал что-бы рабочие сорсы "видели" и принимали мою библиотеку с этим package ? Нужно ли файл содержащий package_name отдельно предварительно компилировать спец. образом ?

 

Да, файл содержащий описание пакетов необходимо компилировать вместе с остальными файлами проекта. Если не ошибаюсь, то по умолчанию все модули компилируются в библиотеку work, поэтому перед использованием пакетов надо указать откуда эти пакеты берутся:

 

library work;

use package_name.all;

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


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

Да, файл содержащий описание пакетов необходимо компилировать вместе с остальными файлами проекта. Если не ошибаюсь, то по умолчанию все модули компилируются в библиотеку work, поэтому перед использованием пакетов надо указать откуда эти пакеты берутся:

 

library work;

use package_name.all;

 

Спасибо, но проэкт у меня и так определен как состящий из этих 2х файлов: файла содержащего package и рабочего файла кода.

Когда пытаюсь его компилировать (среда ispLEVER от Lattice) - и происходит ошибка в не опознании файла package как библиотеки.

Так оно у меня и идет в рабочем коде:

library work;

use package_name.all

 

не помогает.

 

Подозреваю что может быть нужно иметь library которая pre-compiled спец. образом...

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


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

Спасибо, но проэкт у меня и так определен как состящий из этих 2х файлов: файла содержащего package и рабочего файла кода.

Когда пытаюсь его компилировать (среда ispLEVER от Lattice) - и происходит ошибка в не опознании файла package как библиотеки.

Так оно у меня и идет в рабочем коде:

library work;

use package_name.all

 

не помогает.

 

Подозреваю что может быть нужно иметь library которая pre-compiled спец. образом...

 

 

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

Если не ошибаюсь, то в качестве синтезатора среда ispLEVER использует Synplify? Если это так, то попробуйте в явном виде указать, что такой-то файл является библиотекой (Project/Set VHDL library...)

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


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

Возможно причина в том, что файлы компилируются в не той последовательности, т.е. сначала должен компилироваться файл содержащий описание пакетов, а затем файл где они вызываются.
Причина вовсе не в этом. Неправильно задекларировано использование пакета package_name.

 

Во-первых,

library work;

можно не писать, если пакет компилируется в библиотеку work.

 

Во-вторых, надо указывать библиотеку, в которой пакет находится:

use library_name.package_name.all;

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


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

Пробовал и

 

library work;

use work.package_name.all

 

не помогает.

 

Вообще последовательность следующая:

есть 2 vhd файла - один содержит package в котором только константы, второй - рабочий код.

В том где рабочий код задекларировано:

library work;

use work.package_name.all

 

но оба файла находятся в под-директории относительно work (скажем, work/project/...)

 

Оба файла присоединены к проэкту в среде ispLEVER. При вызове синтезатора (Synplify) или Build я обязан указать файл с top entity, т.е. мой рабочий файл. В файле где package, не вообще entity (только константы).

 

Что не пойму - как объяснить среде (синтезатору и симулятору (МодельСиму)) что vhd файл в котором pacakge - он library...

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


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

Причина вовсе не в этом. Неправильно задекларировано использование пакета package_name.

 

Во-первых,

library work;

можно не писать, если пакет компилируется в библиотеку work.

 

Во-вторых, надо указывать библиотеку, в которой пакет находится:

use library_name.package_name.all;

 

А что значит компиляция пакета в библиотеку ? этот vhd файл в котором у меня пакет не компилирован предварительно. Я его пытался компилировать (для синтезатора или последством Build) вместе с рабочим vhd файлом...наверно это проблема...

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


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

Пробовал и

 

library work;

use work.package_name.all

 

не помогает.

Я всю жизнь так делаю, у меня работает.

 

Вообще последовательность следующая:

есть 2 vhd файла - один содержит package в котором только константы, второй - рабочий код.

В том где рабочий код задекларировано:

library work;

use work.package_name.all

Дава1те без этих абстракций. Переходим к конкретике. Как называется файл, в котором находится пакет? Как называется сам пакет?

 

но оба файла находятся в под-директории относительно work (скажем, work/project/...)
Абсолютно не важно, где они находятся. Главное, чтобы это знала та тулза, которой эти файлы скармливаются.

 

Оба файла присоединены к проэкту в среде ispLEVER. При вызове синтезатора (Synplify) или Build я обязан указать файл с top entity, т.е. мой рабочий файл. В файле где package, не вообще entity (только константы).
Про ispLEVER ничего не скажу...

 

Что не пойму - как объяснить среде (синтезатору и симулятору (МодельСиму)) что vhd файл в котором pacakge - он library...
ModelSim: cначала компилируем пакет в библиотеку work, потом файл со схемой.

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


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

Я всю жизнь так делаю, у меня работает.

 

Дава1те без этих абстракций. Переходим к конкретике. Как называется файл, в котором находится пакет? Как называется сам пакет?

 

Абсолютно не важно, где они находятся. Главное, чтобы это знала та тулза, которой эти файлы скармливаются.

 

Про ispLEVER ничего не скажу...

 

ModelSim: cначала компилируем пакет в библиотеку work, потом файл со схемой.

 

Вот именно это и не пойму - как компилировать пакет в библиотеку... ?

 

Присединил оба файла - ADU_params.vhd - пакет, TFT_TG.vhd - рабочий код.

Оба находятся в под-директории workа:

/work/NOA/ADU/

 

Как предварительно компилировать файл пакета в библиотеку ?

 

Спасибо.

ADU_params.vhd

TFT_TG.vhd

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


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

Вот именно это и не пойму - как компилировать пакет в библиотеку... ?
Скрипт для ModelSim

vlib work
vcom -work work ADU_params.vhd
vcom -work work TFT_TG.vhd

У вас там куча ошибок. Но ваша главная ошибка в том, что вы вместо имени пакета используете имя файла. Это разные и друг с другом не связанные вещи. Надо так:

use work.constants.all;

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


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

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

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

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

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

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

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

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

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

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