0xFF 0 20 апреля, 2007 Опубликовано 20 апреля, 2007 · Жалоба Доброго времени суток! Давненько пользуюсь Матлабом для моделирования систем управления, обращал внимание на его возможность транслирования собираемых моделей под Visual C/C++ и Embedded Target Texas Instruments, однако ввиду очевидной неоптимальности транслируемого кода так и не применял его на практике. Чуть позже довелось познакомиться с System Generator Toolbox от Xilinx. Подумал ну вот наконец-то скорость разработок систем увеличется. Собрал коскадную систему регулирования для DC мотора и до чего удивился когда эта моделька не влезала в Миллионник: генерируемый код со всеми "wrapper" переваливал за 7000 строк и плюс к этому некоторые блоки сравнения отказывались синтезироваться. В результате хирургического вмешательсвта моделька заработала. Вывод для себя: 1.Попробовать что то собрать можно, но применять как готовую билиотеку нет смысла. 2.Подключать рукотворные кусочки в System Generator, и далее пользоваться им как ТОП модулем лишь только красоты ради. Жаль а как всё хорошо начиналось. И вот недавно наткнулся на Simulink HDL Coder. Обладает аж 84 синтезируемыми блоками (r2006b) (в коммандной строке набрать hdllib) и плюс к этому поддерживаются диаграммы состояний. Собрал ту же самую модельку. Сгенерил код. ~100 строк. Каждое соединение блочка assign в коде, каждое действие над отдельным операндом always. Как всё это будет работать? Прикрепляю материал на обсуждение // ------------------------------------------------------------- // // Module: asd // Simulink Path: asd // Created: 2007-04-20 10:49:28 // Hierarchy Level: 0 // // // ------------------------------------------------------------- `timescale 1 ns / 1 ns module asd ( clk, reset, clk_enable ); input clk; input reset; input clk_enable; parameter [31:0] Gain1_gainparam = 32'h0000000A; // uint32 wire enb; reg [31:0] Counter_Limited_out1; // uint32 reg [31:0] Integer_Delay1_out1; // uint32 wire [31:0] Sum_out1; // uint32 reg [31:0] Integer_Delay_out1; // uint32 wire [31:0] Gain1_out1; // uint32 wire [31:0] add_cast; // uint32 wire [31:0] add_cast_1; // uint32 wire [32:0] add_temp; // ufix33 wire [63:0] mul_temp; // ufix64 always @ (posedge clk or posedge reset) begin: Counter_Limited_process if (reset == 1'b1) begin Counter_Limited_out1 <= 32'h00000000; end else begin if (enb == 1'b1) begin if (Counter_Limited_out1 == 32'h02FAF080) begin Counter_Limited_out1 <= 32'h00000000; end else begin Counter_Limited_out1 <= Counter_Limited_out1 + 1; end end end end // Counter_Limited_process always @ (posedge clk or posedge reset) begin: Integer_Delay1_process if (reset == 1'b1) begin Integer_Delay1_out1 <= 0; end else begin if (enb == 1'b1) begin Integer_Delay1_out1 <= Counter_Limited_out1; end end end // Integer_Delay1_process assign add_cast = Integer_Delay1_out1; assign add_cast_1 = Integer_Delay_out1; assign add_temp = add_cast + add_cast_1; assign Sum_out1 = (add_temp[32] != 1'b0) ? 32'b11111111111111111111111111111111 : add_temp[31:0]; always @ (posedge clk or posedge reset) begin: Integer_Delay_process if (reset == 1'b1) begin Integer_Delay_out1 <= 0; end else begin if (enb == 1'b1) begin Integer_Delay_out1 <= Sum_out1; end end end // Integer_Delay_process assign mul_temp = Sum_out1 * Gain1_gainparam; assign Gain1_out1 = (mul_temp[63:32] != 32'h00000000) ? 32'b11111111111111111111111111111111 : mul_temp[31:0]; assign enb = clk_enable; endmodule // asd Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ivan2006 0 21 апреля, 2007 Опубликовано 21 апреля, 2007 · Жалоба Как всё это будет работать? А никак. У этого модуля ни одного выхода нет. :) Ну а если серьёзно то что Вы хотите получить в результате? Чтобы из схемы которую Вы нарисовали сделать HDL код SimuLink можно было не устанавливать. Что бы понять как она работает - тем более. Обычно процесс создания кода для FPGA выглядит так (по крайней мере у меня): 1. Построение алгоритма (функциональной схемы и т.п.) 2. Проверка работы алгоритма в Matlab, просто на С или как-то ещё. Тут же подбираю коэффициенты/инженерные параметры и пр. 3. Перенос алгоритма на Verilog 4-6. Синтез, симуляция, совмещение с другими модулями, отладка, тестирование И этап 3 по сравнению с остальными отнимает совсем не много времени. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex_vod 0 21 апреля, 2007 Опубликовано 21 апреля, 2007 · Жалоба "3. Перенос алгоритма на Verilog" Подскажите , с помощью чего и как это можно сделать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Evil_Archer 0 22 апреля, 2007 Опубликовано 22 апреля, 2007 · Жалоба "3. Перенос алгоритма на Verilog" Подскажите , с помощью чего и как это можно сделать? Извините, что вклиниваюсь, но все равно отвечу. Лучше чем вы это сделаете руками, вряд ли получится, в этом лично я абсолютно убежден. Что касается, так сказать, "автоматизации процесса", то это уже из области синтеза кода на С, SystemC и т.п. Для примера. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex_vod 0 22 апреля, 2007 Опубликовано 22 апреля, 2007 · Жалоба "Лучше чем вы это сделаете руками, вряд ли получится, в этом лично я абсолютно убежден" Бывают случаи , когда нужно понять в какую сторону двигаться в плане разработки , что лучше использовать, а что лучше не использовать, другими словами найти нужный метод, алгоритм. Делать всё своими руками ради пробы, я думаю очень долго и не практично. Но ближе к теме. Вы сами используете эту программу "Catapult Synthesis" какие впечатления? что умеет? Как её связать с Матлабом, а полученный код упаковать в крастал от Altera. Поделитесь Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Evil_Archer 0 22 апреля, 2007 Опубликовано 22 апреля, 2007 · Жалоба "Лучше чем вы это сделаете руками, вряд ли получится, в этом лично я абсолютно убежден" Бывают случаи , когда нужно понять в какую сторону двигаться в плане разработки , что лучше использовать, а что лучше не использовать, другими словами найти нужный метод, алгоритм. Делать всё своими руками ради пробы, я думаю очень долго и не практично. Но ближе к теме. Вы сами используете эту программу "Catapult Synthesis" какие впечатления? что умеет? Как её связать с Матлабом, а полученный код упаковать в крастал от Altera. Поделитесь У нас в конторе никто, к сожалению, не занимался синтезом с такого высокого уровня. В силу специфики заказчика для нас не слишком критично время и цена разработки, зато важно качество конечного продукта в плане быстродействия и запаса по условиям эксплуатации, поэтому RTL описания делаются вручную, а сами алгоритмы предварительно обкатываются программно на С++, но код напрямую в HDL никто не перегоняет. Лично с Catapult не работал, но в области синтеза с высокоуровневых описаний это один из реально работающих продуктов, думаю что на форуме есть тесно знакомые с ним люди, к сожалению, я пока не из их числа, но надеюсь со временем это обстоятельство исправить. О ручном переводе на HDL я заговорил только потому, что автоматические методы, на сколько я знаю, пока еще дают очень большую избыточность, поэтому быстродействие и требования к ресурсам ПЛИС оставляют желать много лучшего, так что уменьшившееся time-to-market компенсируется возросшей себестоимостью продукции (кристаллы пожирнее и побыстрее). Услышать мнение людей, реально работающих в этой области мне самому было бы очень интересно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ivan2006 0 22 апреля, 2007 Опубликовано 22 апреля, 2007 · Жалоба "3. Перенос алгоритма на Verilog" Подскажите , с помощью чего и как это можно сделать? При переводе алгоритма из С в HDL возникает очень много степеней свободы для реализации. Совершенно очевидно, например, как преревести строчку типа "A = (B+C) << 2" в Verilog. Но это недолго переписать и руками. А теперь представьте как Вы будете описывать "автоматизатору процесса" способы обработки и хранения данных (конвейер, асинхронная обработка, очередь и т.п.); внешние интерфейсы модуля; во что преобразовывать циклы и условные операторы. В результате оказывается что в большинстве случаев проще и быстрее использовать какую-то имеющуюся заготовку и немного модифицировать её под конкретный алгоритм. Лично у меня не возникало ситуации когда перенос _смысловой_ части алгоритма на HDL отнимал бы много времени. И соответственно не возникает потребность в каком-либо стороннем софте для этих целей. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex_vod 0 22 апреля, 2007 Опубликовано 22 апреля, 2007 · Жалоба На сайте Altera много примеров DSP разработок в М файлах. У них же есть фирменная утилита DSP билдер , которая генирит HDL код Вот я и подумал , что в матлабе должны быть какие то свои средства для этого Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 23 апреля, 2007 Опубликовано 23 апреля, 2007 · Жалоба Приветствую! Все эти инструменты в данное время позиционируются именно для БЫСТРОГО создания прототипа устройства, отладки алгоритма и определения требуемых параметров. Если при этом реализация в железе удовлетворяет в плане быстродействия и объема, то это только большой плюс. Сам периодически использую Matlab + Xilinx или Synplify DSP генератор для моделирования и отладки своих устройств. Правда после этого всегда приходится переписывать реализацию руками для получения требуемой скорости. Так как при генерации по модели используются блоки Xilinx Coregen или библиотеки Synplify, а оптимизация у них не всегда на высоте. Успехов! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
litv 0 23 апреля, 2007 Опубликовано 23 апреля, 2007 · Жалоба Постоянно использую Xilinx System Generator. Все блоки в нем дают прекрасное быстродействие, все в конвейере , все быстро и классно. Есть глючки - но где их нет. Synplify DSP - нету Cosimulation - . Accel DSP - буду пробовать щас (cosimualtion в 9.1 вроде сделали +) . Скачал HDL Coder для MATLAB (интересно сравнить)- там какойто файл hdlcoder.enc . А как его установить в MATLAB? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex_vod 0 23 апреля, 2007 Опубликовано 23 апреля, 2007 · Жалоба Сейчас скачиваю MATLAB2007а, там вроде HDL Coder должен входить в комплект. Когда докачается посмотрю. А у вас какая версия MATLAB? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
litv 0 23 апреля, 2007 Опубликовано 23 апреля, 2007 · Жалоба У меня 2007а. В нем нету . Наверное в 2007b. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex_vod 0 23 апреля, 2007 Опубликовано 23 апреля, 2007 · Жалоба MATLAB2007а вышел пару недель назад Может у вас MATLAB2006а, если так , то там точно HDL Coder нет. У меня сейчас MATLAB2006а стоит Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
litv 0 23 апреля, 2007 Опубликовано 23 апреля, 2007 · Жалоба Точно, заболтался. У меня 2006А. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tpeck 0 21 ноября, 2007 Опубликовано 21 ноября, 2007 · Жалоба Постоянно использую Xilinx System Generator. Все блоки в нем дают прекрасное быстродействие, все в конвейере , все быстро и классно. Есть глючки - но где их нет. Synplify DSP - нету Cosimulation - . Accel DSP - буду пробовать щас (cosimualtion в 9.1 вроде сделали +) . Скачал HDL Coder для MATLAB (интересно сравнить)- там какойто файл hdlcoder.enc . А как его установить в MATLAB? Извините, что вклиниваюсь, но не могли ли вы подсказать, как использовать xilinx system genarator? Точнее готовый код из него получить. Что именно нужно компилировать? HDL netlist, NGC Netlist, Bitstrem, EDK export tool, Hardware Co-S..., Timing an...? И что делать после компиляции с полученными файлами. Будет ли там сразу готовый код или его надо будет куда-нибудь грузить и дальше компилировать. Или хотя бы ссылку дайте, где про процесс компиляции можно почитать, а то help не очень пока понятен. Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться