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

тема для Aprox и любителей AHDL

Я имел в виду, что было бы интересно посмотреть на AHDL-модуль, написанный des00, несмотря на то, что это, действительно, получается "игра в одни ворота".  :)

 

А кому это будет интересно. В макросы Альтеры углублятся для ксалингистов и эктеловцев совсем не интересно.

Причем синтезатор сам в зависимости от семейства лучше знает на что ему лечь.

Например запись ct <= ct + 1'b1; в семействе ацекс ляжет на мегафункцию счетчика, а в циклоне - нет.

Ну а писать на AHDL, держа в голове имена пинов и их последовательность описания - флаг в руки.

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


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

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

 

 

Уважаемый des00 жду с нетерпением Вашу статью про слона . ;))

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


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

..... Я думал о вас лучше.

Я и сам думал про себя лучше. Но сейчас терзаюсь совестью, потому что действительно обнаружил - я был сильно неправ. Прямо с самого начала, обьявив опубликованный в opencores.org кодер enc_8b10b в торможении из-за академического VHDL. Только что проверил реальную скорострельность того кодера в разводке Quartus-ом для низшего Cyclone-III EP3C5E144C8. Увы мне, предельная частота кодирования оказалась 229.67 MHz. Это лучше, чем в моем неправильном(признаю) варианте на AHDL. И лучше ваших вариантов кодера на SV. Посыпаю голову пеплом раскаиния. У достопочтимой публики прошу прощения за доставленные неудобства но надеюсь, что хоть повеселил изрядно.

 

Прикладываю архивчик с проектом, который содержит, как сам опенкоровский кодер на VHDL, так и мой простенький его тест на AHDL. Может, кто захочет проверить самолично- не наврал ли я в очередной раз про 229.67 MHz.

 

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

test_enc5b10b.zip

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


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

Aprox:

 

Вы лучше TimeQuest используйте. Он поточнее.

 

Он указывает Fmax 224 МГц (+ еще может у нас настройки разные, в общем, не важно). Это для кодера.

 

Декодер работает помедленней. Я Вам это еще в самом начале первой темы писал. :)

 

 

 

P.S. А то, что признаете свои ошибки - это хорошо. Это правильно. :)

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


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

Aprox:

Вы лучше TimeQuest используйте. Он поточнее.

Он указывает Fmax 224 МГц (+ еще может у нас настройки разные, в общем, не важно). Это для кодера.

От настроек синтезатора очень многое зависит. Вот например, как влияет Optimization Tecnique:

 

Speed -> 229.67 MHz

Balanced -> 180.18 MHz

Area -> 180.18 MHz

 

А если при Speed входные и выходные регистры привязать к пинам FPGA, т.е. Fast Input Register и Fast Output Register, то получаем вместо 229 -> 181.5 MHz.

 

От настроек синтезатора зависит результат разводки, а не от языка. Поэтому затеянное нашим гуру сравнение языков выглядит некорректно. Если уж и сравнивать, то сравнивать на основе одинаковых вплоть до синтаксиса текстов и, самое важное, - одинаковых настройках синтезатора. Практически такое по-моему нереализуемо. А значит- и не нужно никому. Пусть каждый пишет на том языке, который больше нравится. :)

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


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

Пусть каждый пишет на том языке, который больше нравится. :)

 

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

symbol_in[7..0]: INPUT;

reg_in[]=(cntrl,symbol_in[0..7]);

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


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

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

symbol_in[7..0]: INPUT;

reg_in[]=(cntrl,symbol_in[0..7]);

Если вы спрашиваете, зачем понадобились входной и выходной регистры в тестовой схеме, то они при расчете скорости Classic анализатором изолируют схему кодера от задержек на пинах. Оценка скорострельности в этом случае зависит только от того, как синтезатор разведет кодер внутри ПЛИСа. Если же вас устрашила запись reg_in[]=(cntrl,symbol_in[0..7]); , то это просто расстановка битов символа в том порядке, какой воспринимает тестируемый кодер- младшим битом вперед. Интересно, что этот же кодер на выходе биты выдает в обычном порядке- старшим вперед. Хотя,... может я и усложняю.

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


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

Хотя,... может я и усложняю.

 

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

насадили свой регистр по переднему фронту клока. В результате убили чужую реализацию. И в добавок добились того, что при ресете на частоте 100 мГц часть разрядов устанавливается при временном моделировании в неопределенное состояние. Вы даже свое собственное моделирование не смотрите. Если VHDL не читаете, так хоть в RTL просмотрщик смотрите.

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


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

Aprox - а на чем Вы тестбенчи делаете?

AHDL их не поддерживает.... Неужели рисуете в "вэйформ редакторе"?

Да, рисую. И не вижу никакой жгучей необходимости осваивать другие методы. Лучшее- враг хорошего.

И насколько серьезные проекты Вы таким путем сделали?
Мне кажется да- достаточно серьезные. Первый был начат давно, когда у Altera еще не было даже Acex, не говоря уже про верилоги разные. Зато AHDL- уже был. Первым проектом была PCI-плата адаптивного экстрактора радилокационных сигналов на море для установки в оборудовании прибрежного базирования, усли вам это что-то говорит. Посмотреть можно здесь Теперь я просто сопровождаю древнее изделие и переписывать ему проект на современные языки проектирования - не вижу абсолютно никакой необходимости. Вторым проектом было изделие для вихретокового неразрушающего контроля специзделий нелинейными сигналами. Эта штука делалась уже на Acex, но верилогов по-прежнему еще не возникло на горизонте. Наконец, третьим проектом стал модуль управления для встраивания в аппаратуру связи. Его особенность Ethernet 1000Base-T и управление в стиле UDP-сервера. Этот модуль создавался для особо высокой производительности пакетирования и передачи данных в/из сеть по UDP/IP. Скоро выложу на сайт и покажу все в подробностях. Начинался данный проект на Cyclone. Верилоги уже были в ходу у народа. Я поинтересовался тогда, -чем же мне могут помочь эти новые языки проектирования? Сравнение меня не убедило, что надо тратить время на их освоение. Лучшее- враг хорошего. Короче, я отбросил сомнительные искусы и успешно завершил этот проект на AHDL, отладив его помодульно обычным вэйформ анализатором. И все работает, как это ни странно может показаться верилоговцам! Никаких переходов с Altera на Xilinx не планируется, как это ни странно может показаться апологетам переносимости. Короче- остаюсь на AHDL.

Кстати, поищите по вакансиям - много-ли надо специалистов со знанием AHDL? :rolleyes:

Буду благодарен, если найдете хоть одну ссылку от более-менее серьезного работодателя.

Мои работодатели ничего не понимают в проектировании FPGA. Им нужны работающие изделия. Поэтому вы не по адресу обратились в поисках работодателей.

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


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

ЗЫ. Скоро завершаем первый раунд. Жду предложений о модуле на второй. Мое предложение рассмотреть самый банальный ЦОС ный элемент, симметричный FIR фильтр на цепи сумматоров. Мою сторону, на начальном этапе, будет представлять вот этот код . Потом предлагаю рассмотреть FIR на МАС ячейках.

 

по-моему, в таком дизайне допускается та же принципиальная ошибка : Aprox возьмет и напишет lpm_dsp (lpm_fir) ну или что-то такое, и снова будет как-бы ничья

тут интересно бы действительно дизайн со сложной логикой, чтобы было сравнение, синтеза с высокоуровневого HDL и вставления готовых модулей в схематик/AHDL (я AHDL не знаю, пользовал в те времена схематик/ABEL :), ну а после смысла узнавать не было)

 

модули:

например, квадратный корень из 32-х (ну или еще лучше 64-х битного, а то нынче память на 8Гб не редкость :) ) инта

или целочисленное деление, 64-х битного на 32-х

и т.п.

вроде бы на это не всречались мегафункции

 

можно еще посчитать количество 1 в длинном (1024 битном или больше) регистре - задача кстати вполне практическая - xor между двумя регистрами и сумма совпадений (корреляция). тут, наверно можно на IFFT(FFT(in).*FFT(ref)) к мегафункциям скатится, но вроде не выгорит

 

еще можно всяческие LRU и прочие алгоритмы поиска (типа найти в массиве 3 максимума - такая тема даже была тут недавно)

 

и критерием брать не попугаев (МГц), а что-то типа кол-во_операций/(сек*потраченный_ресурс_ПЛИС)

как нормировать потраченный_ресурс_ПЛИС чего-то сразу не придумал - пусть будет 1, но важно не тактовая а количество операций за секунду

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


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

ГЗВ. И не надо лапшу на уши вешать, что вы набили mif файл на 512 вхождений в ручную. Даже для вас это слишком.
В автоматизации изготовления больших и сложных .mif файлов ничего особо хитрого нет. Я это многократно делал для нелинейных преобразований сигнала через ROM. Моя ошибка гораздо серьезнее. Дело в том, что представленный мною вариант кодера на ROM дает Running Disparity +-4. А требования в origin не более +-2. Поэтому, я снимаю своего "чемпиона" с дистанции. Советую и вам проверить RD, поскольку вы изобретаете какие-то новые алгоритмы.

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


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

Да, рисую. И не вижу никакой жгучей необходимости осваивать другие методы. Лучшее- враг хорошего.

 

Интересно, а сколько Вы времени потеряли на отладку PCI в вейформ-редакторе?

И сколько потом еще потратили на запуск железа?

И что бы Вы делали, если надо промоделировать например 1000 транзакций мастера на PCI?

Это-ж рисовать до пенсии ;-)

 

Делали, наверное PCI-target? На скольких материнках проверяли?

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


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

Интересно, а сколько Вы времени потеряли на отладку PCI в вейформ-редакторе?
Сравнительно недолго, около месяца. Тупо реализовал state-machine, которая в описании на PCI, и все практически сразу срослось.
И сколько потом еще потратили на запуск железа?
Если речь про PCI, то тоже около месяца.
И что бы Вы делали, если надо промоделировать например 1000 транзакций мастера на PCI?
Моделировать не надо, я просто запускал процесс DMA записи тестового свипа на железе и смотрел, возникнет ли exception. Паралельно записывал содержимое выделенного PnP участка памяти PC на диск. Потом запускал программу, которая анализировала правильность ввода тестовой последовательности. Все на реальном железе, никакого моделирования. Сказать, что все сразу получилось, нельзя. Основной затык разгребал с мастером в burst режиме, когда заканчивался Grant и LatencyTime. Там случалась коллизия на шине и PC зависал. Тем не менее, силой недюжего ума удалось победить.
Делали, наверное PCI-target? На скольких материнках проверяли?
Hет, делался оригинальный Master-Target на EPM3256 с возможностью загрузки основной FPGA непосредственно с винчестера. Проверял на одной материнке. Hо, судя по тому, что прошло уже несколько сотен инсталляций по всему миру и нареканий не поступало, то...сами понимаете.

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


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

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

насадили свой регистр по переднему фронту клока. В результате убили чужую реализацию. И в добавок добились того, что при ресете на частоте 100 мГц часть разрядов устанавливается при временном моделировании в неопределенное состояние. Вы даже свое собственное моделирование не смотрите. Если VHDL не читаете, так хоть в RTL просмотрщик смотрите.

Извините, но вы заглянули в .vwf файл тестового прогона? Я ведь специально его приложил в проекте, чтобы показать полную работоспособность the кодера на VHDL в окружении схем на AHDL. Ведь на практике данному кодеру не в одиночестве жить внтури FPGA. Дополнительные регистры к входам и выходам кодера - это специальный прием, чтобы узнать- как будет себя вести себя кодер, работающий по обеим фронтам СLK, в ахитектуре Altera, где все строится на LUT-ах с триггерами только по положительному фронту. Hапример, 10-бит параллельный выход кодера скорей всего в реальном проекте будет подсоединен к shift регистру для организации битового потока. А стандарт параллельной загрузки такого регистра- только по одному фронту CLK. Эквивалентом такого потребителя и является мой выходной регистр, который синтезатор AHDL реализует на базе lpm_dff. Hе поленитесь, загляните в результат прогона, файл .vwf , Все прекрасно работает, несмотря на два фронта внутри кодера.

 

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

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


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

...в ахитектуре Altera, где все строится на LUT-ах с триггерами только по положительному фронту...

 

Поясните...

 

 

Что мешает тактировать триггер отрицательным фронтом?

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


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

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

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

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

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

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

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

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

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

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