|
|
  |
MATLAB R2012a HDL Code Generation, непонятки с типами, знаками, размерностями |
|
|
|
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 (пишите пожалуйста только если есть желание внедрения технологии на предприятии, на вопросы типа я решил попробовать для себя но не получается, лучше пишите на форуме, может отвечу
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|