|
MATLAB R2012a HDL Code Generation, непонятки с типами, знаками, размерностями |
|
|
|
Sep 17 2012, 13:25
|
Группа: Участник
Сообщений: 14
Регистрация: 29-09-11
Пользователь №: 67 465

|
Написал простую функцию, расчет положения при падении объекта в воздухе. На вход подаются текущие координаты (in_x, in_y), текущая скорость (in_spdx, in_spdy), масса объекта(mass), коэффициенты для горизонтального/вертикального сопротивления воздуха (R_x, R_y) и частота дискретизации (sample_time). Сначала вычисляю конечные составляющие скорости: вертикальную составляющую с учетом силы тяжести и коэффициента сопротивления воздуха, и вертикальную просто с учетом коэффициента сопротивления воздуха. Потом вычисляю координаты, при этом беру скорость как среднее арифметическое от начальной/конечной скоростей. Это для понимания ситуации, код MATLAB привожу ниже: Код function [out_x, out_y, out_spdx, out_spdy] = par_model(in_x, in_y, in_spdx, in_spdy, mass, R_x, R_y,sample_time) out_spdx = in_spdx + R_x*in_spdx*in_spdx/mass; out_spdy = in_spdy + ((R_y*in_spdy*in_spdy/mass)-9.8); out_x = in_x + (out_spdx+in_spdx)*sample_time/2.0; out_y = in_y + (out_spdy+in_spdy)*sample_time/2.0; end Соответственно, тестовое окружение для него работает следующим образом. Беру большие массивы нулей, даю в первом значении начальные условия, задаю коэффициенты и массу, и последовательно забиваю массивы числами пока объект не достигнет земли (т.е. пока текущая координата y(i) не станет отрицательной или равной нулю) либо пока не кончится массив. Код ниже, содержит два теста: Код % INIT ARRAYS x = zeros(10000,1,'double'); y = zeros(10000,1,'double'); vx = zeros(10000,1,'double'); vy = zeros(10000,1,'double');
% %TEST ONE % H = 1000;
x(1) = 2; y(1) = H; vx(1) = 2; vy(1) = 0; K_x = -0.001; K_y = 0.001;
m = 1; sample_time = 0.002;
i = 1;
while y(i)>=0 && i<=10000 [x(i+1), y(i+1), vx(i+1), vy(i+1)] = par_model(x(i), y(i), vx(i), vy(i), m, K_x, K_y, sample_time); i = i + 1; end
subplot(2,1,1); plot(x(1:i)+1i*y(1:i));
% %TEST TWO % H = 100;
x(1) = 4; y(1) = H; vx(1) = 2; vy(1) = 0; K_x = 0.0001; K_y = 0.003;
m = 1; sample_time = 0.002;
i = 1;
while y(i)>=0 && i<=1000 [x(i+1), y(i+1), vx(i+1), vy(i+1)] = par_model(x(i), y(i), vx(i), vy(i), m, K_x, K_y, sample_time); i = i + 1; end
subplot(2,1,2); plot(x(1:i)+1i*y(1:i)); Теперь собственно описание проблемы: Попытка сгенерировать для этого кода вариант с фиксированной точкой приводит к следующей ошибке: -------------- output variable : out_x -------------- Matrix dimensions must agree. При этом графики строятся, но на них показан бред - объект вместо того, чтобы плавно падать, стремительно взлетает ввысь. Моделирование исходного кода заканчивается успешно и без ошибок/предупреждений. Еще выяснилось, что: Деление пополам (при вычислении среднего арифметического) кодер заменяет на смещение на разряд, при этом благополучно игнорируя знаковость. А поскольку для вертикальной координаты делимое, как правило, отрицательно - ясно почему взлетает объект. Также выяснилось, что масса благополучно округляется с единицы на ноль, в результате чего моделирование готового fixed point тестового окружения приводит к куче ошибок типа деления на ноль. Самое печальное, что попытки зафиксировать типы для значений не решают проблемы, выставлял для всех переменных ufix16_En24, ставил для массы целочисленный тип, но все равно в результатах получался бред. Есть у кого предложения по решению этих проблем?
Сообщение отредактировал LiNED - Sep 17 2012, 13:53
|
|
|
|
|
 |
Ответов
(1 - 48)
|
Sep 18 2012, 06:11
|
Группа: Участник
Сообщений: 14
Регистрация: 29-09-11
Пользователь №: 67 465

|
Поставил 2.0001 вместо 2, строго задал fraction length побольше, теперь хоть он нормально делит, и ошибка не такая большая. Но все равно это только костыль...
|
|
|
|
|
Sep 19 2012, 04:55
|

Местный
  
Группа: Свой
Сообщений: 401
Регистрация: 6-10-04
Из: Воронеж
Пользователь №: 806

|
Чистый нэтивный не пользую. У Xilinx явно более высокое качество IP CORE. Проекты - ну например - блоки 802.16 e, приемник и передатчик DVB-T, UMTS, LTE, различные широкополосные цифровые приемники и пеленгаторы , со-вычислители . А что все про фильтры  . Все что Вы сумеете математически сформулировать можно сделать и очень быстро(можно вставки делать и на m языке и на vhdl verilog). Просто нет доступа у некоторым скоростным специфическим блокам и сj множеством клоков определенный опыт нужен.
|
|
|
|
|
Sep 19 2012, 05:31
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(litv @ Sep 18 2012, 22:55)  Проекты - ну например - блоки 802.16 e, приемник и передатчик DVB-T, UMTS, LTE, различные широкополосные цифровые приемники и пеленгаторы , со-вычислители . А что все про фильтры  . Все что Вы сумеете математически сформулировать можно сделать и очень быстро(можно вставки делать и на m языке и на vhdl verilog). Спасибо за ответ. А про вставки, если m код, то это Embedded Function, а если RTL то это какой компонент ? и моделировать его через мосты к симулятору ?
--------------------
|
|
|
|
|
Sep 19 2012, 07:26
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(litv @ Sep 19 2012, 01:31)  Обратные связи работают - но есть нюансы. Задержки из страссированной ПЛИС можно посмотреть прямо в Simulink. Изменение задержек конечно же исключено. Все схемы конвейерные , в чем проблемы? Вот простой пример, собрал блок, который работает при отношении тактовой к символьной ну положим 8 раз, можно использовать многотактную обработку. Матлаб учтет это обстоятельство и сделает латентность ну положим 6 тактоов. Но потом, например, я увеличил порядок фильтра в 2 раза, то матлаб останется в тех же 6 ти тактах или сам увеличит количество слоев логики, сделает латентность ну положим 8 и тихо про это промолчит ? Или другой пример, написал я код на m языке, который должен исполняться за 2 такта, а при синтезе матлаб решил его разогнать по тактовой, напихал регистров и сделал его исполняющимся за 4 такта. Такая ситуация возможна ?
--------------------
|
|
|
|
|
Sep 19 2012, 08:15
|

Местный
  
Группа: Свой
Сообщений: 401
Регистрация: 6-10-04
Из: Воронеж
Пользователь №: 806

|
Цитата(des00 @ Sep 19 2012, 11:26)  Вот простой пример, собрал блок, который работает при отношении тактовой к символьной ну положим 8 раз, можно использовать многотактную обработку. Матлаб учтет это обстоятельство и сделает латентность ну положим 6 тактоов. Но потом, например, я увеличил порядок фильтра в 2 раза, то матлаб останется в тех же 6 ти тактах или сам увеличит количество слоев логики, сделает латентность ну положим 8 и тихо про это промолчит ?
Или другой пример, написал я код на m языке, который должен исполняться за 2 такта, а при синтезе матлаб решил его разогнать по тактовой, напихал регистров и сделал его исполняющимся за 4 такта. Такая ситуация возможна ? Вообще фраза МАТЛАБ промолчит как бы .... Simulink это система моделирования - любое Ваше изменение во первых видно при моделировании . И можно извлечь VHDL и перемоделировать в моделсиме (если не верите  ). Про фильтр - у него есть выход готовности данных. Хотя его задержку можно посчитать и в уме. При проектировании фильтров используются IP core с подробным описанием, в том числе и latency. Все решает Ваше задание для корки. Про второй вопрос про m - файл ситуация невозможна. Ну как бы работали сложные проекты под полностью забитые virtexы - если бы задержки "разгонялись" ??? сами , ага в state machine  ???? Просто надо начать работать - появится понимание нюансов.
|
|
|
|
|
Sep 19 2012, 09:09
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(litv @ Sep 19 2012, 03:15)  Вообще фраза МАТЛАБ промолчит как бы .... Simulink это система моделирования - любое Ваше изменение во первых видно при моделировании . И можно извлечь VHDL и перемоделировать в моделсиме (если не верите  ). Про фильтр - у него есть выход готовности данных. Хотя его задержку можно посчитать и в уме. При проектировании фильтров используются IP core с подробным описанием, в том числе и latency. Все решает Ваше задание для корки. Про второй вопрос про m - файл ситуация невозможна. Ну как бы работали сложные проекты под полностью забитые virtexы - если бы задержки "разгонялись" ??? сами , ага в state machine  ???? Просто надо начать работать - появится понимание нюансов. Хмм, IP корки мне не интересны. Мне интересен натурный HDL кодер. На демонстрации которую матлабовцы показывали по россии, конвейеризация m файлов выглядела так, вместо a = b написали a1 = b, a = a1 (без каких либо квалификаторов и тегов) и получили прирост тактовой в ~5 раз, за счет конвейризации и увеличения латентности на 1 такт. При этом для моделирования этого m файла в матлабе, это "пустые" операции и задержки не будет. Т.е. модель и железо тут разошлись.
--------------------
|
|
|
|
|
Sep 19 2012, 13:42
|
Участник

Группа: Участник
Сообщений: 19
Регистрация: 30-01-10
Из: Таганрог
Пользователь №: 55 160

|
Цитата Можно взять Simulink и вставить как блок-модули вашу логику а место где деление - вставить как Verilog файл. Помниться мы так делали когда нас не устраивали ньюансы laughing.gif правда много вставлять Verilog-а не получалось - жаба падала, но в ключевых моментах это нам помогло. Ну это костыли еще посуровее будут, получается надо препарировать модель в местах деления пополам, такое зверство над моделью  Безусловно, мне как начинающему будет полезно поманьячить лишний раз, но для чего-то серьезного надо бы уходить от подобной практики. Послушать отзывы так попытки использования MATLAB для мало-мальски эффективной HDL-генерации пока что есть утопия и лучше сразу писать в HDL. А так радужно это дело мне описывали, мол, написал функцию - она сразу так красиво сама в код заделалась и хоть сразу компиль и зашивай в ПЛИСину или разводи в ASIC, только настройки успевай выставлять. А оказалось что эта система даже об элементарную арифметику уже спотыкается =_=
|
|
|
|
|
Sep 20 2012, 07:49
|
Знающий
   
Группа: Свой
Сообщений: 859
Регистрация: 7-04-05
Из: Санкт-Петербург
Пользователь №: 3 943

|
Цитата(des00 @ Sep 18 2012, 19:32)  Народ, те кто применяет симулинк и матлаб HDL кодеры для прототипирования и разработки, расскажите свои результаты. А то есть у меня проект, хочу прогнать его через сквозное проектирование в симулинке, но вот стоит ли идти до получения хдл кода ? Советую посмотреть в сторону synopsys synphony model compiler (это бывший synplify dsp). Примерный эквивалент xilinx system generator или altera dsp builder, но без привязки к конкретному вендору.
--------------------
"Человек - это существо, которое охотнее всего рассуждает о том, в чем меньше всего разбирается." (с) С.Лем
|
|
|
|
|
Sep 20 2012, 19:29
|
Знающий
   
Группа: Свой
Сообщений: 859
Регистрация: 7-04-05
Из: Санкт-Петербург
Пользователь №: 3 943

|
Цитата(des00 @ Sep 20 2012, 12:43)  хмм, а они уже довели свой инструмент до ума ? он появился года 2 назад, но как то тишина была с тех пор. Да вроде работает. Моделирует, генерит hdl, который потом синтезирует синплифай. Даже с-модели делает. Вопрос в том, подойдет ли он для Ваших задач. Вот здесь я писал, как можно взять поиграться: http://electronix.ru/forum/index.php?showtopic=104839ps вообще-то synplify dsp появился лет 7-8 назад, так что время отладить немножко было.
--------------------
"Человек - это существо, которое охотнее всего рассуждает о том, в чем меньше всего разбирается." (с) С.Лем
|
|
|
|
|
Sep 24 2012, 17:38
|
Частый гость
 
Группа: Свой
Сообщений: 166
Регистрация: 7-09-05
Из: Москва
Пользователь №: 8 340

|
Попробую повыступать в защиту HDL Code Generation в Simulink и использования его для проектирования ПЛИС. Здесь пишу скорее не топикстартеру, а людям, начавшим обсуждать Simulink HDL Coder Цитата(ИльяКи @ Sep 19 2012, 16:42)  Послушать отзывы так попытки использования MATLAB для мало-мальски эффективной HDL-генерации пока что есть утопия и лучше сразу писать в HDL. А так радужно это дело мне описывали, мол, написал функцию - она сразу так красиво сама в код заделалась и хоть сразу компиль и зашивай в ПЛИСину или разводи в ASIC, только настройки успевай выставлять. А оказалось что эта система даже об элементарную арифметику уже спотыкается =_= Вот вообще с Вами не согласен. Никакой утопии нет, нужно просто "уметь готовить". Уже лет 5 наверное использую HDL Coder для Simulink'а для разработки проектов ПЛИС (об этом несколько раз писал на форуме, правда не в этом разделе). Именно нативный, без всяких вендорных фишек типа System Generator или DSP Builder (хотя если речь идет о серьезном ЦОС, то лучше конечно использовать их для получения максимального быстродействия в кристалле) Цитата(des00 @ Sep 19 2012, 07:33)  Ну т.е. что кроме фильтров вы генерировали с матлаба, использовали симулинк или m файлы, какое по вашему качество реализации получилось ? Интересует не столько Xilinx/Altera DSP Builder, а чистый нативный HDL кодер. Да много чего генерировал, полноценные большие проекты делал в Симулинке, потом выход на VHDL/Verilog. Качество реализации зависит от степени приложения мозгов в проектировании. Если рассматривать это средство как инструмент для домохозяек и "бездумно" делать модель, то и код будет соответствующий. В случае же когда при проектировании есть понимание во что в ПЛИС превратится та или иная конструкция в модели, то все получается нормально. Да, возможно найдутся случаи, когда руками получится оптимальнее (площадь, время, ...) но у меня такого пожалуй не было. Да и не этим (не только этим) ценен для меня такой метод проектирования. Чтобы не повторяться можно почитать вот тут немного.
|
|
|
|
|
Sep 24 2012, 18:30
|

Гуру
     
Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329

|
Цитата(ИльяКи @ Sep 19 2012, 16:42)  Ну это костыли еще посуровее будут, получается надо препарировать модель в местах деления пополам, такое зверство над моделью  Безусловно, мне как начинающему будет полезно поманьячить лишний раз, но для чего-то серьезного надо бы уходить от подобной практики. На счёт препарирования - из того что видел, такая метода позволяет существенно сократить время на разработку когда нарисовался какой то глюк через криворукость кодера или свою (или скорость не дотягивает), времени разбираться нет потому что нужно на "позавчера" и оно всё работает. Просто, как было сказано, нужно иметь представление о вн. структуре алгоритма, тогда такие "препарации" будут не очень болезненными, ну или представлять как оно может быть приблизительно реализовано на камне - тогда ещё проще
|
|
|
|
|
Sep 28 2012, 15:37
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(Tue @ Sep 24 2012, 12:38)  Да много чего генерировал.... Спасибо за развернутый ответ, сгонял на конференцию, пообщался, посмотрел как люди работают, был несколько шокирован возможностями. В общем да, его нужно уметь готовить. Щас сижу изучаю синтез Digital Filter, блин, он даже оптимизирует csd умножители почти как человек. В планах собрать простой демодулятор и проверить ресурс, сравнить со своими наработками. Один большой минус, цена..... PS. Проверил валидацию задержек, на примере простых Digital Filter, теперь понятно как сделать cycle-accurate модель. Извините за глупые вопросы в начале %)
--------------------
|
|
|
|
|
Oct 1 2012, 18:16
|
Частый гость
 
Группа: Свой
Сообщений: 166
Регистрация: 7-09-05
Из: Москва
Пользователь №: 8 340

|
Цитата(des00 @ Sep 28 2012, 19:37)  ...сгонял на конференцию.... А есть какие-нить материалы в электронном виде ?
|
|
|
|
|
Oct 4 2012, 12:55
|
Профессионал
    
Группа: Свой
Сообщений: 1 817
Регистрация: 14-02-07
Из: наших, которые работают за бугром
Пользователь №: 25 368

|
Хочу написать, как пользователь Xilinx System Generator, сравнение с HDL Coder. Работаю на нем уже 5 лет. В нем полностью без VHDL сделана real-time model управления 3-х-фазным IGBT инвертором со всей защитой, автоматикой и векторным управлением. Все крутится на Spartan-3. За все время - глюков было очень мало. Сейчас хотим еще больше начать использовать Матлаб и они нас уламывают использовать ихнюю автоматическую генерацию кода - так как мы используем и процессоры и ПЛИС для управления системами. Но пообщавшись с ними (а моя фирма - key account для Mathworks) пока остановились только на Real-time Embedded coder для процессоров - тут спору нет - хорошая штука и генерит код то, что надо. Но по HDL Coderу очень много вопросов. Во первых модель все-равно надо приводить в фиксированную точку и играться с латентностью, как и в XSG - хотя у Матлаба есть интересные визарды, которые должны этот процесс ускорить. Но в конце концов идеала - чтобы человек вообще без знаний ПЛИС мог создавать генерируемый код - тут тоже не добиться. Кстати насчет латентности Цитата Мне интересен натурный HDL кодер. На демонстрации которую матлабовцы показывали по россии, конвейеризация m файлов выглядела так, вместо a = b написали a1 = b, a = a1 (без каких либо квалификаторов и тегов) и получили прирост тактовой в ~5 раз, за счет конвейризации и увеличения латентности на 1 такт. При этом для моделирования этого m файла в матлабе, это "пустые" операции и задержки не будет. Т.е. модель и железо тут разошлись. Это и есть фишка HDL Coderа. Но в этом скорей всего и его проблема. В XSG все четко - латентность программист сам задает для каждого блока и она моделируется. Если заданы нереальные значения (куча логики без регистров), то железо просто не разведется или будут огромные варнинги. Но если все развелось - то работать будет четко, как и модель. Если не развелось, то можно увидеть критичиские пути, но гонку сигналов каждый должен моделировать сам. Так что такой гибкости, как в HDL coder - там нет. Во-вторых HDL Coder не будет работать со специфичискими ресурсами, типа DSP48, а все будет делать из логики. С другой стороны - можно использовать нативный Stateflow для автоматов - нас это очень привлекает. Третья - пока основная проблема - HDL Coder в отличии от XSG не поддерживает работу в составе System-on-Chip - то есть если сгенерированый код будет частью большого проекта с софтпроцессором, который должен иметь возможность обмениваться данными с матлабовской системой. Фактически такого механизма нет вообще. А он однозначно нужен для параметризации и т.д. В XSG все аккуратно сделано через двухпортовую память и шину данных с драйверами и всем-всем. Ну и в последнюю очередь - цена. За HDL Coder + FPT + еще что-то из тулбоксов надо отдать 15k€. А к нему все равно ISE нужен. А если посчитать чистую стоимость XSG - получается в районе 900$. В итоге мы пока остаемся на XSG. Кстати у меня Матлаббер уже умудрился PCIе корку в XSG дизайн всунуть, и как ни странно - она работает. Цитата(Tue @ Oct 1 2012, 20:16)  А есть какие-нить материалы в электронном виде ? У меня есть презентация HDL Coder - могу выложить на ФТП
|
|
|
|
|
Oct 26 2012, 06:14
|
Частый гость
 
Группа: Свой
Сообщений: 165
Регистрация: 26-02-10
Из: Москва
Пользователь №: 55 683

|
Цитата(syoma @ Oct 4 2012, 15:55)  Хочу написать, как пользователь Xilinx System Generator, сравнение с HDL Coder. Работаю на нем уже 5 лет. В нем полностью без VHDL сделана real-time model управления 3-х-фазным IGBT инвертором со всей защитой, автоматикой и векторным управлением. Все крутится на Spartan-3. За все время - глюков было очень мало. Сейчас хотим еще больше начать использовать Матлаб и они нас уламывают использовать ихнюю автоматическую генерацию кода - так как мы используем и процессоры и ПЛИС для управления системами. Но пообщавшись с ними (а моя фирма - key account для Mathworks) пока остановились только на Real-time Embedded coder для процессоров - тут спору нет - хорошая штука и генерит код то, что надо. Но по HDL Coderу очень много вопросов. Во первых модель все-равно надо приводить в фиксированную точку и играться с латентностью, как и в XSG - хотя у Матлаба есть интересные визарды, которые должны этот процесс ускорить. Но в конце концов идеала - чтобы человек вообще без знаний ПЛИС мог создавать генерируемый код - тут тоже не добиться. Кстати насчет латентности
Это и есть фишка HDL Coderа. Но в этом скорей всего и его проблема. В XSG все четко - латентность программист сам задает для каждого блока и она моделируется. Если заданы нереальные значения (куча логики без регистров), то железо просто не разведется или будут огромные варнинги. Но если все развелось - то работать будет четко, как и модель. Если не развелось, то можно увидеть критичиские пути, но гонку сигналов каждый должен моделировать сам. Так что такой гибкости, как в HDL coder - там нет.
Во-вторых HDL Coder не будет работать со специфичискими ресурсами, типа DSP48, а все будет делать из логики. С другой стороны - можно использовать нативный Stateflow для автоматов - нас это очень привлекает. Третья - пока основная проблема - HDL Coder в отличии от XSG не поддерживает работу в составе System-on-Chip - то есть если сгенерированый код будет частью большого проекта с софтпроцессором, который должен иметь возможность обмениваться данными с матлабовской системой. Фактически такого механизма нет вообще. А он однозначно нужен для параметризации и т.д. В XSG все аккуратно сделано через двухпортовую память и шину данных с драйверами и всем-всем.
Ну и в последнюю очередь - цена. За HDL Coder + FPT + еще что-то из тулбоксов надо отдать 15k€. А к нему все равно ISE нужен. А если посчитать чистую стоимость XSG - получается в районе 900$. В итоге мы пока остаемся на XSG. Кстати у меня Матлаббер уже умудрился PCIе корку в XSG дизайн всунуть, и как ни странно - она работает.
У меня есть презентация HDL Coder - могу выложить на ФТП Очень хотел бы увидеть презентацию. я общался с этим толковым человеком с софтлайна, и он мне около часа затирал как прекрасно матлаб генерит код любой сложности причем и HDL и C, просто никто не умеет правильно галочки расставлять в настройках. Хотелось бы узнать как же правильно их расставлять)
|
|
|
|
|
Oct 30 2012, 07:30
|
Профессионал
    
Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942

|
Мы перевели разработку модема на рельсы модельно-ориентированного проектирования (Simulink, Matlab). В железе еще не проверяли, но по тактовым, эффективности и т.п. соизмеримо с ручным кодированием. По эффективности вылавливания глюков и по качеству системного уровня альтернативы не вижу.
Если по HDL-кодеру еще есть вопросы, то, например, Си-код генерируется совершенно замечательно.
Такой подход особенно полезен тем, кому надо будет проходить сертификацию по DO или КТ.
Да и Матлаб со своими генераторами уже не тот, что был даже еще год назад.
Насчет качества HDL и Си кода. Стало понятно, что необходимо хорошо разобраться что и как делает Матлаб из вашей модели. Все сам и красиво по волшебному нажатию кнопки он, конечно, не сделает.
|
|
|
|
|
Oct 30 2012, 13:05
|
Профессионал
    
Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942

|
Цитата(petrov @ Oct 30 2012, 16:04)  Если всё это вручную детально рисовать в симулинке, то в чём отличие от разработки цифровой схемы в схематике? Исключительно правильный вопрос. По большей части проектирование в Simulink, при условии, что Вы опускаетесь на "вентильный" уровень мало чем отличается от схематика. Я бы даже сказал, что это своего рода возврат обратно к методу схематичного проектирования. И тем не менее. 1. Появляется вся мощь матлаба с точки зрения окружения, моделирования физических процессов, эквивалентных трасс, каналов, и всего многообразия методов и средств моделирования. Нечто похожее пришлось бы творить на си и интегрировать через PLI и т. п. Или я чего-то не знаю. Например, у Вас готов модем, но нет помехозащиты, необходимой для проверки или предполагаемой в будущем. Цепляете ее и всё. Даже не перечислишь всех достоинств. Матлаб он и есть матлаб. 2. Появляется возможность избежать двойной работы, ибо моделирование Вы, насколько я понимаю, все равно проводите в матлабе. Например, изменили модель, лезем искать в код, меняем код. Потом еще подправили модель, что-то в ней уточнили, переписываем значительный участок кода. Работа x2. 3. Приобретаем возможность трассировать требования на Вашу модель. 4. Если требуется сертификация по разным авиационным стандартам (KT, DO), то с инструментами матлаба пройти сертификацию будет легче. Имеется в виду генерация отчетов, трассировка требований к модели и обратно, кодогенератор, не требующий сертификации (только квалификация). Могу ошибаться, но и код, созданный кодогенератором не требует сертификации (только сама модель). 5. Наконец, никто Вам не мешает тонкие вещи вынести в чистый hdl и подключить тонко настроенный и отлаженный модуль к своей модели. При этом сохранятся все достоинства модельно-ориентированного проектирования, о которых сказал выше. Более того, интерфейсные ядра, процессоры и т.п. имхо должны проектироваться так, как и проектируются. В Симулинк лучше выносить обработку сигналов. Это очевидные вещи выше кто-то уже писал. Мы только встали на этот путь ~три месяца назад, но уже готовы значительные части демодулятора, закончен модулятор. В железе проверим, тогда будет понятно.
Сообщение отредактировал x736C - Oct 30 2012, 13:26
|
|
|
|
|
Oct 30 2012, 15:29
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(petrov @ Oct 30 2012, 06:04)  Отпишите пожалуйста в чём там соль, пока непонятно. Взять например FFT, в симулинке это просто большая комбинационная схема, что за искусственный интеллект автоматически разобьёт это на оптимальное количество последовательных бабочек и блоков памяти. Если всё это вручную детально рисовать в симулинке, то в чём отличие от разработки цифровой схемы в схематике? Пока я крутил только 2 вещи : Digital Filter и Viterbi Decoder. Могу ответить за них : 1. Когда крутил Digital Filter, поставил ему реализацию на цепи сумматоров (вроде инверсная реализация называется) и использование константных умножителей. Когда полез смотреть код, то увидел вполне читаемый код, в котором регистры были на своем месте, логика на своем. При этом производиться реализация умножения на битовом уровне (в столбик) и оптимизация умножения на константы (например вместо умножения на 7, он делает сдвиг на 3 и -1). При этом в параметрах генерации этого фильтра есть настройки : конвейризация входа/выхода/логики. Когда конвейризируем вход/выход он добавляет туда регистры, когда логику, он, ЕМНИП вставляет регистры в умножители, дробя на равномерные слайсы. Если же этот фильтр поставить в систему и задействовать Sharing Factor, задав например что тактовая в 2 раза выше символьной, то он начнет делать многотактный фильтр, если Streaming Factor, то начнет на вход одного филтьра мультиплексировать 2 разных потока (канала). Задержку же фильтра можно учесть в модели, сделав что-то вроде back annotation, который сам генерит фильтр и добавляет нужное кол-во регистров. 2. Когда крутил Viterbi Decoder, то сначала крутил demos в 2007, он там сделан на рассыпухе и на m файлах. В этих демках все в ручную : нужна конвейризация - ставим ручками регистр. Но большой плюс, что в матлабе размерность и типы данных могут быть легко изменены, что в витерби, с его обработкой массивов сплошь и рядом. Сравнивал его с параметрами Altera Viterbi Decoder. Корректного сравнения не получилось, т.к. в моделях реализован Register Traceback, а у Altera RAM Traceback. Но в 2012b есть компонент Viterbi Decoder HDL optimized. Когда я взял его и собрал, то он оказался по ресурсу меньше альтеровского, при этом выдает нормальный читаемый код, сам подбирает разрядности и т.д. и т.п. На этом отложил изучение. Не до конца понял как он делает многотактную обработку и какие handshake использует. Обработку по clockenable не проверял, т.к. не всегда есть возможность делать clockenable дерево, а хотелось бы пропустить его через цепочку регистров. Но код после него, абсолютно читаемый, иерархия сохраняется. Можно загнать в симулятор и посмотреть что к чему. ЗЫ. Открытие для меня было в 2012б наличие demos где показан синтез HDL кода с использованием multicycle paths. Как бы где матлаб, а где плисоводная времянка ...... %) ЗЗЫ. Много примеров по генерации сделано на m языке, что у меня привело к ощущению того, что mathworks просто с xilinx/altera не договорились в свое время, плюнули на их нежелание делать высокоуровневый синтез, набрали хорошую команду и сделали свой синтезатор. Как говорилось в одном старом фильме "Чувствуется рука создателя", когда смотришь на сгенерированный код %))
--------------------
|
|
|
|
|
Oct 30 2012, 16:13
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(petrov @ Oct 30 2012, 09:55)  Т. е. это просто корки параметризируемые которые можно к симулинк модели подключить? Меня интересует разработка произвольной сложной цифровой схемы, которая ни в какие корки не вписывается, есть ли там нечто, что позволяет уйти от написания ручками RTL или это будет тот же схематик вид сбоку? хмм, толи я объясняю не так, то ли одно из двух. найдите файл ..\toolbox\hdlcoder\hdlcoderdemos\hdlcoderviterbi.mdl в 2007а он точно был, вот это дает синтезируемый рабочий вариант. по вашему это достаточно произвольная сложная цифровая схема? а вот краткий список того что есть синтезируемого в демках 2012б Код AES.mdl dct8_fixed.mdl hdlArcCosine.mdl hdlArcCosineSetting.m hdlArcSine.mdl hdlArcSineSetting.m hdlCartesian2Polar.mdl hdlcodercfir.mdl hdlcodercpu.mdl hdlcoderfdtd.mdl hdlcoderfft.mdl hdlcoderfftdit.mdl hdlcoderfirram.mdl hdlcodergcd.mdl hdlcoderlms.mdl hdlcodermimo.mdl hdlcoderramrom.m hdlcoderrecon.mdl hdlcoderrecon2.mdl hdlcoderrecon2_m.m hdlcoderreconcmds.m hdlcoderrecon_m.m hdlcoderrom.slx hdlcodervectorlms.mdl hdlcoderviterbi.mdl hdlcoderviterbi2.mdl hdlcoder_aes.m hdlcoder_agc.mdl hdlcoder_audiofiltering.mdl hdlcoder_bitops_eml.mdl hdlcoder_byte2tuple_eml.mdl hdlcoder_clockdemo.mdl hdlcoder_counters_eml.mdl hdlcoder_delays_eml.mdl hdlcoder_delay_balancing.m hdlcoder_distributed_pipelining.m hdlcoder_dspddc.mdl hdlcoder_edalinks_cosimulation.m hdlcoder_eml_design_patterns.m hdlcoder_fft32_eml.mdl hdlcoder_fsm_eml.mdl hdlcoder_int2bits_eml.mdl hdlcoder_multiclock.m hdlcoder_nibbleswap_eml.mdl hdlcoder_ofdm_fft.mdl hdlcoder_ofdm_fft_eml.mdl hdlcoder_ofdm_fft_eml_m.m hdlcoder_ofdm_fft_m.m hdlcoder_saturate_eml.mdl hdlcoder_serial_fft_butterfly.m hdlcoder_sharing_optimization.m hdlcoder_slsysgen.slx hdlcoder_slsysgen_preload.m hdlcoder_slsysgen_stop.m hdlcoder_sobel_serial_eml.mdl hdlcoder_streaming_optimization.m hdlcoder_system_generator_subsystem.m hdlcoder_vectorized_lms_eml.mdl hdlcordic_eml.mdl hdledascripts.m hdlfirtdecim_multicycle.mdl hdl_areaopt1.mdl hdl_cosim_demo1.mdl hdl_cosim_demo2.mdl hdl_cosim_demo3.mdl hdl_cosim_demo4.mdl hdl_delaybalancing.mdl mcombo.mdl mpipe_multchain.mdl sfir_fixed.mdl sfir_fixed_pipe1.m sfir_fixed_pipe2.m
--------------------
|
|
|
|
|
Nov 1 2012, 19:15
|
Частый гость
 
Группа: Участник
Сообщений: 90
Регистрация: 11-09-11
Пользователь №: 67 121

|
Цитата(syoma @ Oct 4 2012, 16:55)  У меня есть презентация HDL Coder - могу выложить на ФТП Презентации-то они прислали, да не все, про ФАР там что-то было, я пока не разглядел где, что-то там слишком компактно всё скомпилилось. Девушка из саппорта сказала что уточнит, могут ли выслать коды, пока тишина.
|
|
|
|
|
Jul 22 2013, 00:19
|
Гуру
     
Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493

|
Надо будет попробовать, но после того как мне Матлаб сделал файл синтезируемый на 15000 строк с чем -то (всего лишь перемножение 8х8 char матриц (A*K*A') - , так-то он пишет простой и короткий код, но 512 умножителей я пожалел (да и нет столько) и попросил сделать reuse на 16 - вот тут он долго думал, загрузил как ни странно оба ядра минут на 10, и явно ОЗУ хочет больше) - так вот после этого я задумался - а стоит ли это писать ручками, и возможно ли ? В сгенерированном коде вроде ничего лишнего, сплошной loop unroll - ну так не писать его ручками же. Как-то интересно даже - как раньше то писали. Видмо поэтому ПЛИСоводы - буддисты по натуре, пока эта САПР разводит можно думать о смысле всего насущного до посинения. И чего так - непойму.. Собрать ядро Линукса намного быстрее - а файлов и прочего там поболее. Кто объяснит - чего эти среды такие задумчивые ? ЗЫ - для Соломона лучше имхо вообще IP готовый взять. А еще на тему Рида-Соломона ругался с ФПГАшниками нашими, у нас скорость небольшая, но высокая избыточность, в итоге определение синдрома и восстановление чисто неоптимзированным софтом на DM3730 ( ARM не помню какой) - занимает 1/50 от длительности всего кадра, который надо восстановить (кадр - 255*64 байт, 16 килобайт, из них я могу 63 пакета по 64 байта потерять - восстановим). У них это сожрало 2/3 ПЛИС тысячедолларовой (в переводе на Альтеру - 30 LE). Хотя сами виноваты - взяли скоростную корку - вот и хана ресурсам, а без исходников то как reuse сделаешь
|
|
|
|
|
Oct 14 2013, 07:18
|
Частый гость
 
Группа: Участник
Сообщений: 90
Регистрация: 11-09-11
Пользователь №: 67 121

|
Цитата(Gold777 @ Jul 19 2013, 22:07)  Кто-нибудь использовал Матлаб или Симулинк для реализации кодеров и декодеров на ПЛИС (интересуют коды Рида-Соломона, БЧХ, LDPC, Турбо коды) с соответствующим преобразованием в vhdl-код? Какие результаты получились? Или все же сразу на vhdl вести разработку предпочтительней? Пытался делать генерацию hdl с помощью Accel DSP от Xilinx, ничего хорошего не вышло, да и сами они потом этот пакет закрыли. Сейчас использую следующий алгоритм: - разработка кодека в матлабе - в симулинке - симулинк с Xilinx coregenerator - Verilog Матлаб очень хорош для отладки. Сейчас думаю ещё приспособить hardware co-simulation для этого...
|
|
|
|
|
Oct 16 2013, 09:01
|
Группа: Участник
Сообщений: 10
Регистрация: 23-04-06
Пользователь №: 16 399

|
В качестве обзорной информации по генерации HDL из MATLAB, можно посмотреть вебинар https://www.mathworks.com/company/events/we.../wbnr75811.html (нужна регистрация на сайте mathworks). по верификации непосредственно на ПЛИС есть видео на YOUTUBE https://www.youtube.com/watch?v=kce6Y7oqPqI...Xt&index=34 Если есть желание попробовать эту технологию в качестве инструмента для компании в которой работаете, я бы рекомендовал обратится на http://sl-matlab.ru/ или пишите мне dmitryточкаshidlovsky@gmail.com (пишите пожалуйста только если есть желание внедрения технологии на предприятии, на вопросы типа я решил попробовать для себя но не получается, лучше пишите на форуме, может отвечу
|
|
|
|
|
Nov 25 2013, 16:16
|
Группа: Участник
Сообщений: 11
Регистрация: 28-01-13
Пользователь №: 75 381

|
встроенный HDL coder вполне читабельный код генерить, однако)
|
|
|
|
|
Jun 5 2014, 04:24
|
Группа: Новичок
Сообщений: 3
Регистрация: 5-06-14
Пользователь №: 81 872

|
Кто-нибудь использовал Матлаб или Симулинк для реализации кодеров и декодеров на ПЛИС (интересуют коды Рида-Соломона, БЧХ, LDPC, Турбо коды) с соответствующим преобразованием в vhdl-код? Какие результаты получились? Или все же сразу на vhdl вести разработку предпочтительней?
--------------------
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|