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

Что делают с пакетами в SV?

В VHDL пакеты компилят в какую-нибудь библиотеку, а потом ссылаются на нее и на пакет. Сейчас курю стандарт SV, и не могу найти ничего про библиотеки. Использовать пакет у меня получается, только, если я его `include в исходник, и далее по стандарту. А как используют пакеты взрослые пацаны? Сильно не пинайте, только начал изучать verilog.

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


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

В VHDL пакеты компилят в какую-нибудь библиотеку, а потом ссылаются на нее и на пакет. Сейчас курю стандарт SV, и не могу найти ничего про библиотеки. Использовать пакет у меня получается, только, если я его `include в исходник, и далее по стандарту. А как используют пакеты взрослые пацаны? Сильно не пинайте, только начал изучать verilog.

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

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


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

Спасибо за ответ,

Логически это аналогия технологии заголовочных файлов в С/С++.

- теперь все стало на свои места. Не буду больше пытаться компилить пакеты в библиотеку :)

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


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

Использовать пакет у меня получается, только, если я его `include в исходник, и далее по стандарту. А как используют пакеты взрослые пацаны

 

кхм, а по рабоче колхозному не получается ?

 

package pipa_pkg; 

  localparam int cPIPA = 0;
  localparam int cPOPA = 1;

  function automatic int max (input int a,b ); 
    if (a >=b ) 
      max = a; 
    else 
      max = b; 
  endfunction

endpackage 

module pipa_ver0(output logic c); 

  assign c = pipa_pkg::max(pipa_pkg::cPIPA, pipa_pkg::cPOPA);

endmodule

module pipa_ver1 (output logic c); 

  import pipa_pkg :: *; 

  assign c = max(cPIPA, cPOPA);

endmodule

 

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

 

Не совсем корректно. В СВ введено понятие глобального пространства имен, поэтому никто не мешает делать нормальные, честные include файлы (т.е. с инклудом вне модулей).

 

Но тут есть неудобные подводные камни :

1. понятие compilation unit и его реализация в некоторых CAD. Что может приводить к несовместимости казалось бы одинаковых типов (не упакованные структуры в квесте, без -mfcu ключа не дают симуляться).

 

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

 

Вот как раз что бы косяков с глобальным пространством не было и введено понятие пакетов. Кстати пакет компилируется и видится как отдельный объект (по крайней мере в квесте) из которого "динамически" импортируются переменные, функции и т.д.

 

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

 

Это ИМХО сильно отличается от технологии заголовочных файлов, тут я бы сказал ближе концепция импорта из языка Python.

 

 

Удачи !!!

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


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

кхм, а по рабоче колхозному не получается ?

Конечно, же, получается. Мне был непонятен смысл использования пакетов что по-колхозному. что с include. Думал, как в VHDL - скомпилили и используем без инклюдов и колхозов :)

...

Мне стыдно, но я почти ничего не понял. Все-таки пока буду считать пакеты чем-то вроде хедеров в C++. Так мне будет спокойнее :) А там посмотрим.

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


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

Конечно, же, получается. Мне был непонятен смысл использования пакетов что по-колхозному. что с include. Думал, как в VHDL - скомпилили и используем без инклюдов и колхозов :)

 

Мне стыдно, но я почти ничего не понял. Все-таки пока буду считать пакеты чем-то вроде хедеров в C++. Так мне будет спокойнее :) А там посмотрим.

 

такс, пакет в SV и VHDL по сути одно и тоже. и тот и тот компилируется как отдельный модуль, в рабочую библиотеку.

 

просто в вхдл мы подключаем его как use work.pkg.all, а в SV как import pkg::*;

 

но местоположение импорта пакета может быть разное, в глобальном пространстве имен (с некоторой оговоркой на весь проект) или в локальном пространстве имен (модуль, интерфейс, класс).

 

Посмотреть в чем разница легко. Модернизируем пример:

 

файл tst.v

 

module pipa (); 

  import pipa_pkg :: *; 

  initial begin 
    $display(cPIPA, cPOPA);
  end 

endmodule

 

файл pkg_tst.v

package pipa_pkg; 

  localparam int cPIPA = 0;
  localparam int cPOPA = 1;
//localparam int cPOPA = 32;

endpackage

 

1. компилируем оба файла vlog -sv pkt_tst.v tst.v

2. запускаем на симуляцию vsim work.pipa

3. run-all смотрим результат.

4. меняем значение параметра в пакета

5. компилируем один файл vlog -sv pkt_tst.v

6. заново симулим restart -all -force

7. run-all смотрим изменение результата.

 

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

 

ЗЫ. Сравните с результатами того же, но без пакетов

 

файл tst.v

 

`include "inc.vh"
module pipa (); 

  initial begin 
    $display(cPIPA, cPOPA);
  end 

endmodule

 

файл inc.vh

  localparam int cPIPA = 0;
  localparam int cPOPA = 1;
//localparam int cPOPA = 32;

 

сделайте выводы что тут не так.

 

PPS. Пакет используется БЕЗ каких либо инклудов !!! Зачем вам постоянно его перекомпилировать.

 

 

Поковыряйте симулятор и все станет понятно

 

Удачи !!!

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


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

Приношу свои извинения, но вчера был слишком голословен

 

пакет компилируется и видится как отдельный объект (по крайней мере в квесте) из которого "динамически" импортируются переменные, функции и т.д

 

естественно это не относиться к типам данных, определенных пользователем и к параметрам от которых зависят типы данных (ширина регистров и т.д.) в этом случае, как и в ВХДЛ, потребуется рекомпиляция модуля.

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


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

Вчера думал над вашими примерами :) На симуляцию не запускал.

Придумал такое:

1.

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

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

 

2. Повторюсь, на симуляцию не запускал, чисто предположение :) :

Будет error. Мол, у cPIPA и cPOPA и тип неизвестен, и значение. Ну и правильно - мы ж включили файл с определением констант не в тело модуля. Промазали. И из модуля их не видно.

 

ЗЫ Если не прав, дайте знать, тогда не поленюсь, посимуляю.

И Вам удачи!!!

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


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

ЗЫ Если не прав, дайте знать, тогда не поленюсь, посимуляю.

 

1. Ответ найден верно

2. Не верно. Никакой ошибки не будет, если бы это было ошибкой тогда мой проект

 

http://opencores.com/projects.cgi/web/hssdrc/overview

 

в принципе бы не работал (примеры кода по ссылке CVS->browse) %)))

 

Все дело в глобальном пространстве имен, ответ ищите в IEEE1800 -> Standard for SystemVerilog – Unified Hardware Design, Specification, and Verification Language -> 19.3 Compilation unit support

 

И все таки рекомендую посимулять %))

 

ЗЫ. int это кстати тип локального параметра

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


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

2. Не верно.

:crying:

Лучше один раз увидеть, чем один услышать. Спасибо, почитаем.

Все дело в глобальном пространстве имен, ответ ищите в IEEE1800 -> Standard for SystemVerilog – Unified Hardware Design, Specification, and Verification Language -> 19.3 Compilation unit support

И это почитаем :) Я сейчас как раз в этом ковыряюсь, но в другом разделе, про интерфейсы. Забрел туда в поисках аналога record в vhdl. Оказался монстр, однако :07:

И все таки рекомендую посимулять %))

Куда же деваться-то теперь? Сгораю от стыда. Конечно, посимуляю.

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


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

1. Ответ найден верно

2. Не верно. Никакой ошибки не будет, если бы это было ошибкой тогда мой проект

 

http://opencores.com/projects.cgi/web/hssdrc/overview

Немного не по теме

У вас в TODO находится Test in hardware with Altera Cyclone II/III and Xilinx Spartan3e FPGA

Возник вопрос в чем можно синтезировать вашу корку для Xilinx Spartan3e?

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


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

Немного не по теме

У вас в TODO находится Test in hardware with Altera Cyclone II/III and Xilinx Spartan3e FPGA

Возник вопрос в чем можно синтезировать вашу корку для Xilinx Spartan3e?

 

вообще тема посвященная контроллерам памяти находиться здесь

 

http://electronix.ru/forum/index.php?showt...mp;#entry375576

 

насчет TODO все никак руки не доходят обновить и новые модули выложить.

 

Контроллер протестирован в рабочем приборе на циклоне 2 (133 МГц), скоро придет плата на циклоне 3 (133 МГц). На спартане 3 ем плата лежит дома, но пока никак не могу заняться ей вплотную. Буду использовать ментор прецижен с поддержкой систем верилога. Других путей собрать под ксайлинкс нет.

 

Если еще будут вопросы, чтобы не флудить давайте в личку.

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


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

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

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

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

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

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

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

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

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

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