Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: MATLAB R2012a HDL Code Generation
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Вопросы системного уровня проектирования
LiNED
Написал простую функцию, расчет положения при падении объекта в воздухе. На вход подаются текущие координаты (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
Поставил 2.0001 вместо 2, строго задал fraction length побольше, теперь хоть он нормально делит, и ошибка не такая большая. Но все равно это только костыль...
Kuzmi4
Цитата(LiNED @ Sep 17 2012, 16:25) *
...
Есть у кого предложения по решению этих проблем?

Можно взять Simulink и вставить как блок-модули вашу логику а место где деление - вставить как Verilog файл. Помниться мы так делали когда нас не устраивали ньюансы laughing.gif правда много вставлять Verilog-а не получалось - жаба падала, но в ключевых моментах это нам помогло.
des00
/me наслушавшись манагеров и саппортеров матлаба

Народ, те кто применяет симулинк и матлаб HDL кодеры для прототипирования и разработки, расскажите свои результаты. А то есть у меня проект, хочу прогнать его через сквозное проектирование в симулинке, но вот стоит ли идти до получения хдл кода ?

Спасибо.
litv
Для ЦОС однозначно надо уходить в МАТЛАБ ( Xilinx System Generator- 9 лет только положительного).
Для HIGH speed Serial mgt gtp - по прежнему VHDL.
des00
Цитата(litv @ Sep 18 2012, 22:00) *
Для ЦОС однозначно надо уходить в МАТЛАБ ( Xilinx System Generator- 9 лет только положительного).

хмм, вот это положительное можете немного расшифровать ?

Ну т.е. что кроме фильтров вы генерировали с матлаба, использовали симулинк или m файлы, какое по вашему качество реализации получилось ? Интересует не столько Xilinx/Altera DSP Builder, а чистый нативный HDL кодер.
litv
Чистый нэтивный не пользую. У Xilinx явно более высокое качество IP CORE.
Проекты - ну например - блоки 802.16 e, приемник и передатчик DVB-T, UMTS, LTE, различные широкополосные цифровые приемники и пеленгаторы , со-вычислители .
А что все про фильтры wink.gif . Все что Вы сумеете математически сформулировать можно сделать и очень быстро(можно вставки делать и на m языке и на vhdl verilog).
Просто нет доступа у некоторым скоростным специфическим блокам и сj множеством клоков определенный опыт нужен.
des00
Цитата(litv @ Sep 18 2012, 22:55) *
Проекты - ну например - блоки 802.16 e, приемник и передатчик DVB-T, UMTS, LTE, различные широкополосные цифровые приемники и пеленгаторы , со-вычислители .
А что все про фильтры wink.gif . Все что Вы сумеете математически сформулировать можно сделать и очень быстро(можно вставки делать и на m языке и на vhdl verilog).

Спасибо за ответ. А про вставки, если m код, то это Embedded Function, а если RTL то это какой компонент ? и моделировать его через мосты к симулятору ?
litv
m язык же конечно ограниченный (if ,case, for, типы данных , регистры .......) Но и это очень даже ничего.
Моделировать Vhdl verilog указывая симулятор внешний .
RTL какой компонент - не понял?
des00
Цитата(litv @ Sep 18 2012, 23:39) *
Моделировать Vhdl verilog указывая симулятор внешний .
RTL какой компонент - не понял?

В том смысле что моделировать через EDA Simulation Toolbox %) медленно и печально %) думал может матлаб уже научился что-то большее понимать. А как там с многотактовой обработкой cycle accurate при конвейеризации систем, в том числе с обратными связями ? Матлаб не балуется изменением латентностей ?
litv
Simulink моделирует раз в 10 быстрее VHDL симуляторов.
Я не пользуюсь вставками на vhdl verilog, достаточно m языка.
Обратные связи работают - но есть нюансы.
Задержки из страссированной ПЛИС можно посмотреть прямо в Simulink.
Изменение задержек конечно же исключено.
Все схемы конвейерные , в чем проблемы?
des00
Цитата(litv @ Sep 19 2012, 01:31) *
Обратные связи работают - но есть нюансы.
Задержки из страссированной ПЛИС можно посмотреть прямо в Simulink.
Изменение задержек конечно же исключено.
Все схемы конвейерные , в чем проблемы?

Вот простой пример, собрал блок, который работает при отношении тактовой к символьной ну положим 8 раз, можно использовать многотактную обработку. Матлаб учтет это обстоятельство и сделает латентность ну положим 6 тактоов. Но потом, например, я увеличил порядок фильтра в 2 раза, то матлаб останется в тех же 6 ти тактах или сам увеличит количество слоев логики, сделает латентность ну положим 8 и тихо про это промолчит ?

Или другой пример, написал я код на m языке, который должен исполняться за 2 такта, а при синтезе матлаб решил его разогнать по тактовой, напихал регистров и сделал его исполняющимся за 4 такта. Такая ситуация возможна ?
litv
Цитата(des00 @ Sep 19 2012, 11:26) *
Вот простой пример, собрал блок, который работает при отношении тактовой к символьной ну положим 8 раз, можно использовать многотактную обработку. Матлаб учтет это обстоятельство и сделает латентность ну положим 6 тактоов. Но потом, например, я увеличил порядок фильтра в 2 раза, то матлаб останется в тех же 6 ти тактах или сам увеличит количество слоев логики, сделает латентность ну положим 8 и тихо про это промолчит ?

Или другой пример, написал я код на m языке, который должен исполняться за 2 такта, а при синтезе матлаб решил его разогнать по тактовой, напихал регистров и сделал его исполняющимся за 4 такта. Такая ситуация возможна ?

Вообще фраза МАТЛАБ промолчит как бы ....
Simulink это система моделирования - любое Ваше изменение во первых видно при моделировании . И можно извлечь VHDL и перемоделировать в моделсиме (если не верите fman.gif ).
Про фильтр - у него есть выход готовности данных. Хотя его задержку можно посчитать и в уме. При проектировании фильтров используются IP core с подробным описанием, в том числе и latency. Все решает Ваше задание для корки.
Про второй вопрос про m - файл ситуация невозможна. Ну как бы работали сложные проекты под полностью забитые virtexы - если бы задержки "разгонялись" ??? сами , ага в state machine 1111493779.gif ????
Просто надо начать работать - появится понимание нюансов.
des00
Цитата(litv @ Sep 19 2012, 03:15) *
Вообще фраза МАТЛАБ промолчит как бы ....
Simulink это система моделирования - любое Ваше изменение во первых видно при моделировании . И можно извлечь VHDL и перемоделировать в моделсиме (если не верите fman.gif ).
Про фильтр - у него есть выход готовности данных. Хотя его задержку можно посчитать и в уме. При проектировании фильтров используются IP core с подробным описанием, в том числе и latency. Все решает Ваше задание для корки.
Про второй вопрос про m - файл ситуация невозможна. Ну как бы работали сложные проекты под полностью забитые virtexы - если бы задержки "разгонялись" ??? сами , ага в state machine 1111493779.gif ????
Просто надо начать работать - появится понимание нюансов.

Хмм, IP корки мне не интересны. Мне интересен натурный HDL кодер. На демонстрации которую матлабовцы показывали по россии, конвейеризация m файлов выглядела так, вместо a = b написали a1 = b, a = a1 (без каких либо квалификаторов и тегов) и получили прирост тактовой в ~5 раз, за счет конвейризации и увеличения латентности на 1 такт. При этом для моделирования этого m файла в матлабе, это "пустые" операции и задержки не будет. Т.е. модель и железо тут разошлись.
litv
На всякий случай я говорил за m-язык Xilinx System Generator.
Тут какойто господин на форуме говорил что уверенно овладел Matlab HDL генерацией - это к нему.
ИльяКи
Цитата
Можно взять Simulink и вставить как блок-модули вашу логику а место где деление - вставить как Verilog файл. Помниться мы так делали когда нас не устраивали ньюансы laughing.gif правда много вставлять Verilog-а не получалось - жаба падала, но в ключевых моментах это нам помогло.

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

Послушать отзывы так попытки использования MATLAB для мало-мальски эффективной HDL-генерации пока что есть утопия и лучше сразу писать в HDL. А так радужно это дело мне описывали, мол, написал функцию - она сразу так красиво сама в код заделалась и хоть сразу компиль и зашивай в ПЛИСину или разводи в ASIC, только настройки успевай выставлять. А оказалось что эта система даже об элементарную арифметику уже спотыкается =_=
des00
Цитата(ИльяКи @ Sep 19 2012, 07:42) *
Послушать отзывы так попытки использования MATLAB для мало-мальски эффективной HDL-генерации пока что есть утопия и лучше сразу писать в HDL. А так радужно это дело мне описывали, мол, написал функцию - она сразу так красиво сама в код заделалась и хоть сразу компиль и зашивай в ПЛИСину или разводи в ASIC, только настройки успевай выставлять. А оказалось что эта система даже об элементарную арифметику уже спотыкается =_=

обратитесь в саппорт матлаба (или на сайт), там чел есть вменяемый по этому делу. Как он мне намекнул, "просто вы не умеете готовить".
ИльяКи
Да уж, ничего больше не остается - пытать саппорт только. Нюансов может быть еще море и стаканчик, жаль только что далеко не все освещены в стандартном матлабовском хелпе smile3046.gif
Gate
Цитата(des00 @ Sep 18 2012, 19:32) *
Народ, те кто применяет симулинк и матлаб HDL кодеры для прототипирования и разработки, расскажите свои результаты. А то есть у меня проект, хочу прогнать его через сквозное проектирование в симулинке, но вот стоит ли идти до получения хдл кода ?

Советую посмотреть в сторону synopsys synphony model compiler (это бывший synplify dsp). Примерный эквивалент xilinx system generator или altera dsp builder, но без привязки к конкретному вендору.
des00
Цитата(Gate @ Sep 20 2012, 02:49) *
Советую посмотреть в сторону synopsys synphony model compiler (это бывший synplify dsp). Примерный эквивалент xilinx system generator или altera dsp builder, но без привязки к конкретному вендору.

хмм, а они уже довели свой инструмент до ума ? он появился года 2 назад, но как то тишина была с тех пор.
Gate
Цитата(des00 @ Sep 20 2012, 12:43) *
хмм, а они уже довели свой инструмент до ума ? он появился года 2 назад, но как то тишина была с тех пор.

Да вроде работает. Моделирует, генерит hdl, который потом синтезирует синплифай. Даже с-модели делает. Вопрос в том, подойдет ли он для Ваших задач. Вот здесь я писал, как можно взять поиграться: http://electronix.ru/forum/index.php?showtopic=104839
ps вообще-то synplify dsp появился лет 7-8 назад, так что время отладить немножко было.
Tue
Попробую повыступать в защиту 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. Качество реализации зависит от степени приложения мозгов в проектировании. Если рассматривать это средство как инструмент для домохозяек и "бездумно" делать модель, то и код будет соответствующий. В случае же когда при проектировании есть понимание во что в ПЛИС превратится та или иная конструкция в модели, то все получается нормально. Да, возможно найдутся случаи, когда руками получится оптимальнее (площадь, время, ...) но у меня такого пожалуй не было. Да и не этим (не только этим) ценен для меня такой метод проектирования. Чтобы не повторяться можно почитать вот тут немного.
Kuzmi4
Цитата(ИльяКи @ Sep 19 2012, 16:42) *
Ну это костыли еще посуровее будут, получается надо препарировать модель в местах деления пополам, такое зверство над моделью maniac.gif Безусловно, мне как начинающему будет полезно поманьячить лишний раз, но для чего-то серьезного надо бы уходить от подобной практики.

На счёт препарирования - из того что видел, такая метода позволяет существенно сократить время на разработку когда нарисовался какой то глюк через криворукость кодера или свою (или скорость не дотягивает), времени разбираться нет потому что нужно на "позавчера" и оно всё работает. Просто, как было сказано, нужно иметь представление о вн. структуре алгоритма, тогда такие "препарации" будут не очень болезненными, ну или представлять как оно может быть приблизительно реализовано на камне - тогда ещё проще laughing.gif
des00
Цитата(Tue @ Sep 24 2012, 12:38) *
Да много чего генерировал....

Спасибо за развернутый ответ, сгонял на конференцию, пообщался, посмотрел как люди работают, был несколько шокирован возможностями. В общем да, его нужно уметь готовить. Щас сижу изучаю синтез Digital Filter, блин, он даже оптимизирует csd умножители почти как человек. В планах собрать простой демодулятор и проверить ресурс, сравнить со своими наработками.

Один большой минус, цена.....

PS. Проверил валидацию задержек, на примере простых Digital Filter, теперь понятно как сделать cycle-accurate модель. Извините за глупые вопросы в начале %)
Tue
Цитата(des00 @ Sep 28 2012, 19:37) *
...сгонял на конференцию....

А есть какие-нить материалы в электронном виде ?
des00
Цитата(Tue @ Oct 1 2012, 12:16) *
А есть какие-нить материалы в электронном виде ?

там не раздавали ничего электронного, была запись на камеру, но по словам организаторов это было для внутреннего использования. Упоминали что-то вроде что вышлют по запросу, но как то мутно %)
да и было это похоже не на конференцию, а на практические занятия
syoma
Хочу написать, как пользователь 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 - могу выложить на ФТП
Goose
Цитата(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, просто никто не умеет правильно галочки расставлять в настройках. Хотелось бы узнать как же правильно их расставлять)
x736C
Мы перевели разработку модема на рельсы модельно-ориентированного проектирования (Simulink, Matlab).
В железе еще не проверяли, но по тактовым, эффективности и т.п. соизмеримо с ручным кодированием. По эффективности вылавливания глюков и по качеству системного уровня альтернативы не вижу.

Если по HDL-кодеру еще есть вопросы, то, например, Си-код генерируется совершенно замечательно.

Такой подход особенно полезен тем, кому надо будет проходить сертификацию по DO или КТ.

Да и Матлаб со своими генераторами уже не тот, что был даже еще год назад.


Насчет качества HDL и Си кода. Стало понятно, что необходимо хорошо разобраться что и как делает Матлаб из вашей модели. Все сам и красиво по волшебному нажатию кнопки он, конечно, не сделает.
petrov
Цитата(x736C @ Oct 30 2012, 11:30) *
Мы перевели разработку модема на рельсы модельно-ориентированного проектирования (Simulink, Matlab).



Как осуществляется разворот сложной комбинационной схемы в последовательные вычисления во времени? Автоматически с генерацией управляющей логики и автоматов, c указанием на сколько тактов разбить вычисления?
des00
Цитата(petrov @ Oct 30 2012, 04:01) *
Как осуществляется разворот сложной комбинационной схемы в последовательные вычисления во времени? Автоматически с генерацией управляющей логики и автоматов, c указанием на сколько тактов разбить вычисления?

ЕМНИП там есть параметры Sharing Factor, Streaming Factor, Pipelining они определяеют уровень конвейризации, уровень многотактовости и зашаривание модуля между разными операциями.

У меня в планах тоже полноценный модем сделать, точнее всю дспешную часть %) скоро начну копать
petrov
Цитата(des00 @ Oct 30 2012, 15:43) *
У меня в планах тоже полноценный модем сделать, точнее всю дспешную часть %) скоро начну копать


Отпишите пожалуйста в чём там соль, пока непонятно. Взять например FFT, в симулинке это просто большая комбинационная схема, что за искусственный интеллект автоматически разобьёт это на оптимальное количество последовательных бабочек и блоков памяти. Если всё это вручную детально рисовать в симулинке, то в чём отличие от разработки цифровой схемы в схематике?
x736C
Цитата(petrov @ Oct 30 2012, 16:04) *
Если всё это вручную детально рисовать в симулинке, то в чём отличие от разработки цифровой схемы в схематике?

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

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

2. Появляется возможность избежать двойной работы, ибо моделирование Вы, насколько я понимаю, все равно проводите в матлабе.
Например, изменили модель, лезем искать в код, меняем код. Потом еще подправили модель, что-то в ней уточнили, переписываем значительный участок кода. Работа x2.

3. Приобретаем возможность трассировать требования на Вашу модель.

4. Если требуется сертификация по разным авиационным стандартам (KT, DO), то с инструментами матлаба пройти сертификацию будет легче. Имеется в виду генерация отчетов, трассировка требований к модели и обратно, кодогенератор, не требующий сертификации (только квалификация). Могу ошибаться, но и код, созданный кодогенератором не требует сертификации (только сама модель).

5. Наконец, никто Вам не мешает тонкие вещи вынести в чистый hdl и подключить тонко настроенный и отлаженный модуль к своей модели. При этом сохранятся все достоинства модельно-ориентированного проектирования, о которых сказал выше.
Более того, интерфейсные ядра, процессоры и т.п. имхо должны проектироваться так, как и проектируются.
В Симулинк лучше выносить обработку сигналов. Это очевидные вещи выше кто-то уже писал.

Мы только встали на этот путь ~три месяца назад, но уже готовы значительные части демодулятора, закончен модулятор. В железе проверим, тогда будет понятно.
des00
Цитата(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 не договорились в свое время, плюнули на их нежелание делать высокоуровневый синтез, набрали хорошую команду и сделали свой синтезатор. Как говорилось в одном старом фильме "Чувствуется рука создателя", когда смотришь на сгенерированный код %))
petrov
Цитата(des00 @ Oct 30 2012, 19:29) *
Пока я крутил только 2 вещи : Digital Filter и Viterbi Decoder. Могу ответить за них :


Т. е. это просто корки параметризируемые которые можно к симулинк модели подключить?
Меня интересует разработка произвольной сложной цифровой схемы, которая ни в какие корки не вписывается, есть ли там нечто, что позволяет уйти от написания ручками RTL или это будет тот же схематик вид сбоку?

des00
Цитата(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
Mogwaika
Цитата(syoma @ Oct 4 2012, 16:55) *
У меня есть презентация HDL Coder - могу выложить на ФТП

Презентации-то они прислали, да не все, про ФАР там что-то было, я пока не разглядел где, что-то там слишком компактно всё скомпилилось. Девушка из саппорта сказала что уточнит, могут ли выслать коды, пока тишина.
Gold777
Кто-нибудь использовал Матлаб или Симулинк для реализации кодеров и декодеров на ПЛИС (интересуют коды Рида-Соломона, БЧХ, LDPC, Турбо коды) с соответствующим преобразованием в vhdl-код? Какие результаты получились? Или все же сразу на vhdl вести разработку предпочтительней?
DASM
Надо будет попробовать, но после того как мне Матлаб сделал файл синтезируемый на 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 сделаешь
Gold777
Быстро пришлось отказаться от использования мегафункции ввиду ее закрытой архитектуры. В итоге разобрался с теорией и реализовал свой декодер RS и БЧХ на vhdl. По ресурсам значительно выиграл т.к. делал последовательную обработку синдромов на одном решателе ключевого уравнения. Но этот подход потребовал много времени. Интересно попробовать матлаб для этих целей. Особенно если взяться за реализацию LDPC на плис.
DASM
Много времени в смысле на разработку ?
Кстати по верификации полученного кода. У меня в Моделсиме тесты проходят только если я не делаю loop unroll. Надо ставить в настройках генератора тесбенча oversampling ? Все равно не вышло. Разбираюсь. И еще он у меня ставит везде timescale 1 ns/1ns - это разве нормально ?
Gold777
Написание своих блоков декодирования потребовало гораздо больше времени, чем использование в проекте готовых ip модулей. Что такое loop unroll?

Кто-нибудь пробовал считывать бинарный файл в симулинке, подать например на кодер и записать полученный результат в файл? Или это только в матлабе можно?
DASM
Развертывание циклов. Которые он сам и генерит. Ну если не сталкивались то и ладно
Mogwaika
Цитата(Gold777 @ Jul 19 2013, 22:07) *
Кто-нибудь использовал Матлаб или Симулинк для реализации кодеров и декодеров на ПЛИС (интересуют коды Рида-Соломона, БЧХ, LDPC, Турбо коды) с соответствующим преобразованием в vhdl-код? Какие результаты получились? Или все же сразу на vhdl вести разработку предпочтительней?


Пытался делать генерацию hdl с помощью Accel DSP от Xilinx, ничего хорошего не вышло, да и сами они потом этот пакет закрыли.
Сейчас использую следующий алгоритм:
- разработка кодека в матлабе
- в симулинке
- симулинк с Xilinx coregenerator
- Verilog

Матлаб очень хорош для отладки. Сейчас думаю ещё приспособить hardware co-simulation для этого...
foxer
В качестве обзорной информации по генерации 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 (пишите пожалуйста только если есть желание внедрения технологии на предприятии, на вопросы типа я решил попробовать для себя но не получается, лучше пишите на форуме, может отвечу sm.gif
filo
встроенный HDL coder вполне читабельный код генерить, однако)
svetlika
Кто-нибудь использовал Матлаб или Симулинк для реализации кодеров и декодеров на ПЛИС (интересуют коды Рида-Соломона, БЧХ, LDPC, Турбо коды) с соответствующим преобразованием в vhdl-код? Какие результаты получились? Или все же сразу на vhdl вести разработку предпочтительней?
petrov
Как в симулинке параметризируемую enabled линию задержки с отводами нарисовать, корректно кодирующуюся в HDL, кроме как из unit delay enabled набирать? В Enabled subsystem генерируется лишняя bypass схема.
des00
Цитата(svetlika @ Jun 5 2014, 11:24) *
интересуют коды Рида-Соломона, БЧХ

+Витерби -> в крайних матлабах есть уже готовые HDL ные корки таких кодов, оптимизированные под плисовые архитектуры
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.