реклама на сайте
подробности

 
 
4 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> MATLAB R2012a HDL Code Generation, непонятки с типами, знаками, размерностями
LiNED
сообщение Sep 17 2012, 13:25
Сообщение #1





Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
LiNED
сообщение Sep 18 2012, 06:11
Сообщение #2





Группа: Участник
Сообщений: 14
Регистрация: 29-09-11
Пользователь №: 67 465



Поставил 2.0001 вместо 2, строго задал fraction length побольше, теперь хоть он нормально делит, и ошибка не такая большая. Но все равно это только костыль...
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Sep 18 2012, 14:38
Сообщение #3


Гуру
******

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



Цитата(LiNED @ Sep 17 2012, 16:25) *
...
Есть у кого предложения по решению этих проблем?

Можно взять Simulink и вставить как блок-модули вашу логику а место где деление - вставить как Verilog файл. Помниться мы так делали когда нас не устраивали ньюансы laughing.gif правда много вставлять Verilog-а не получалось - жаба падала, но в ключевых моментах это нам помогло.
Go to the top of the page
 
+Quote Post
des00
сообщение Sep 18 2012, 15:32
Сообщение #4


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



/me наслушавшись манагеров и саппортеров матлаба

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

Спасибо.


--------------------
Go to the top of the page
 
+Quote Post
litv
сообщение Sep 19 2012, 04:00
Сообщение #5


Местный
***

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



Для ЦОС однозначно надо уходить в МАТЛАБ ( Xilinx System Generator- 9 лет только положительного).
Для HIGH speed Serial mgt gtp - по прежнему VHDL.
Go to the top of the page
 
+Quote Post
des00
сообщение Sep 19 2012, 04:33
Сообщение #6


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



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

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

Ну т.е. что кроме фильтров вы генерировали с матлаба, использовали симулинк или m файлы, какое по вашему качество реализации получилось ? Интересует не столько Xilinx/Altera DSP Builder, а чистый нативный HDL кодер.


--------------------
Go to the top of the page
 
+Quote Post
litv
сообщение Sep 19 2012, 04:55
Сообщение #7


Местный
***

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



Чистый нэтивный не пользую. У Xilinx явно более высокое качество IP CORE.
Проекты - ну например - блоки 802.16 e, приемник и передатчик DVB-T, UMTS, LTE, различные широкополосные цифровые приемники и пеленгаторы , со-вычислители .
А что все про фильтры wink.gif . Все что Вы сумеете математически сформулировать можно сделать и очень быстро(можно вставки делать и на m языке и на vhdl verilog).
Просто нет доступа у некоторым скоростным специфическим блокам и сj множеством клоков определенный опыт нужен.
Go to the top of the page
 
+Quote Post
des00
сообщение Sep 19 2012, 05:31
Сообщение #8


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(litv @ Sep 18 2012, 22:55) *
Проекты - ну например - блоки 802.16 e, приемник и передатчик DVB-T, UMTS, LTE, различные широкополосные цифровые приемники и пеленгаторы , со-вычислители .
А что все про фильтры wink.gif . Все что Вы сумеете математически сформулировать можно сделать и очень быстро(можно вставки делать и на m языке и на vhdl verilog).

Спасибо за ответ. А про вставки, если m код, то это Embedded Function, а если RTL то это какой компонент ? и моделировать его через мосты к симулятору ?


--------------------
Go to the top of the page
 
+Quote Post
litv
сообщение Sep 19 2012, 05:39
Сообщение #9


Местный
***

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



m язык же конечно ограниченный (if ,case, for, типы данных , регистры .......) Но и это очень даже ничего.
Моделировать Vhdl verilog указывая симулятор внешний .
RTL какой компонент - не понял?
Go to the top of the page
 
+Quote Post
des00
сообщение Sep 19 2012, 06:17
Сообщение #10


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(litv @ Sep 18 2012, 23:39) *
Моделировать Vhdl verilog указывая симулятор внешний .
RTL какой компонент - не понял?

В том смысле что моделировать через EDA Simulation Toolbox %) медленно и печально %) думал может матлаб уже научился что-то большее понимать. А как там с многотактовой обработкой cycle accurate при конвейеризации систем, в том числе с обратными связями ? Матлаб не балуется изменением латентностей ?


--------------------
Go to the top of the page
 
+Quote Post
litv
сообщение Sep 19 2012, 06:31
Сообщение #11


Местный
***

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



Simulink моделирует раз в 10 быстрее VHDL симуляторов.
Я не пользуюсь вставками на vhdl verilog, достаточно m языка.
Обратные связи работают - но есть нюансы.
Задержки из страссированной ПЛИС можно посмотреть прямо в Simulink.
Изменение задержек конечно же исключено.
Все схемы конвейерные , в чем проблемы?
Go to the top of the page
 
+Quote Post
des00
сообщение Sep 19 2012, 07:26
Сообщение #12


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(litv @ Sep 19 2012, 01:31) *
Обратные связи работают - но есть нюансы.
Задержки из страссированной ПЛИС можно посмотреть прямо в Simulink.
Изменение задержек конечно же исключено.
Все схемы конвейерные , в чем проблемы?

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

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


--------------------
Go to the top of the page
 
+Quote Post
litv
сообщение Sep 19 2012, 08:15
Сообщение #13


Местный
***

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



Цитата(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 ????
Просто надо начать работать - появится понимание нюансов.
Go to the top of the page
 
+Quote Post
des00
сообщение Sep 19 2012, 09:09
Сообщение #14


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(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 файла в матлабе, это "пустые" операции и задержки не будет. Т.е. модель и железо тут разошлись.


--------------------
Go to the top of the page
 
+Quote Post
litv
сообщение Sep 19 2012, 10:41
Сообщение #15


Местный
***

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



На всякий случай я говорил за m-язык Xilinx System Generator.
Тут какойто господин на форуме говорил что уверенно овладел Matlab HDL генерацией - это к нему.
Go to the top of the page
 
+Quote Post

4 страниц V   1 2 3 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th June 2025 - 20:48
Рейтинг@Mail.ru


Страница сгенерированна за 0.02412 секунд с 7
ELECTRONIX ©2004-2016