СОВРЕМЕННАЯ ЭЛЕКТРОНИКА №2/2015
ПРОЕКТИРОВАНИЕ И МОДЕЛИРОВАНИЕ 66 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА ◆ № 2 2015 Проект системы ЦОС для привода электродвигателя реализуется в гра- фической модели с помощьюMATLAB/ Simulink с использованием потактово- го моделирования. Применение подоб- ной методологии для проекта на ПЛИС позволяет создать схему управления приводом электродвигателя путём моделирования в Simulink по генериру- емому коду (см. рис. 4), а также обеспе- чить визуализацию результатов моде- лирования (см. рис. 5). Аппаратная реализация модели при- вода электродвигателя (см. рис. 4) осу- ществлена с помощью технологии синтеза DSP Builder Advanced Blockset в Simulink для ПЛИС с использованием HIL [7]; DSP Builder, в данном случае, – это переводчик из графики Simulink в используемый HDL-код. Данная тех- нология позволяет автоматически генерировать оптимизированный код регистровых передач (RTL), соответ- ствующий уровню Simulink для опи- сания проекта. Для проверки DSP Builder используется инструмент HIL. Собирается проект исследуемой систе- мы, а затем создаётся «накрывающая» модель, где проектируемая система является HIL-подсистемой, отделён- ной от модельного пространства вхо- дами и выходами (Input и Output, соот- ветственно). Непосредственно из моделей может быть автоматически сгенерирован настраиваемый код VHDL или Verilog, которые используются на любой целе- вой вычислительной аппаратуре и син- тезируются для реализации на ПЛИС. Код можно быстро модифицировать, обновляя модель и повторно выполняя автоматическую генерацию. Далее при помощи сторонних средств выполня- ется синтез, размещение, трассировка и загрузка окончательной версии про- екта в ПЛИС. Для верификации реализованного на ПЛИС алгоритма можно использо- вать модель Simulink при параллель- ном моделировании. Программа EDA Simulator Link позволяет исполнять реа- лизацию на имитаторах HDL, например на ModelSim, применяемом в качестве эталонной модели. Сравнением резуль- татов выполнения реализаций алгорит- ма определяется разница между полу- ченным и желаемым поведением систе- мы. Кроме этого, EDA Simulator Link позволяет проводить регрессионное тестирование и интерактивную отладку как в Simulink, так и в имитаторе HDL. Такой подход избавляет разработчика Листинг 2. Программный файл записи выборки данных в ПЛИС 1 function hil_comm(block) 2 setup(block); 3 %endfunction 4 function setup(block) 5 block.NumDialogPrms = 0; 6 %% Register number of input and output ports 7 block.NumlnputPorts = 4; 8 block.NumOutputPorts = 1; 9 %% Setup functional port properties 10 block.InputPort(1).Dimensions = 1; 11 block.InputPort(1).DirectFeedthrough = false; 12 block.InputPort(1).DatatypelD = 1; 13 block.InputPort(2).Dimensions = 1; 14 block.InputPort(2).DirectFeedthrough = false; 15 block.InputPort(2).DatatypelD =1; 16 block.InputPort(3).Dimensions =1; 17 block.InputPort(3).DirectFeedthrough = false; 18 block.InputPort(3).DatatypelD = 1; 19 block.InputPort(4).Dimensions = 1; 20 block.InputPort(4).DirectFeedthrough = false; 21 block.InputPort(4).DatatypelD = 1; 22 block.OutputPort(1).Dimensions = 1; 23 block.OutputPort(1).DatatypelD = 1; %single 24 %% Set block sample time to inherited 25 global SimulinkSampleTime 26 block.SampleTimeз = [SimulinkSampleTime 0]; 27 %% Register methods 28 block.RegBlockMethod(‘Outputs’, @Output); 29 block. RegBlockMethod (‘ Terminate ‘, @Terminate); 30 block.RegBlockHethod(‘ Enable’, @DoZnable); 31 %endfunction 32 function DoZnable(~) 33 SystemConsole.refreshHasters; 34 global M 35 global SysConlndexPath 36 M = SystemConsole.openMaster(SysConlndexPath);%may be need to modify to ajust to hw 37 38 function Output(block) 39 global M 40 InputData = []; 41 for i = 1:4 42 InputData = [InputData block.InputPort(i).Data]; 43 end 44 %assumes that all inputs are single precision 45 InputData = uint32(hex2dec(num2hex(InputData))); 46 H.write (‘uint32’,uint32(0),InputData); 47 %toggle valid 48 M.write{‘uint32’,uint32(4*4), 1); 49 M.write(‘uint32’,uint32(4*4), 0); 50 block.OutputPort(1).Data = typecast(uint32(M. read(‘uint32’,uint32(5*4),1)), ‘single’); 51 %endfunction 52 53 function Terminate (~) 54 global M 55 if (ismethod(M,’close’)) 56 M.с1озе; 57 end
RkJQdWJsaXNoZXIy MTQ4NjUy