|
Помогите разобраться с библиотеками (VHDL) |
|
|
|
Dec 27 2006, 11:43
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 23-08-06
Пользователь №: 19 771

|
Всем привет и с наступающим Новым годом,
Наработав некоторое кол-во проектов (VHDL, Quartus) решил свалить более-менее универсальные компоненты и функции в пользовательскую библиотеку - в результате пришел к выводу, что не знаю как это сделать. Стал читать описания - продвинулся не сильно. Помогите разобраться с некоторыми вопросами:
1) Для примера (VHDL, Quartus)- библиотека парам. модулей: Library- LPM ... package -lpm_components...File - lpm_pack.vhd. Если открыть файл - то он содежит пакет с объявлениями компонентов, а где хранятся собственно описания? Как вся эта "кухня" работает? Я поймал себя на том, что просто "втыкал" library и use, и не особенно задумывался по этому поводу.
2)Как подобно примеру приведенному выше создать собственную библиотеку.
Понимаю, что вопросы наивны и путанны - помогите внести ясность (разъяснениями, ссылками и т. д.) В книгах этому вопросу отводят немного.
Спасибо.
Сообщение отредактировал Elf - Dec 27 2006, 11:44
|
|
|
|
|
 |
Ответов
|
Dec 29 2006, 20:10
|

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

|
Про Quartus не скажу ничего. Использовал билиотеки для Моделсима. Все VHDL модули объекты компилируются в какие-то библиотеки. Новые объекты всегда компилируются в библиотеку с логическим именем WORK. Потом (при компиляции другого модуля) эту библиотеку можно использовать под другим именем как ресурсную библиотеку. Связь логических имен библиотек с путями на диске в принципе должна задаваться в настройках среды для каждого компилируемого модуля - логическое имя библиотеки не хранится в самой библиотеке. Иногда эти настройки глобальные. Директива VHDL 'library' вводит в текущее пространство имен логическое имя библиотеки. В принципе, после объявления имени библиотеки можно использовать объекты из нее сразу без директивы use - написав полное имя объекта с указанием библиотеки. К сожалению, не все среды это поддерживают, хоть и обязаны. Директива use вводит указанные имена из библиотеки в текущее пространство имен - чтобы можно было использовать эти имена без префикса библиотеки. Еще в начале каждого модуля неявно написано: Код library STD, WORK; use STD.STANDARD.all; Пакеты, компоненты и архитектуры - это модули, которые хранятся в библиотеках. В принципе для использования скомпилированной библиотеки текстовые исходники не нужны, описания компонентов хранятся в самих библиотеках в скомпилированном виде. Но, к сожалению, инструментарий для работы с библиотеками, особенно, системными, традиционно крайне скуден. Поэтому текстовые исходники полезны в качестве хелпа.
--------------------
Пишите в личку.
|
|
|
|
|
Dec 29 2006, 23:39
|

Знающий
   
Группа: Свой
Сообщений: 541
Регистрация: 11-04-05
Из: Москва
Пользователь №: 4 045

|
Цитата(Oldring @ Dec 29 2006, 20:10)  Все VHDL модули объекты компилируются в какие-то библиотеки. Новые объекты всегда компилируются в библиотеку с логическим именем WORK. Вот и неправда Ваша, можно указать ModelSim'у в какую библиотеку компилировать каждый файл. Это очень удобно, например, при поведенческом (до синтеза) моделировании проектов с большим числом компонентов (или состоящие из нескольких ПЛИС) - компоненты компиляем в одну библиотеку (для каждой ПЛИС - в свою), тестбенч - в другую. Если прописать свою библиотеку в modelsim.ini лежащий в папке с ModelSim'ом, то она будет доступна всегда, каким бы образом моделирование ни запускалось. Использование своих библиотек при синтезе у Xilinx (про Альтеру не скажу) хоть и возможно вроде (не помню точно достиг я результата в этом или нет, однако неприятный осадок остался), но процесс мне показался слишком утомительным и я решил для себя им впредь не пользоваться.
--------------------
Дурак, занимающий высокий пост, подобен человеку на вершине горы - все ему кажется маленьким, а всем остальным кажется маленьким он сам. /Законы Мерфи/
|
|
|
|
|
Dec 30 2006, 00:54
|

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

|
Цитата(BSV @ Dec 29 2006, 23:39)  Цитата(Oldring @ Dec 29 2006, 20:10)  Все VHDL модули объекты компилируются в какие-то библиотеки. Новые объекты всегда компилируются в библиотеку с логическим именем WORK.
Вот и неправда Ваша, можно указать ModelSim'у в какую библиотеку компилировать каждый файл. Это очень удобно, например, при поведенческом (до синтеза) моделировании проектов с большим числом компонентов (или состоящие из нескольких ПЛИС) - компоненты компиляем в одну библиотеку (для каждой ПЛИС - в свою), тестбенч - в другую. А вот и правда моя. У каждой физической библиотеки могут быть разные логические имена. Кроме того, библиотеки бывают рабочими и ресурсными. Рабочей называется та единственная библиотека, в которую компилируется текущий модуль. У нее при компиляции всегда есть логическое имя WORK. Конечно, при компиляции разных модулей это могут быть разные физические библиотеки. Читайте LRM. Кстати, довольно удобно. Если нескорлько модулей компилируются в одну библиотеку - друг к другу они могут ссылаться через имя библиотеки WORK, а не под тем именем, под которым библиотека будет использоваться потом как ресурсная.
--------------------
Пишите в личку.
|
|
|
|
|
Mar 19 2007, 22:59
|

Частый гость
 
Группа: Свой
Сообщений: 153
Регистрация: 8-11-05
Из: Москва
Пользователь №: 10 605

|
Цитата(Oldring @ Dec 30 2006, 00:54)  А вот и правда моя. У каждой физической библиотеки могут быть разные логические имена. Кроме того, библиотеки бывают рабочими и ресурсными. Рабочей называется та единственная библиотека, в которую компилируется текущий модуль. У нее при компиляции всегда есть логическое имя WORK. Конечно, при компиляции разных модулей это могут быть разные физические библиотеки. Читайте LRM.
Кстати, довольно удобно. Если нескорлько модулей компилируются в одну библиотеку - друг к другу они могут ссылаться через имя библиотеки WORK, а не под тем именем, под которым библиотека будет использоваться потом как ресурсная. Да, проверил, Вы правы :-) Однако, я бы уточнил - можно собирать сразу в другую библиотеку, указав ее компилятору. Например, в Aldec AHDL указывается какая библиотека будет рабочей в установках проекта, в других имеющихся под рукой системах можно указать компилятору в какую библиотеку класть модуль: ModelSim: vlib xyz vcom -93 -work xyz a.vhd, в GNU-HDL: ghdl -a --work=xyz a.vhd в Free-HDL: gvhdl -l xyz a.vhd Но создается виртаульная библиотека work, только на время сборки модуля, как синоним. Вот пример этого, считая, что компилируем вышеуказанными командами: Код ---------------- a.vhd ----------------- entity E1 is port (signal a: in bit; signal b: out bit); end;
architecture A of E1 is begin b <= not a; end;
------------------------------------------------------
entity E2 is end;
architecture A of E2 is signal x,y : bit; begin u1: entity work.E1(A) port map (x,y); end; ------------------------------------------------------
library xyz; entity E3 is end;
architecture A of E3 is signal x,y : bit; begin u1: entity xyz.E1(A) port map (x,y); end; Что касается Quartus то смотрите 3 способа: страница 8-13 "Quartus II Version 6.0 Handbook", volume 1. Самый прямолинейный - в Project Navigator/Design Files ПКМ на файле, Properties/Library - вписывается имя библиотеки, то есть для нашего примера xyz.
|
|
|
|
|
Mar 19 2007, 23:23
|

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

|
Цитата(vleo @ Mar 19 2007, 22:59)  Да, проверил, Вы правы :-) Однако, я бы уточнил - можно собирать сразу в другую библиотеку, указав ее компилятору.
Например, в Aldec AHDL указывается какая библиотека будет рабочей в установках проекта, в других имеющихся под рукой системах можно указать компилятору в какую библиотеку класть модуль: http://electronix.ru/forum/index.php?s=&am...st&p=192511конструкция library xyz; вводит в пространство имен модуля имя xyz как логическое имя некоторой библиотеки. Любой. Ничего больше. Логическое имя WORK описывать не нужно - оно введено в пространство имен с самого начала. В разных модулях одна и та же физическая библиотека может быть под разными именами. Согласно стандарту связь между логическими библиотеками и физическими библиотеками задается в настройках VHDL системы. Система должна позволять такую связь устанавливать. Нравится GNU-HDL вводить при компиляции модуля в физическую библиотеку xyz связь логическое имя xyz = физическая библиотека xyz в дополнение к обязательному логическое имя work = физическое имя xyz - это их право. Но VHDL система не обязана так поступать, по крайней мере, без явной просьбы программиста. Кроме того, если GNU-HDL не позволяет логическое имя xyz связать не с физической библиотекой xyz, а, скажем, с физической библиотекой abc - он нарушает требования LRM.
--------------------
Пишите в личку.
|
|
|
|
Сообщений в этой теме
Elf Помогите разобраться с библиотеками (VHDL) Dec 27 2006, 11:43     vleo Цитата(Oldring @ Mar 19 2007, 23:23) http... Mar 21 2007, 12:20      Oldring Цитата(vleo @ Mar 21 2007, 12:20) Это что... Mar 21 2007, 13:06 BSV Вот в чем заключается отличие рабочих и ресурсных ... Dec 30 2006, 20:05 Oldring Цитата(BSV @ Dec 30 2006, 20:05) При этом... Dec 30 2006, 21:24  BSV Цитата(Oldring @ Dec 30 2006, 21:24) Логи... Dec 30 2006, 23:38 De-ep Всем здравствуйте и с наступающим 2007!
De-ep... Dec 31 2006, 00:09 Самурай Возможно Вам поможет вот такой вариант:
1. Помещ... Jan 1 2007, 18:10 De-ep Самурай <= спасибо. Путь который ты описал, на... Jan 2 2007, 13:03 Самурай Процитирую самого себя, а потом еще немного добавл... Jan 2 2007, 20:35 De-ep Да действительно - эти файлы там есть.
Причем, ког... Jan 2 2007, 21:59
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|