|
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
|
|
|
|
|
 |
Ответов
|
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
|
|
|
|
Сообщений в этой теме
LiNED MATLAB R2012a HDL Code Generation Sep 17 2012, 13:25 LiNED Поставил 2.0001 вместо 2, строго задал fraction le... Sep 18 2012, 06:11 Kuzmi4 Цитата(LiNED @ Sep 17 2012, 16:25) ...
Ес... Sep 18 2012, 14:38 des00 /me наслушавшись манагеров и саппортеров матлаба
... Sep 18 2012, 15:32 Gate Цитата(des00 @ Sep 18 2012, 19:32) Народ,... Sep 20 2012, 07:49  des00 Цитата(Gate @ Sep 20 2012, 02:49) Советую... Sep 20 2012, 08:43   Gate Цитата(des00 @ Sep 20 2012, 12:43) хмм, а... Sep 20 2012, 19:29 litv Для ЦОС однозначно надо уходить в МАТЛАБ ( Xilinx ... Sep 19 2012, 04:00 des00 Цитата(litv @ Sep 18 2012, 22:00) Для ЦОС... Sep 19 2012, 04:33 litv Чистый нэтивный не пользую. У Xilinx явно более вы... Sep 19 2012, 04:55 des00 Цитата(litv @ Sep 18 2012, 22:55) Проекты... Sep 19 2012, 05:31 litv m язык же конечно ограниченный (if ,case, for, ти... Sep 19 2012, 05:39 des00 Цитата(litv @ Sep 18 2012, 23:39) Моделир... Sep 19 2012, 06:17 litv Simulink моделирует раз в 10 быстрее VHDL симулято... Sep 19 2012, 06:31 des00 Цитата(litv @ Sep 19 2012, 01:31) Обратны... Sep 19 2012, 07:26  litv Цитата(des00 @ Sep 19 2012, 11:26) Вот пр... Sep 19 2012, 08:15   des00 Цитата(litv @ Sep 19 2012, 03:15) Вообще ... Sep 19 2012, 09:09 litv На всякий случай я говорил за m-язык Xilinx System... Sep 19 2012, 10:41 ИльяКи ЦитатаМожно взять Simulink и вставить как блок-мод... Sep 19 2012, 13:42 des00 Цитата(ИльяКи @ Sep 19 2012, 07:42) Послу... Sep 19 2012, 14:40 Tue Попробую повыступать в защиту HDL Code Generation ... Sep 24 2012, 17:38  des00 Цитата(Tue @ Sep 24 2012, 12:38) Да много... Sep 28 2012, 15:37   Tue Цитата(des00 @ Sep 28 2012, 19:37) ...сго... Oct 1 2012, 18:16    des00 Цитата(Tue @ Oct 1 2012, 12:16) А есть ка... Oct 2 2012, 03:25 Kuzmi4 Цитата(ИльяКи @ Sep 19 2012, 16:42) Ну эт... Sep 24 2012, 18:30 ИльяКи Да уж, ничего больше не остается - пытать саппорт ... Sep 20 2012, 05:07 syoma Хочу написать, как пользователь Xilinx System Gene... Oct 4 2012, 12:55 Goose Цитата(syoma @ Oct 4 2012, 15:55) Хочу на... Oct 26 2012, 06:14 Mogwaika Цитата(syoma @ Oct 4 2012, 16:55) У меня ... Nov 1 2012, 19:15 des00 Цитата(petrov @ Oct 30 2012, 06:04) Отпиш... Oct 30 2012, 15:29 petrov Цитата(des00 @ Oct 30 2012, 19:29) Пока я... Oct 30 2012, 15:55  des00 Цитата(petrov @ Oct 30 2012, 09:55) Т. е.... Oct 30 2012, 16:13 Gold777 Кто-нибудь использовал Матлаб или Симулинк для реа... Jul 19 2013, 18:07 Mogwaika Цитата(Gold777 @ Jul 19 2013, 22:07) Кто-... Oct 14 2013, 07:18 DASM Надо будет попробовать, но после того как мне Матл... Jul 22 2013, 00:19 Gold777 Быстро пришлось отказаться от использования мегафу... Jul 22 2013, 16:21 DASM Много времени в смысле на разработку ?
Кстати по в... Jul 22 2013, 19:12 Gold777 Написание своих блоков декодирования потребовало г... Jul 23 2013, 15:41 DASM Развертывание циклов. Которые он сам и генерит. Ну... Jul 23 2013, 15:52 foxer В качестве обзорной информации по генерации HDL из... Oct 16 2013, 09:01 filo встроенный HDL coder вполне читабельный код генери... Nov 25 2013, 16:16 svetlika Кто-нибудь использовал Матлаб или Симулинк для реа... Jun 5 2014, 04:24 des00 Цитата(svetlika @ Jun 5 2014, 11:24) инте... Sep 30 2014, 03:13 petrov Как в симулинке параметризируемую enabled линию за... Sep 28 2014, 17:05
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|