|
|
  |
Как можно оптимизировать код? |
|
|
|
Oct 18 2011, 13:40
|
Профессионал
    
Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082

|
Цитата(keeka @ Oct 18 2011, 16:23)  Как считаете, такой метод разработки заслуживает жизни? Или прошивки, полученные таким путем на порядок медленнее и объемнее написанных вручную? Такой метод все чаще используется - очень много времени экономит. Особенно эффективна связка матлаба с xilinx, собрал на симулинке модель из стандартных блоков, потом собрал эквивалент на блоках xilinx и все. Хотя есть одно НО - сгенеренный код не оптимален (не знаю как сейчас - учитываются ли особенности архитектуры) и при жестких требованиях площадь/частота все равно потребуется его править руками. При этом править, возможно, придется именно на уровне счетчиков/регистров, а в том что автоматически сгенерируется придется все равно разбираться. Поэтому резюме такое - метод хороший, но разбираться в HDL для создания именно эффективных схем все равно придется.
|
|
|
|
|
Oct 18 2011, 19:17
|
Знающий
   
Группа: Свой
Сообщений: 614
Регистрация: 12-06-09
Из: рядом с Москвой
Пользователь №: 50 219

|
Цитата(keeka @ Oct 18 2011, 16:23)  Мне на самом деле очень интересна тема автоматической генерации HDL-кода. Скажем, разработчик алгоритмов создал модель, к примеру в матлабе, отладил ее, а дальше HDL-Coder матлабовский генерит код, а разработчик уже отлаживает его вручную. Там же по сути можно код генерить для конкретной ПЛИС, в составе конкретной отладочной платы. Я давно занимаюсь этим вопросом, но пока не вдавался глубоко именно в реализацию в ПЛИС, больше разбирался, каким образом можно генерить код. Как считаете, такой метод разработки заслуживает жизни? Или прошивки, полученные таким путем на порядок медленнее и объемнее написанных вручную? По сути ведь если идеализировать такую ситуацию, разработчику вообще не обязательно уметь программировать. Лучше приведу пример из жизни: У нас вот практически все задачи крутятся вокруг цифровой обработки сигнала, однако, большую часть времени (95%) разработчики занимаются вовсе не ЦОСом. Сгенерировать цифровой фильтр хоть в матлабе, хоть в корегене - делов на 10 минут. Но сам по себе фильтр вещь в себе - данные для него нужно откуда-то взять, а выходные данные куда-то подать - а это высокоскоростные интерфейсы, где матлаб отдыхает. Таких слов как LVDS, DDR, SERDES, TrimodeEthernetMAC, PCIE, USB 2.0 - матлаб не знает. Также часто требуется работа с внешней памятью типа ZBT SRAM, SDRAM, DDR2 SDRAM и др. - тоже матлаб в ауте. Но даже типовые задачи ЦОС матлабу не всегда под силу: например, попробуйте создать DDS (синтезатор прямого цифрового синтеза) для генерации синуса с помощью ЦАП AD9739 с тактовой частотой 2.5ГГц (при том что максимальная тактовая частота в топовом Virtex6 - 500МГц). Ну а борьба с времянками - это вообще шаманство и пляски с бубном  .
|
|
|
|
|
Oct 19 2011, 07:41
|
Профессионал
    
Группа: Свой
Сообщений: 1 817
Регистрация: 14-02-07
Из: наших, которые работают за бугром
Пользователь №: 25 368

|
Цитата Хотя есть одно НО - сгенеренный код не оптимален (не знаю как сейчас - учитываются ли особенности архитектуры) и при жестких требованиях площадь/частота все равно потребуется его править руками. Возможно код не оптимален, но MATLAB дает несколько неоспоримых преемуществ. 1. Разработчику алгоритмов не нужно уметь программировать в VHDL вообще - то есть он может отладить алноритм вплоть до таймингов и синхронизации не лезя в код. 2. Отлаженный в МАТЛАБе код 100% работает в железе. (Относится к System Generator) 3. При моделировании разработчику доступен весь спектр тулбоксов Матлаба. Например мы используем Simpowersystems для моделирования электроники инверторов, с помощью симулинка отлаживаем алгоритмы контроллеров, а потом с помощью System Generator моделируем те же алгоритмы, но у же с учетом особенностей ПЛИС(задержки и ограничения чисел с фиксированной запятой) и затем тупо компилируем эти же алгоритмы в конечный битстрим. И все работает И четвертое - как минимум в 4 раза сокращается время разработки. Вот презентация еще 2005г. http://www.google.de/url?sa=t&source=w...o0FIeUnLmv9OpZg У нас уже 4-х летний опыт работы на Xilinx DSP System Generator, и уже не один проект на нем сделали и все работает в индустрии. Предыдущие утверждения справедливы для System Generator. Последние версии достаточно мощны - там тебе куча кодеров-декодеров и почти все корки представлены. Цитата Также часто требуется работа с внешней памятью типа ZBT SRAM, SDRAM, DDR2 SDRAM и др. - тоже матлаб в ауте. С SDRAM работаем прямо из Матлаба. Раньше пользовались внутренней памятью и ее стало не хватать. И мы подумали - почему бы не использовать внешний неиспользуемый банк. Чувак без единой строчки кода за 3 дня подключил все к матлабу. С Matlab Coder не работал, поэтому думаю там не все так хорошо.
|
|
|
|
|
Oct 19 2011, 12:25
|
Профессионал
    
Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082

|
Цитата(syoma @ Oct 19 2011, 11:41)  1. Разработчику алгоритмов не нужно уметь программировать в VHDL вообще - то есть он может отладить алноритм вплоть до таймингов и синхронизации не лезя в код. Каким образом Вы проверяете работоспособность на функциональном уровне? Только по симулинку? Тестбенчи вообще не пишете? Каким образом проверяется работоспособность с учетом всех задержек, просто не помню, чтоб симулинк позволял моделировать в формате sdf. Цитата 2. Отлаженный в МАТЛАБе код 100% работает в железе. (Относится к System Generator) Четыре года назад генерировал автоматически канал AWGN (матлаб2005), нетлист получился нерабочим - убил неделю, чтоб найти ошибку в нетлисте - оказалось индексы он попутал. Цитата 3. Особо добавить нечего, кроме того, что парнишка делал цифровой модем и таким вот автоматическим образом получил максимальную тактовую частоту 150МГц на virtex4, при этом требовалось 200. Вот эту вот модель я за неделю довел до 205МГц, при этом топовый модуль пришлось руками писать + 2 проблематичных БИХ фильтра полностью переписать вручную. И еще: в текущей моей работе приходится отлаживать некий коммутатор, который стыкуется с процессорами по некоему интерфейсу, вот каким "макаром" мне на матлабе описать этот самый процессор. От поставщика только описание на СИ некоторых функций. При этом дело обстоит не только с "моим" процессором, таких устройств много. В тулбоксе только стандартные и наиболее распространенные устройства.
|
|
|
|
|
Oct 19 2011, 12:57
|
Профессионал
    
Группа: Свой
Сообщений: 1 817
Регистрация: 14-02-07
Из: наших, которые работают за бугром
Пользователь №: 25 368

|
Конечно, Матлаб не универсальная штука и все промоделировать в нем нельзя. Пока можно сказать, что он хорошо подходит для моделирования алгоритмов DSP, не более. Автоматы состояний мы делаем в Xilinx StateCAD, а затем подключаем к модели через blackbox. Процессоры там тоже особо не промоделируешь. Но, кстати, это особо и не нужно. Например, ессно наш алгоритм DSP получает сигналы не напрямую с аналогового сигнала. В реальности там стоит АЦП, а АЦП надо еще тактировать и управлять. То есть целый драйвер нужен. Но в МАТЛАБЕ от этого можно абстрагироваться, просто подав Simulinkовский сигнал на преобразователь в фиксированную точку и все. Таким образом сигнал становится как-бы внутренним Плисовским сигналом. А драйвер АЦП давно отлажен и сделан как BSP в виде симулинковского блока в библиотеке. В итоге отлаженный алгоритм подключается к драйверу и генерится битстрим. Цитата Каким образом Вы проверяете работоспособность на функциональном уровне? Только по симулинку? Тестбенчи вообще не пишете? Каким образом проверяется работоспособность с учетом всех задержек К сожалению(или к счастью) с тестбенчами опыта не имел по вышеозначенным причинам, поэтому не совсем понимаю, зачем они нужны. В случае с System Generator все сводится к следующему. Все клоки Маталаб распределяет сам и дизайн полностью синхронный. Таким образом сигнал от одного регистра до следующего должен дойти за период клока. При моделировании в Симулинке регистровые задержки учитываются и по диаграмме можно увидеть, что данный сигнал задержан на столько то периодов. Далее есть такая функция - анализатор таймингов, которая комплирует полностью дизайн, пытается впихать его в ПЛИС и если вышеуказанное условие не выполняется - в Симулинке показывается цепь, которая содержит слишком длинную комбинаторную цепочку. В этом случае разработчик должен внести в нее регистры, увеличив задержки. При этом он продолжает моделирование и если надо корректирует дизайн, чтобы сохранялась исходная функция. Если тайминг проходит, то можно прошивать ПЛИС - гарантируется, что в этом случае функциональность ПЛИС будет идентична модели. ПС Кстати в следуюшем проекте мы начинаем использовать SERDES. Посмотрю, как их можно к Матлабу прикрутить
|
|
|
|
|
Oct 19 2011, 13:04
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 15-12-10
Из: Москва
Пользователь №: 61 640

|
А как вы относитесь к связке LabVIEW + PXI? Писать графический код в лабвью с помощью FPGA Module а потом его сажать в ПЛИС через FlexRIO. Простые вещи я так реализовывал, но более сложный код занимал кучу места. Правда я наверно коряво делал.
Сообщение отредактировал keeka - Oct 19 2011, 13:07
|
|
|
|
|
Oct 19 2011, 13:11
|
Профессионал
    
Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082

|
Согласен, для ЦОС матлаб подходит очень хорошо, но ключевая фраза у Вас здесь: Цитата(syoma @ Oct 19 2011, 16:57)  в Симулинке показывается цепь, которая содержит слишком длинную комбинаторную цепочку. В этом случае разработчик должен внести в нее регистры, увеличив задержки. При этом он продолжает моделирование и если надо корректирует дизайн, чтобы сохранялась исходная функция. Что сделать, если внести регистры не удается по алгоритму? БИХ фильтр к примеру, раз речь про ЦОС. Выкидывать его и ставить КИХ, который занимает кучу логики и не влазит? Или кристалл брать на спидгрейд выше? Вот тут и требуется знание языков, архитектуры конкретной ПЛИС и возможностей САПР.
|
|
|
|
|
Oct 19 2011, 13:22
|
Профессионал
    
Группа: Свой
Сообщений: 1 817
Регистрация: 14-02-07
Из: наших, которые работают за бугром
Пользователь №: 25 368

|
Цитата Что сделать, если внести регистры не удается по алгоритму? БИХ фильтр к примеру, раз речь про ЦОС. В Матлабе и так есть куча возможностей добиться оптимизации между скоростью и размерами. Например разработчик имеет выбор между полностью последовательными или параллельными реализациями, или что-то среднее. Опять же есть выбор, какие элементы ПЛИС использовать - DSP48 или лепить умножитель из логики и т.д. Память из чего BlockRAM или доморощеная. В общем выбор есть. Цитата Вот тут и требуется знание языков, архитектуры конкретной ПЛИС и возможностей САПР. А если все это знать, что еще тогда можно сделать с БИХ фильтром? Цитата А как вы относитесь к связке LabVIEW + PXI? У нас тут есть человек, который пробовал и эту связку и Altera DSP Builder. И я разговаривал с людьми, которые юзали Matlab (VHDL)Coder. И пока однозначный ответ - Xilinx System Generator по функциональности и эффективности пока всех их уделывает как минимум на голову. Многие модели, спокойно реализованные на System Generator невозможно было реализовать на DSP Builder или Coder. Преемуществом System Generator является то, что он заточен под конкретную архитектуру, и поэтому генерит не универсальный VHDL, а эффективно заточенный под конкретную FPGA. То есть использует на полную встроенные DSP48 и память, генерит корки, которые только может, организовует DCMы, как ему надо и т.д. Матлабовский кодер так полюбому не умеет.
|
|
|
|
|
Oct 19 2011, 13:44
|
Профессионал
    
Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082

|
Цитата(syoma @ Oct 19 2011, 17:22)  В Матлабе и так есть куча возможностей добиться оптимизации между скоростью и размерами. Например разработчик имеет выбор между полностью последовательными или параллельными реализациями, или что-то среднее. Опять же есть выбор, какие элементы ПЛИС использовать - DSP48 или лепить умножитель из логики и т.д. Память из чего BlockRAM или доморощеная. В общем выбор есть. Выбор то есть, только увидев "непроходящую" цепочку, неразбирающийся будет опытным путем дробить ее регистрами, а знающий архитектуру расчитает уровень слоев логики и выставит сразу оптимальный вариант. Цитата А если все это знать, что еще тогда можно сделать с БИХ фильтром? По разрядности коэффициентов можно заранее представить в какое кол-во умножителей выльется реализация. Подбором коэффициентов можно уйти от умножителей на сдвиги и сумматоры. Если взть один проблематичный фильтр и посмотреть его максимальную частоту, то она окажется как правило гораздо выше, чем если кристалл будет забит на 90% другой логикой. Можно отдельно его откомпилировать и вставить в готовый проект с сохранением всех временных характеристик. Помимо этого существует куча дополнительных параметров кроме "оптимизация по быстродействию", включающая в себя дублирование регистров и комбинаторики, ограничение по fan-out, переразводка с учетом "неуложившихся" путей, замены мультиплексоров. Можно некоторые сигналы даже на глобальные шины вешать.
|
|
|
|
|
Oct 19 2011, 14:14
|
Профессионал
    
Группа: Свой
Сообщений: 1 817
Регистрация: 14-02-07
Из: наших, которые работают за бугром
Пользователь №: 25 368

|
Ваша логика ясна, все понятно. Но так же и понятно то, что я по сравнению с Вами - ламер в ПЛИСах. Но такие средства дают возможность использовать FPGA таким ламерам. Ну и пусть у меня дизайн заработает на 50МГц, а не на 200. В моей работе(наверняка у Вас по другому) главная цель не выжать из ПЛИСины все возможности, а получить рабочий проект в отведенное время и еще и с читаемой документацией (еще одна заковырка для HDL, не так ли?). Поэтому мы берем FPGA в 2 раза больше, да спидгрейд максимальный и задаемся целью достигнуть 50МГц и вперед.. Я вообще считаю, что ПЛИС - это продукт не для массовости, а именно для приложений где цена не является главным фактором, а главное - быстрота и эффективность разработки и гибкость по функциональности. Если для массовости, я бы взял DSP проц за сколько-то там 20-50$?, и мутил бы все там.
|
|
|
|
|
Oct 19 2011, 14:44
|
Профессионал
    
Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082

|
Цитата(syoma @ Oct 19 2011, 18:14)  Ваша логика ясна, все понятно. Дак я не хотел никого обидеть, ранее писал о том, что штука полезная и в последнее время используется все чаще. Сам занимался разработкой цифровых модемов и, естественно, начинал с матлабовской модели на симулинке. Все красиво, понятно и быстро, но используется в основном только на начальном этапе/нектритичных условиях. Да и коргенератор от xilinx не используешь для той же altera. Цитата Я вообще считаю, что ПЛИС - это продукт не для массовости, а именно для приложений где цена не является главным фактором, а главное - быстрота и эффективность разработки и гибкость по функциональности. Тут я думаю с Вами есть кому поспорить кроме меня, от себя одно - есть области, где ПЛИС или ASIC - незаменимы. А насчет частоты пример - у меня в последнем проекте логика работает на 500МГц и 250МГц, где ж я спидгрейт выше возьму, там и так максимальная 600  Ранее, кстати, в какой-то теме писал что снижение спидгрейта снижает цену на 20% при одинаковых технологиях, представьте, что делается какой-нибудь девайс в 100000 экземплярах.
|
|
|
|
|
Oct 22 2011, 05:32
|
Местный
  
Группа: Свой
Сообщений: 474
Регистрация: 20-01-09
Из: НН
Пользователь №: 43 639

|
Немного запоздал с линком, вот только что нарыл. Это самопальная дока на основе документации к синтезатору Xilinx xst. В файле с картинками разжеваны все примитивы триггеры, счетчики, регистры и так далее. Каждый компонент описан на VHDL, а рядом картинка что получается в результате в ПЛИС. Очень советую для правильной постановки мозгов в самом начале пути. Кому интересно есть два продолжения, второй документ, как самому написать процессор, третий документ, как самому написать параллельный конвейер для процессора, ко всем докам в принципе есть архивы с готовыми и рабочими проектами. Опять же кому интересно дам линки. Ну а пока первый линк для топик стартера. Реально расширяет границы сознания https://rapidshare.com/files/425586106/Learning_VHDL.pdf
--------------------
пользователь отключен
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|