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

Литературы и примеров на VHDL намного больше, тогда как на Verilog их практически нет.

На моем сайте не были?

 

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


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

А при чем здесь мамонт? Мы что историю обсуждаем?

Извиняюсь за оффтоп:

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

...Никто не вернулся из охоты. Раздавили мамонты к чертям всех охотников.

Мораль: Не умеешь охотиться - раздавят тебя мамонты. А умеешь - вернешься с добычей. С любым топором.

полностью согласен - язык описания, программирования это только средство...

 

PS На мой взгляд сейчас нужно знать минимум Verilog и VHDL...

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


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

Тоже стою перед выбором. Поскольку логика языка описания аппаратуры, существенно отличается от вышеперечисленных языков, её сначала нужно где то прочувствовать. Литературы и примеров на VHDL намного больше, тогда как на Verilog их практически нет.

 

P.S. а вообще ребята, надо английский учить

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

А английски язык я знаю. В том году в интернете тест проходил он оценил мои знания в 3000 слов. Хочешь не хочешь, а как-то выучил.

 

Лично я пока остановился на Verilog. Думаю когда логику языка освою придумаю как недостатки языка обходить. А есть ли какие нибудь шаблоны программирования для HDL или концепции?

 

Правда с логику Verilog не всегда можно понять.

К примеру если так

 

always @(posedge clock or posedge reset)
    if (!reset)
       begin 
       c <=0;
      end
     else c<=c+a+b;    
endmodule

, то ошибка

 

Error (10200): Verilog HDL Conditional Statement error at test1.v(8): cannot match operand(s) in the condition to the corresponding edges in the enclosing event control of the always construct

 

А если posedge заменить на negedge то ошибки нет.

always @(posedge clock or negedge reset)
    if (!reset)
       begin 
       c <=0;
      end
     else c<=c+a+b;    
endmodule

 

Вот кто может объяснить, логику? Компилятор кактус 2.0-13

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


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

Вот кто может объяснить, логику? Компилятор кактус 2.0-13

Да она любому должна быть понятна, кто знаком с тем, как работает триггер. В ПЛИС нет физической возможности реализовать ту языковую конструкцию, где у резета posedge и условие что он равен нулю (!reset), а с negedge - есть, она вырождается в асинхронный сброс нулевым значением резета.

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


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

Да она любому должна быть понятна, кто знаком с тем, как работает триггер. В ПЛИС нет физической возможности реализовать ту языковую конструкцию, где у резета posedge и условие что он равен нулю (!reset), а с negedge - есть, она вырождается в асинхронный сброс нулевым значением резета.

Это та как раз понятно. Я тоже так подумал. Вопрос в том почему нет ошибке во втором случае?

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


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

Вопрос в том почему нет ошибке во втором случае?

 

Потому, что второй случай полностью соответствует всем правилам асинхронной загрузки регистра (в данном случае сброса), а в триггерах ПЛИС она есть.

 

Если подробнее, то в первом случае Вы хотите получить регистр, который по posedge двух разных сигналов будет защелкивать сумму, по сути триггер, работающий по двум клокам. Таких в ПЛИС нет. А во втором случае Вы описываете регистр, который обнуляется по negedge резет, и при всех posedge clk, пока reset=0, в нуле остается, это в ПЛИС есть, реализуется заведением сигнала reset на асинхронный вход. Поэтому первый случай привел к ошибке, второй был реализован.

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


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

Я вообще-то о другом как при изменения фронта мы можем сравнивать значение сигнала? Поидее у нас переходное состояние, а мы сравниваем с фиксированным. Или оно как постфактум берётся? Т.е как значение на которое поменяется состояние сигнала.

Изменено пользователем Paviaa

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


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

Или оно как постфактум берётся? Т.е как значение на которое поменяется состояние сигнала.

 

именно. В VHDL, кстати, также. Если фронт УЖЕ случился, о чем говорит posedge/negedge, то сигнал УЖЕ изменился на противоположный, в этом суть фронта. posedge/negedge говорит именно о произошедшем факте, а не о том, что произойдет в будущем :)

 

upd: переходные состояния бывают в аналоговом моделировании. А в HDL - или 1, или 0, 0.5 не бывает :) (состояния X и Z в расчет не берем, они к этому контексту отношения не имеют ;) )

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


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

За такой тонкий и не сразу ощущаемый сарказм - Вам "плюс в репу" )))

 

Но по существу почти все Ваши аргументы вполне парируемы:

 

Мне нравится верилог прежде всего за то, что там есть такие близкие к аппаратуре штуковины, как reg и wire.
Ну да, это мелкие неприятности. Но приноровиться можно крайне просто. Есть ещё и begin с end которые загромождают вид, это недостатки языка. Верилог неидеален. Просто достоинств больше.

 

 

Еще отличная вещь - невозможность использовать тип real в промежуточных вычислениях синтезируемых конструкций. Разработчику предлагается изучить другие хорошие языки программирования, чтобы генерировать на них параметры для своих блоков ЦОС
Зачастую HDL-кодер - это одно лицо, а ЦОС-ник - это другое. Бывает и вместе. Тогда и языков человек много знает. Почти нет таких узких специалистов, кто бы ничего побочного не знал. Совершенно не проблема.

 

 

 

Препроцессор.. вообще отличная и прогрессивная штука. В современных языках программирования от нее отказываются почему-то, разрешая константные выражения в конструкциях языка на этапе компиляции, и наивно полагая, что это позволит избежать ошибок
Строгая типизация тоже позволит избежать ошибок. А это кому-то надо? Из-за неё писанины больше, а опытный разработчик такие ошибки либо не совершает, либо быстро находит. Для начинающих - да, нужно как можно больше инструментов по автоматическому указанию на ошибки. В Си препроцессор есть, многим он удобен. Но не нравится - можете не пользоваться. Инструмент вам предложили, а дальше дело ваше.

 

 

Кстати, генерировать сообщение об ошибке средствами имеющегося препроцессора нельзя. Равно как и средствами синтезатора при проверке параметров.
Средствами синтезатора можно. И средствами симулятора тоже. Я всегда ставил защиту от дурака. Точнее я делал вывод сообщения в консоль и остановку дальнейшего анализа. Сообщение можно было почитать среди ворнингов синтезатора кажется.

 

 

Отсутствие типизации - огромный плюс при работе в коллективе. Все при деле, никто никого не отвлекает, и все строго следуют naming conventions. Ведь это надежнейший способ избежать ошибки. Да и зачем нагружать компьютер такой ерундой. Когда появляется потребность пробросить сигнал из недр иерархии наружу, все по цепочке так смешно оживляются.
В SV чтобы пробросить лишний сигнал достаточно добавить его к интерфейсу. Это уже конечно не чистый верилог. Но если уж в последствии мечтать о переходе на SV, то начать изучать можно хотя бы чистый верилог.

 

 

Мое любимое - это встроенные функции, имя которых начинается с $. Мне ведь просто необходимо знать, когда я вызываю функцию, встроена эта функция или нет.
Не придирайтесь так уж жёстко к такой мелочи, как не понравившийся Вам символ в названии функции. Ну так просто называется функция, имя у неё такое, с доллара начинается. Вы можете зато написать свою, без доллара, под тем же именем. Т.е. доллар даёт позволяет не занимать это имя как зарезервированные слова языка. Это наоборот удобство.

 

 

1. Низкий порог вхождения. Для освоения базового уровня языка и изготовления учебной мигалки средствами верилога достаточно 1 вечера. Но и выше этого порога там почти ничего нет.
А надо выше? Куда? Вошли и пишите. Чем проще и быстрее освоить инструмент и чем на нём быстрее пишется и получается конечный результат - тем лучше.

 

2. Как многие заметили: мало писать - пальцы не устают, и можно вечерами подрабатывать лабухом в кабаке.
Дело не в самих пальцах. Думаю, пальцы особо не страдают: просто надписи на клавишах Ctrl C и V стираются быстрее ))) Дело в другом: когда на VHDL что-то хочется добавить, то ты мысленно прокручиваешь, какую кучу шелухи придётся наворотить, чтобы добавить эту простенькую фишку, уместившуюся бы (условно!) на верилоге в одну строчку. И дальше у тебя встаёт психологический барьер: а может ну её? Или может как-то сделать попроще? Даже копипастить длинные портянки - есть психологический барьер: ведь эту портянку ещё нужно найти где-то в своих старых исходниках, нужно ещё лазить по файлам, выискивать этот шаблон... Вспоминать, где это могло встречаться... А на верилоге писать можно с ходу, не лазия за шаблонами. Т.к. пишется всё очень просто.

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


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

Ну да, это мелкие неприятности. Но приноровиться можно крайне просто. Есть ещё и begin с end которые загромождают вид, это недостатки языка. Верилог неидеален. Просто достоинств больше.

Если почитать корпоративные стандарты кодирования от Freescale или Cisco, то они предписывают своим программистам ставить begin-end в обязательном порядке, не говоря про какой-нибудь do-254.

Это, конечно, не истина в последней инстанции, но недостатками языка они это не считают. Тем более, что во многих случаях verilog допускает begin-end не ставить.

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


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

то они предписывают своим программистам ставить begin-end

Недостаток языка не их наличие в принципе, а то, что они не красивы и не лаконичны, как, например, {} в С.

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


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

За такой тонкий и не сразу ощущаемый сарказм - Вам "плюс в репу" )))

Дело не в самих пальцах. Думаю, пальцы особо не страдают: просто надписи на клавишах Ctrl C и V стираются быстрее )))

:a14:

По последнему пункту добавлю: пришлось недавно делать параметризируемый многопортовый сумматор на языке VHDL, получился монстр на несколько сотен строк, в прямом смысле слова (сделал из-за любопытства). А на SV всего 50 и это учитывая пробелы...

Но от этого отношение к VHDL у меня не изменилось - мой основной язык описания. Но тут как говорится на вкус и цвет, товарищей нет.

PS Не для халивара

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


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

Недостаток языка не их наличие в принципе, а то, что они не красивы и не лаконичны, как, например, {} в С.

Чтобы не путать с конкатенацией битов.

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


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

Чтобы не путать с конкатенацией битов.

А и не путалось бы. Совершенно разный контекст.

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


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

При желании можно дефайнами задать, например

`define {_ begin

`define _} end

:wacko:

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


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

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

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

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

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

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

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

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

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

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