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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Помогите разобраться с библиотеками (VHDL)
Elf
сообщение Dec 27 2006, 11:43
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
Oldring
сообщение Dec 29 2006, 20:10
Сообщение #2


Гуру
******

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



Про Quartus не скажу ничего. Использовал билиотеки для Моделсима.

Все VHDL модули объекты компилируются в какие-то библиотеки. Новые объекты всегда компилируются в библиотеку с логическим именем WORK. Потом (при компиляции другого модуля) эту библиотеку можно использовать под другим именем как ресурсную библиотеку. Связь логических имен библиотек с путями на диске в принципе должна задаваться в настройках среды для каждого компилируемого модуля - логическое имя библиотеки не хранится в самой библиотеке. Иногда эти настройки глобальные. Директива VHDL 'library' вводит в текущее пространство имен логическое имя библиотеки.

В принципе, после объявления имени библиотеки можно использовать объекты из нее сразу без директивы use - написав полное имя объекта с указанием библиотеки. К сожалению, не все среды это поддерживают, хоть и обязаны. Директива use вводит указанные имена из библиотеки в текущее пространство имен - чтобы можно было использовать эти имена без префикса библиотеки.

Еще в начале каждого модуля неявно написано:

Код
library STD, WORK;
use STD.STANDARD.all;


Пакеты, компоненты и архитектуры - это модули, которые хранятся в библиотеках. В принципе для использования скомпилированной библиотеки текстовые исходники не нужны, описания компонентов хранятся в самих библиотеках в скомпилированном виде. Но, к сожалению, инструментарий для работы с библиотеками, особенно, системными, традиционно крайне скуден. Поэтому текстовые исходники полезны в качестве хелпа.


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
BSV
сообщение Dec 29 2006, 23:39
Сообщение #3


Знающий
****

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



Цитата(Oldring @ Dec 29 2006, 20:10) *
Все VHDL модули объекты компилируются в какие-то библиотеки. Новые объекты всегда компилируются в библиотеку с логическим именем WORK.


Вот и неправда Ваша, можно указать ModelSim'у в какую библиотеку компилировать каждый файл. Это очень удобно, например, при поведенческом (до синтеза) моделировании проектов с большим числом компонентов (или состоящие из нескольких ПЛИС) - компоненты компиляем в одну библиотеку (для каждой ПЛИС - в свою), тестбенч - в другую.

Если прописать свою библиотеку в modelsim.ini лежащий в папке с ModelSim'ом, то она будет доступна всегда, каким бы образом моделирование ни запускалось.

Использование своих библиотек при синтезе у Xilinx (про Альтеру не скажу) хоть и возможно вроде (не помню точно достиг я результата в этом или нет, однако неприятный осадок остался), но процесс мне показался слишком утомительным и я решил для себя им впредь не пользоваться.


--------------------
Дурак, занимающий высокий пост, подобен человеку на вершине горы - все ему кажется маленьким, а всем остальным кажется маленьким он сам. /Законы Мерфи/
Go to the top of the page
 
+Quote Post
Oldring
сообщение Dec 30 2006, 00:54
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 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, а не под тем именем, под которым библиотека будет использоваться потом как ресурсная.


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
BSV
сообщение Dec 30 2006, 20:05
Сообщение #5


Знающий
****

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



Вот в чем заключается отличие рабочих и ресурсных библиотек:

Design libraries can be used in two ways: 1) as a local working library that contains the compiled version of your design; 2) as a resource library. The contents of your working library will change as you update your design and recompile. A resource library is typically static and serves as a parts source for your design.

При этом никто не говорит, что рабочих библиотек не может быть несколько.

А вот в чем особенность библиотеки WORK:

The library named "work" has special attributes within QuestaSim; it is predefined in the compiler and need not be declared explicitly (i.e. library work). It is also the library name used by the compiler as the default destination of compiled design units (i.e., it doesn’t need to be mapped). In other words the work library is the default working library.

То есть ее всего лишь можно не объявлять явно и при компиляции явно (vcom -work <library name>) не указывать:

By default, this is the library named work. To change the current working library, you can use vcom -work and specify the name of the desired target library.


--------------------
Дурак, занимающий высокий пост, подобен человеку на вершине горы - все ему кажется маленьким, а всем остальным кажется маленьким он сам. /Законы Мерфи/
Go to the top of the page
 
+Quote Post
Oldring
сообщение Dec 30 2006, 21:24
Сообщение #6


Гуру
******

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



Цитата(BSV @ Dec 30 2006, 20:05) *
При этом никто не говорит, что рабочих библиотек не может быть несколько.


LRM раздел 11.2. Only one library is the working library during the analysis of any given design unit.

Вообще-то каждая библиотека является рабочей при компиляции входящих в неё модулей. И она всегда для своего модуля имеет логическое имя WORK. Library logical name WORK denotes the current working library during a given analysis Читайте LRM.

Добавлю. Вы, видимо, имеете в виду физическую библиотеку с именем на диске work. Эта библиотека может использоваться любым модулем как ресурсная библиотека под любым логическим именем, не конфликтующим с другими используемыми этим модулем логическими именами библиотек. Логическое имя библиотеки WORK используется в VHDL исключительно для именования рабочей библиотеки - библиотеки, в которую компилируется текущий модуль.


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
BSV
сообщение Dec 30 2006, 23:38
Сообщение #7


Знающий
****

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



Цитата(Oldring @ Dec 30 2006, 21:24) *
Логическое имя библиотеки WORK используется в VHDL исключительно для именования рабочей библиотеки - библиотеки, в которую компилируется текущий модуль.


Вы правы, я упустил в первом вашем посте выделенное ключевое слово. Действительно, я спутал физические и логические имена библиотек, сер, необразован, LRM не читал (теперь буду заглядывать) wacko.gif .

Проблема-то у человека была как раз с физическими библиотеками - как из той физической библиотеки, на которую ссылается WORK сделать физическую библиотеку с определенными физическим и логическим именами, да еще, чтобы это синтезатор понял правильно (шут его знает в каком виде они лежат).


--------------------
Дурак, занимающий высокий пост, подобен человеку на вершине горы - все ему кажется маленьким, а всем остальным кажется маленьким он сам. /Законы Мерфи/
Go to the top of the page
 
+Quote Post
De-ep
сообщение Dec 31 2006, 00:09
Сообщение #8





Группа: Новичок
Сообщений: 4
Регистрация: 30-12-06
Пользователь №: 24 020



Всем здравствуйте и с наступающим 2007!

De-ep - это тот же Elf. Я пишу с другого компа, забыл свои данные для входа, пришлось еще раз зарегиться.

Спасибо всем кто отозвался по поводу VHDL библиотек. Когда я увидел что реакция последовала далеко не сразу - понял что с библиотеками вопрос мутный.
Все что я нарыл в Quartus - это три способа организации библиотек:

-In the File Properties dialog box in the Quartus II graphical user interface (GUI)
-In the Quartus Settings File (.qsf) or with a Tcl command
-In the VHDL file itself, using a synthesis directive

Они более менее объяснены в хелпе Quartus в разделе "Organizing a VHDL Design into Libraries"

Мне казалось, что победа рядом, но справиться пока так и не смог.

Интересен последний способ где надо указать директиву типа

-- synthesis library my_lib

my_lib - название библиотеки. Директива указывает куда компилироватьпроект, причем, как заявлено, эта директива "перешибает" дефолтовый WORK и остальные способы задания библиотек.

Однако, задавая подобную директиву и указывая библиотеку не могу ее найти после компиляции.
В другом проекте задаю ее имя для использования но компилятор ругается - нет такой библиотеки.

Решил поизучать как созданы библитеки поставляемые с Quartus, например файл SYN_ARITH.VHD от Synopsys.
Там нашел следующее:
-- Altera Synthesis Directive Attributes
library altera;
use altera.altera_internal_syn.all;

Далее нашел пакет altera_internal_syn и увидел следующий заголовок:

-- Copyright © 2003 by Altera Corp. All rights reserved. --
-- Description: Declares utility package for internal Altera synthesis --
-- support. --
-- *** USER DESIGNS SHOULD NOT INCLUDE THIS PACKAGE DIRECTLY ***

Похоже, свои бибиотеки интегрированы в Quartus, тогда непонятно есть ли вообще возможность создать что-либо подобное юзерское.


Исходная цель - создать пользовательскую библитеку, что бы потом только указть LIBRARY такая-то и USE пакет такой-то, в системе Quartus пока так и не достигнута.
Если кто что знает пожалуйста пишите.

Всех благ. De-ep он же Elf.
Go to the top of the page
 
+Quote Post
Самурай
сообщение Jan 1 2007, 18:10
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 468
Регистрация: 4-03-05
Пользователь №: 3 066



Возможно Вам поможет вот такой вариант:

1. Помещаете все свои типы, константы и ф-и в один или несколько пакетов. Описание пакетов размещаете в библиотеке, допустим my_lib.vhd. Для некоторых САПР требуется, чтобы имя библиотеки совпадало с именем файла, в Quartuse, насколько я понял, это не обязательно.

2. Добавляете файл библиотеки в свой проект. После этого для библиотечного файла в окне File Properties в поле Type выбираете VHDL File, а в поле Library указываете название своей библиотеки: my_lib.

Пользоваться своей библиотекой после этого можно, как и любой другой. Там, где это нужно просто объявляете свою библиотеку и все используемые компоненты из нее:

library my_lib;
use my_lib.my_package_1.all;
use my_lib. my_package_2.all;
use my_lib. my_package_3.all;

Насколько такой путь корректен, сложно сказать, но это работаеsmile.gif.

Можно попробовать и немного по другому. В окне Settings, на странице User Libraries (Current Project) в поле Library Name написать имя своей библиотеки и нажать кнопку ADD. При этом файл библиотеки должен быть включен в проект и название библиотеки должно совпадать с именем файла.

Впрочем, судя по содержимому файла *.qsf, эти два варианта абсолютно одинаковые, т.к. приводят к появлению одной и той же команды:

set_global_assignment -name VHDL_FILE my_lib.vhd -library my_lib
Go to the top of the page
 
+Quote Post
De-ep
сообщение Jan 2 2007, 13:03
Сообщение #10





Группа: Новичок
Сообщений: 4
Регистрация: 30-12-06
Пользователь №: 24 020



Самурай <= спасибо. Путь который ты описал, на мой взгляд, вполне корректен.
Но моя проблема более касалась библиотек компонентов - т.е по сути проектов.
Дело в том, что используя package можно указать component declaration, но в package body не указать architecture. В описании VHDL сказано, что Package Body может содержать:
-subprogram declaration
-subprogram body
-type, subtype declaration
-constant declaration
-file declaration
-alias declaration
-use clause

Если в Quartus создавать проект с спользованием ранее созданных компонетов (проектов) - то в Settings->Files предлагается "Select the Design Files You Want to Include to the project". Такми образом можно включить в процесс компиляции исходники ранее созданных компонентов.
Однако используя компоненты поставляемые с Quartus, например параметризованные модули, достаточно указать библиотеку LPM (Library of Parameterized Modules).
Вот я и заинтересовался есть ли инструментарий для создания подобной библиотеки или можно только свалить свои исходники в какой-нибудь каталог и при помощи "Select the Design Files You Want to Include to the project" присоединять необходимые к процессу компиляции.
Похоже, что бибиотеки поставляемые с Quartus интегрированы в него и вряд ли можно создать что-либо подобное пользовательскими средствами.
Что же касается функций, констант, типов и т. д. - то их можно хранить в едином файле и ссылаться на него как на юзерскую библиотеку, как ты и предложил.

Пока получается так - в юзеской библиотеке можно создать component declaration, а архитектуру компонентов подключать через Settings->Files в виде исходников.

Возможно, мои рассуждения некорректны. Все это требует проверки.
Если у кого-то другие мысли по этому поводу - пишите.


Всего наилучшего.
Go to the top of the page
 
+Quote Post
Самурай
сообщение Jan 2 2007, 20:35
Сообщение #11


Местный
***

Группа: Участник
Сообщений: 468
Регистрация: 4-03-05
Пользователь №: 3 066



Процитирую самого себяsmile.gif, а потом еще немного добавлю:

Цитата
Можно попробовать и немного по другому. В окне Settings, на странице User Libraries (Current Project) в поле Library Name написать имя своей библиотеки и нажать кнопку ADD. При этом файл библиотеки должен быть включен в проект и название библиотеки должно совпадать с именем файла.


Таким способом можно не только сопоставить с *.vhd файлом одноименную библиотеку, но и сказать компилятору в каких директориях он должен искать файлы с architecture body. При этом библиотека с пакетами, в которых описаны компоненты, соответствующие этим architecture body, должна быть подключена так, как я говорил выше.

Библиотеки, подключенные таким образом, могут использоваться только в текущем проекте.
Директории, хранящие библиотеки для всех проектов, задаются на странице Global User Libraries (All Project) в меню Tools/Options/General.

А что касается вот этого:

Цитата
1) Для примера (VHDL, Quartus)- библиотека парам. модулей: Library- LPM ... package -lpm_components...File - lpm_pack.vhd.
Если открыть файл - то он содержит пакет с объявлениями компонентов, а где хранятся собственно описания? Как вся эта "кухня" работает?


то посмотрите директорию \quartusxx\libraries\megafunctions. Я думаю, Вы будете немного удивленыsmile.gif, найдя здесь описание ВСЕХ параметризованных модулей и мегафункций Alterы, правда на языке AHDL:).
Go to the top of the page
 
+Quote Post
De-ep
сообщение Jan 2 2007, 21:59
Сообщение #12





Группа: Новичок
Сообщений: 4
Регистрация: 30-12-06
Пользователь №: 24 020



Да действительно - эти файлы там есть.
Причем, когда я пытался разобраться с библиотеками я их видел, но тогда не придал значения, так как искал VHDL файлы.

По-моему вопрос решен. Во всяком случае есть способы, может и не идеальные, но вполне применимые. И мне почему-то кажется, что из Quartus большего не выжать. Хотя может я и ошибаюсь.


Если у кого есть еще инфа - пишите.


Спасибо. (Отдельное - Самураю). cheers.gif
Go to the top of the page
 
+Quote Post
vleo
сообщение Mar 19 2007, 22:59
Сообщение #13


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

Группа: Свой
Сообщений: 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.
Go to the top of the page
 
+Quote Post
Oldring
сообщение Mar 19 2007, 23:23
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 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.


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
vleo
сообщение Mar 21 2007, 12:20
Сообщение #15


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

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



Цитата(Oldring @ Mar 19 2007, 23:23) *
http://electronix.ru/forum/index.php?s=&am...st&p=192511



Кроме того, если GNU-HDL не позволяет логическое имя xyz связать не с физической библиотекой xyz, а, скажем, с физической библиотекой abc - он нарушает требования LRM.


Это что-ли наезд на gnu-HDL? Его поведение совершенно аналогично поведению vcom (ModelSim). А уж укладывается ли поведение vcom в IEEE-1076 - Вам виднее. Безусловно, там есть возможность связать любую физическую библиотеку с логическим именем. Но, те, что собраны под определенным именем, в рабочей директории проекта сразу под такими именами доступны, без дополнительных настроек.

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

Если провести аналогию с C, то требование стандарта звучит так, чтобы не было строгой привязки, то есть в
одной программе пишем:

#include <stdio.h>

а в другой пишем
#include <xyz.h>

а имеем в виду одно и тоже. Да на том же VHDL у Вас в одих модулях написаное:
library ieee;
use ieee.std_logic_1164.all;

а в других надо думать:

library xyz;
use xyz.std_logic_1164.all;

Нет, надо думать. Так что требования стандарта сводятся к тому, что на практике, библиотека хранится в каком-то файле или директории на файловой системе, и, можно подменить одну библиотеку другой, а также то, что сама библиотека не должна быть привязана к своем собственном имени.

Вообщем, намерения авторов были как всегда сделать как лучше, а уж что получилось... Но можно понять - плоское пространство имен символов, как в C, это неудобно - то, что нельзя заменить одну библиотеку на другую, и если в разных библиотеках определен один и тот же символ, то при сборке позникает потенциальный конфликт (хотя сборщик должен использовать первое определение, которое он находит для неопределенного символа, и дальше не смотреть).

p.s. Делаю, специально для Вас, чтобы на эту тему не дискутировать

VHDL стандарт это самый лучший, самый справедливый стандарт в мире, те, кому что-то в нем не нравится - профессионально не пригодны, читать и перечитывать до просветления.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 27th July 2025 - 07:57
Рейтинг@Mail.ru


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