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

Новый стандарт VHDL-2007(?)

последнее время после введения стандарта по SV немного потерял из виду тенденции развития ВХДЛ - между тем ребята не спят и Accellera в середине осени прошлого года вроде как приняла новый стандарт (по тому что я успел подглядеть из их записочек добавили рандомизацию, полноценные классы и полностью встроили PSL в синтаксис)

в своё время до принятия Ай-Я-Яем стандарта по СВ у Acceler-ы на сайте лежал драфт по стандарту (от самого стандарта мало отличающийся) может кто-то успел надыбать нечто подобное и по VHDL2007? очень интересно обозреть новшества в полном обьёме в единой бумажке

cпасибо

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


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

в comp.lang.vhdl чел сравнивает новшества VHDL2007 с предыдущими (и драфтами) - видимо продвинутый чел

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


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

жалко что я забыл свой логин на асселлере - и с каким почтовым ящиком регестрировался уже не помню(скорее всего с рабочим - а на рабочем сервере у меня в честь 1ого апреля аккаунт полетел) - может кто есть из активных (простите) членов? качните драфт в закрома, плз

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


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

В предисловии к стандарту на VHDL написано что из-за того что этот язык получил большое распространение во всем мире разработчики стандарта будут весьма консервативны в деле нововведений. Судя по по публикации Colin Pauel Gloster изменений должно быть немного.

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


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

В предисловии к стандарту на VHDL написано что из-за того что этот язык получил большое распространение во всем мире разработчики стандарта будут весьма консервативны в деле нововведений. Судя по по публикации Colin Pauel Gloster изменений должно быть немного.

И правильно. Надо только добавить функцию "stop" и "process(*)", остальное уже есть))

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


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

И правильно. Надо только добавить функцию "stop" и "process(*)", остальное уже есть))

 

не помешает еще :

1. возможность использования в процессе sequental statement что бы if ы не плодить,

2. наличие аналога верилоговского if (pipa) для типов отличных от boolean

3. нормальный, индексируемый file i/o. хотя бы как в верилоге.

 

ну и поддержка всего этого в симуляторе и синтезаторе. :)

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


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

2. наличие аналога верилоговского if (pipa) для типов отличных от boolean

Ну есть у вас

type enum is (one, two, three)
signal e : enum;

и что в этом случае должно значить

if (e)

?

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


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

Ну есть у вас

type enum is (one, two, three)
signal e : enum;

и что в этом случае должно значить

if (e)

?

 

таки заметили не точность :)

 

под типом отличным от boolean я имел в виду типы integer, std_logic/std_ulogic (и производные от них).

согласитесь что записть

 

if (pipa and not popa and test)

выглядит симпатичнее чем

if (pipa and not popa and test) = '1'

и гораздо симпатичнее чем

if (pipa = '1' and popa = '0' and test = '1')

 

 

ЗЫ. Забыл кое что добавить:

1.Еще сделали бы они опциональным (для целей симуляции) включение ограничения описанного в главе стандарта 9.5 Concurrent signal assignment statements параграфф 205 :

 

"..............

For any concurrent signal assignment statement, there is an equivalent process statement with the same

meaning.

............."

 

(с) VHDL LRM IEEE Std 1076, 2000 Edition

 

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

 

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

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


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

таки заметили не точность :)

под типом отличным от boolean я имел в виду типы integer, std_logic/std_ulogic

std_(u)logic -- это пользовательский перечислимый тип, как и мой enum. Почему для него надо делать исключения, почему с ним может работать то, что не будет работать с моим пользовательским перечислимым типом? Перед законом должны быть все равны.

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


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

std_(u)logic -- это пользовательский перечислимый тип, как и мой enum. Почему для него надо делать исключения, почему с ним может работать то, что не будет работать с моим пользовательским перечислимым типом? Перед законом должны быть все равны.

 

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

 

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

знак равенства с величиной определенной по умолчанию.

 

Величина по умолчанию для предопределенных типов (integer, std_(u)logic, std_ulogic) описываеться в стандарте или пакете (по мне лучше в стандарте) и составляет '1' для std_(u)logic и 0 для integer.

В случае использования массивов предопреленных типов std_(u)logic значение по умолчанию применяеться к каждому элементу.

 

Являеться ошибкой использование значения по умолчанию для типов определенных пользователем.

 

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

 

 

о точно! а почему бы не ввести атрибут типа DefaultValue. Ведь стандарт оговаривает создание атрибутов определяемых пользователем и обращение к ним.

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


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

Еще небольшой список дополнения языка, которые не помешает:

 

1. Аналог fork/join.

2. Доступ до любого сигнала по иерархическому имени (хотя бы без поддержки сложных типов, определяемых пользователем). Глобальные сигналы не самый хороший вариант. VHPI сигнальные агенты симуляторов тоже.

3. Если будет 2 то обязательно аналог force/release.

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


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

DES00 !!!!!

 

Обращаю внимание на вот одну вещь - ты написал недавно что хотел бы от обновленного стандарта на VHDL:

 

2. наличие аналога верилоговского if (pipa) для типов отличных от boolean

 

Вещь зело удобная для упрощения кода и повышения читабельности, и в верилоге, который очень демократичен к автоматическим преобразованиям типов, активно используется. Там можно wire или reg подставлять в условие как логический сигнал (а ведь забавно что в VHDL логический сигнал не может быть логическим типом :-)) ).

 

Но я абсолютно уверен что комитет по этому стандарту никогда не пойдет на это - так как вся история этого стандарта доказывает, что комитет помешан на строгой типизации !!! Это их БОГ !

 

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

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


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

Но я абсолютно уверен что комитет по этому стандарту никогда не пойдет на это - так как вся история этого стандарта доказывает, что комитет помешан на строгой типизации !!! Это их БОГ !

 

Ну почему ? пойдет при одном условии, сделает не совсем совместимый со старым стандарт. Можно же поступить совершенно по другому: вести тип std_logic и его производные не в библиотеку, а в стандарт.

Как например это сделано в Верилоге. В нем у сигнала есть 4 значения: 0,1,z,x. и они прямо указывают что если ==/!= и т.д. нет то считать что проверяеться равенство на 1.

 

И никакого отхода от принципов строгой типизации я тут не вижу :)

 

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

 

ну вот насчет этого я спорить не возмусь, но уж если и верилог инструмент для работы, то ИМХО при его создании были допущены серьезные минусы:

 

До работы на верилоге я знал один : отсутствие строгой типизации :) а сейчас пишу на 2-х языках (VHDL/Verilog) и заметил еще несколько недостатков : неявная декларация цепей, как ни странно отсутствие операторов управления циклами кроме disable, отсутствие избирательного синтезируемого событийного контроля в блоках (все завязано на списки чувствительности), слишком геморный (по сравненнию с VHDL) generate, отсутствие нормального типа string.

 

Поэтому если верилог и создавался как инструмент, то как то не аккуратненько все :)

 

По мере опыта работы на Verilog и курения LRM на Verilog/System Verilog найдуться еще недостатки :)

Конечно и про недоработки VHDL тоже можно много что сказать, но смысла нет. Копий много было сломано и до этого.

 

 

PS. Забыл добавить еще один недостаток: недетерменизм, который приводит к гонкам сигналов.

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


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

До работы на верилоге я знал один : отсутствие строгой типизации :) а сейчас пишу на 2-х языках (VHDL/Verilog) и заметил еще несколько недостатков : неявная декларация цепей, как ни странно отсутствие операторов управления циклами кроме disable, отсутствие избирательного синтезируемого событийного контроля в блоках (все завязано на списки чувствительности), слишком геморный (по сравненнию с VHDL) generate, отсутствие нормального типа string.

ну, дорогой товарищ des, от вас такого не ожидал. вот зачем вы уважаемую публику в заблуждение (думаю конечно не из злого умысла но всё же) вводите.

операторы управления (циклом в том числе):

if (a inside {1,2,5})...

for (int i=0, int j=5; i*j<255; i++, j+=4)...

for(...) do .... break/return/continue; .... while

unique/priority case(casez/casex)/if

foreach A...

неужели мало? Ж) к стати встречный вопрос: а в ВХДЛ такое разнообразие операторов присутствует?

на счёт генерэйта: а по-моему настолько же полнофункциональный как и в ВХДЛ (те же циклы, те же ифы)

по поводу неявной декларации цепей: как-то не особо замечал что она в ВХДЛ явная - сигналы да переменные (цепей и регистров там тоже нет; а вот в Верилоге есть тип переменных reg и logic - хотите показать при декларации что переменная регистр - используете тип рег. хотите что провод используете лоджик. кроме торо переменные могут быть локальными аж до цикла и глобальными аж до пэкеджа или корня root.

по поводу типа string: он там есть, а ещё там к примеру есть ассоциированные массивы, динамические массивы и всё с поддрержкой методов (включая сортировки и поиск) и как встроенные языковые типы есть даже объединения - а есть ли всё это в ВХДЛ?

отсутствие избирательного синтезируемого событийного контроля в блоках (все завязано на списки чувствительности):
а вот это я не понимаю как - расскажите на примере - может и оно тоже есть и я о нём поведую ;)

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


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

ну, дорогой товарищ des, от вас такого не ожидал. вот зачем вы уважаемую публику в заблуждение (думаю конечно не из злого умысла но всё же) вводите.

.....

а вот это я не понимаю как - расскажите на примере - может и оно тоже есть и я о нём поведую ;)

 

ЭЭЭЭ !!! да систем верилога я еще не дошел :)

 

Медленно (страниц по 20 в день) курю LRM IEEE Standard Verilog® Hardware Description Language IEEE Std 1364-2001 (Revision of IEEE Std 1364-1995)

 

И пишу пока только на нем. Значит по порядку:

1. операторы управления (циклом в том числе):

 

Стандарт оговаривает использовние только оператора disable (глава 11 Disabling of named blocks and tasks).

 

Что на мой взгляд достаточно странно, т.к. уж в 2001 году си был настолько распространен что не использование break/continue выглядит крайне странным. Конечно возможна реализация подобных функций через disable но все же. В Вхдл для этого предназначены next/exit.

 

2. неявная декларация цепей

относиться к разделу 3.5 Implicit declarations.

осложняет описание модулей со структурным дезайном в основном из-за незамеченых случайных ошибок в имени цепи. в купе с автоматическим приведением разрядности делает возмножным появление крайне неприятных багов (компилятор то молчит как партизан)

 

3. слишком геморный (по сравненнию с VHDL) generate

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

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

 

4. отсутствие нормального типа string

2.6 Strings - строки это регистры с шириной 8*n.

причем если присвоение идет строки с меньшим кол-ом символов следует приведение разрядности. Что создает гемор при выводе таких строк в консоль или файл и проблемы с конкатенацией строк.

Не могу понять что же мешало в 2001 году сделать нормальный тип string (все равно не синтезируемый) как например в том же Си + ввести сишный string.h с его функциями.

 

5. отсутствие избирательного синтезируемого событийного контроля в блоках (все завязано на списки чувствительности).

 

пример VHDL

 

pipa_proc : process (
  clk, 
  reset
  ) is 
begin
  if (reset = '1') then 
    popaa <= '0';
  else if (rising_edge (clk)) then
    popaa <= ina;
  end if;
  
  if (rising_edge (clk)) then 
    popab <= ina;
  end if; 
end process pipa_proc;

 

пример Verilog

 

  always @(posedge clk, posedge reset) begin
    
    if (reset) begin 
      popaa <= 1'b0; 
      end 
    else begin
      popaa <= ina;
    end 
    
    popab <= ina;
  end

 

Квартус 6.1 : первое синтезируеться в тригер со сбросом + тригер без сброса, второе

в тригер со сбросом + тригер с комб логикой.

 

Причем даже если описать логику сброса во втором случе как

if (reset)

popab <= popab;

else

popab <= ina;

 

будет тоже самое тригер + комб логика.

 

а ещё там к примеру есть ассоциированные массивы, динамические массивы и всё с поддрержкой методов (включая сортировки и поиск) и как встроенные языковые типы есть даже объединения - а есть ли всё это в ВХДЛ?

 

IEEE Standard VHDL Language Reference Manual IEEE Std 1076, 2000 Edition (Incorporates IEEE Std 1076-1993 and IEEE Std 1076a-2000)

описывает динамические масивы и работу с ними, классы (protected type правда у Aldec 7.1 с ним проблемы), если я правильно понимаю смысл объединения то и их (record). Вот что точно я не понимаю в VHDL что мешало сделать нормальную поддержку fileio из того же С.

 

Полагаю что никого в заблуждение я не вводил. все точно по LRM Verilog 2001. Когда докурю его, начну также курить стандарт на систем верилог. Медленно и верно.

 

Зачем "теряю" время на Верилог 2001 ? Дык времени вагон - впереди вечность, хочу быть последовательным. :beer:

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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