%% dsp_ic.tlc %% %% TLC code generation file for DSP Blockset Delay blocks %% %% Copyright 1995-2000 The MathWorks, Inc. %% $Revision: 1.9 $ $Date: 2000/06/15 20:37:37 $ %% %% Abstract: %% Code generation for initial conditions. %% %% Function: CopyICsInstanceSetup =============================================== %% Abstract: %% Add CopyICs specific parameters to the block scope. %% %% This function must be called from the parent %% block's BlockInstanceSetup function. %% %% Parent block must write out the (5) parameters: %% - ICs_portNum %% - ICs_nChans %% - ICs_DWorkNum %% - ICs_CopyFcnIndex %% - ICs %% in the mdlRTW function, as follows: %% %% if (!ssWriteRTWParamSettings(S, 6, %% SSWRITE_VALUE_DTYPE_NUM, "ICs_portNum", %% &portNum, %% DTINFO(SS_INT32,COMPLEX_NO), %% %% SSWRITE_VALUE_DTYPE_NUM, "ICs_nChans", %% &nChans, %% DTINFO(SS_INT32,COMPLEX_NO), %% %% SSWRITE_VALUE_DTYPE_NUM, "ICs_DWorkNum", %% &dworkNum, %% DTINFO(SS_INT32,COMPLEX_NO), %% %% SSWRITE_VALUE_DTYPE_NUM, "ICs_CopyFcnIndex", %% ©ICsFcn_idx, %% DTINFO(SS_UINT8,COMPLEX_NO), %% %% SSWRITE_VALUE_DTYPE_ML_VECT, "ICs", %% prIC, piIC, numIC, %% DTINFO(SS_DOUBLE, mxIsComplex(IC_ARG(S))) %% )) return; %% %% The ICs_CopyFcnIndex should be written out as: %% %% uint8_T copyICsFcn_idx = (uint8_T )sfcn_cache->ic_cache.ICs_CopyFcnIndex; %% %% %function CopyICsInstanceSetup(block) void %assign ICs_DWorkNum = SFcnParamSettings.ICs_DWorkNum %assign dworkRef = block.DWork[ICs_DWorkNum] %assign ICs_CopyFcnIndex = SFcnParamSettings.ICs_CopyFcnIndex %assign ICs_nChans = SFcnParamSettings.ICs_nChans %assign ICs_dWorkRows = LibBlockDWorkWidth(dworkRef)/ICs_nChans %assign ICs_numICs = LibGetNumberOfElements(SFcnParamSettings.ICs) %assign ICs_portNum = SFcnParamSettings.ICs_portNum %assign ICs_dataPortWidth = CAST("Number",LibDataInputPortWidth(ICs_portNum)) %assign ICs_inputDTypeId = LibBlockInputSignalDataTypeId(ICs_portNum) %assign ICs_bytesPerRealElement = SLibGetDataTypeSizeFromId(ICs_inputDTypeId) %assign ICs_dataTypeName = LibGetDataTypeNameFromId(ICs_inputDTypeId) %% the real-only name %assign block = block + ICs_CopyFcnIndex \ + ICs_nChans + ICs_dWorkRows + ICs_numICs + ICs_portNum \ + ICs_dataPortWidth + ICs_bytesPerRealElement \ + ICs_DWorkNum + ICs_dataTypeName %% We do this here for the client %% NOTE: The client must always write out the IC parameter as "IC" in the mdlRTW function %% % %endfunction %% CopyICsInstanceSetup %% Function: getCopyICsFcnName =============================================== %% Abstract: %% Determine the CopyICs function name from the function index %% %function getCopyICsFcnName(block) void %switch ICs_CopyFcnIndex %case 0 %assign fcn = "CopyScalarICsRealToReal" %break %case 1 %assign fcn = "CopyScalarICsRealToComplex" %break %case 2 %assign fcn = "CopyScalarICsComplexToComplex" %break %case 3 %assign fcn = "CopyVectorICsRealToReal" %break %case 4 %assign fcn = "CopyVectorICsRealToComplex" %break %case 5 %assign fcn = "CopyVectorICsComplexToComplex" %break %case 6 %assign fcn = "Copy3DSampleMatrixICsRealToReal" %break %case 7 %assign fcn = "Copy3DSampleMatrixICsRealToComplex" %break %case 8 %assign fcn = "Copy3DSampleMatrixICsComplexToComplex" %break %case 9 %assign fcn = "Copy3DFrameMatrixICsRealToReal" %break %case 10 %assign fcn = "Copy3DFrameMatrixICsRealToComplex" %break %case 11 %assign fcn = "Copy3DFrameMatrixICsComplexToComplex" %break %default %error "Unrecognized ICs_CopyFcnIndex value: %" %endswitch %return fcn %endfunction %% getCopyICsFcnName %% Function: getICsParamName =============================================== %% Abstract: %% Create a unique initial condition parameter name for every block %% %function getICsParamName(block) void %return "ICs_" + block.Identifier %endfunction %% getICsParamName %% Function: renderICsParamData =============================================== %% Abstract: %% Render the IC parameter vector into the model.prm file %% This must be done according "to the rules" %% %function renderICsParamData(block, rtwWrittenICs) void %% %assign ICs_paramName = getICsParamName(block) %assign ICs_paramVarStr = CreateParamVarCplxPartsStr(rtwWrittenICs, ICs_paramName, ICs_dataTypeName) % %% %endfunction %% renderICsParamData %% Function: getCopyICsFcnProto =============================================== %% Abstract: %% Return the initial condition function call prototype. %% Ex: %% "TMWDSP_CopyICs(TMWDSP_CopyICsArgs *args)" %% %function getCopyICsFcnProto(block) void %return "void %(const % *args)" %endfunction %% getCopyICsFcnProto %% ****************************************************************** %% ****************** Args Specific Functions *********************** %% ****************************************************************** %% Function: getCopyICsArgsStructName =============================================== %% Abstract: %% Returns name of copy ICs function argument cache structure. %% Ex: TMWDSP_CopyICsFcnArgs %% %% %function getCopyICsArgsStructName(block) void %return "TMWDSP_CopyICsFcnArgs" %endfunction %% getCopyICsArgsStructName %% Function: GetCopyICsFcnArgCacheInstanceName =============================================== %% Abstract: %% Create a unique identifier for each block instance %% %function GetCopyICsFcnArgCacheInstanceName(block) void %return "CopyICsArgs_%" %endfunction %% GetCopyICsFcnArgCacheInstanceName %% Function: generateICsArgCacheInstanceEntries =============================================== %% Abstract: %% Generates the argument cache entries %% %function generateICsArgCacheInstanceEntries(block) %assign ICs_dworkRef = block.DWork[ICs_DWorkNum] %assign ICs_prICStr = "(byte_T *)" + getICsParamName(block) + "_re" %assign ICs_piICStr = "(byte_T *)" + (LibIsComplex(SFcnParamSettings.ICs) ? getICsParamName(block) + "_im" : "NULL") %assign ICs_bufferStr = "(byte_T *)" + LibBlockDWorkAddr(ICs_dworkRef, "", "", 0) %assign ICs_nChansStr = STRING(ICs_nChans) %assign ICs_dWorkRowsStr = STRING(ICs_dWorkRows) %assign ICs_numICsStr = STRING(ICs_numICs) %assign ICs_portNumStr = STRING(ICs_portNum) %assign ICs_dataPortWidthStr = STRING(ICs_dataPortWidth) %assign ICs_bytesPerRealElementStr = STRING(ICs_bytesPerRealElement) %assign str = "\n" \ + ICs_prICStr + ", /* pointer to real IC param vector */\n" \ + ICs_piICStr + ", /* pointer to imag IC param vector */\n" \ + ICs_bufferStr + ", /* pointer to IC buffer */\n" \ + ICs_nChansStr + ", /* # channels */\n" \ + ICs_dWorkRowsStr + ", /* single channel buffer length */\n" \ + ICs_numICsStr + ", /* # elements in IC vector */\n" \ + ICs_portNumStr + ", /* port number */\n" \ + ICs_dataPortWidthStr + ", /* data port width */\n" \ + ICs_bytesPerRealElementStr + " /* bytes per real element */\n" %return str %endfunction %% Function: InstantiateCopyICsFcnArgCache =============================================== %% Abstract: %% Instantiate the structure definition for the %% function argument cache, and render into the %% model.c file. %% %function InstantiateCopyICsFcnArgCache(block) void %% %% Create argument cache declaration: %% Ex: extern const TMWDSP_CopyICsArgs args = { %% (data goes here) %% }; %assign decl = "const % %" %assign decl_ext = "extern %" %% Add extern declaration to model_common.h %openfile buffer %; %closefile buffer % %assign decl = decl + " = {" + generateICsArgCacheInstanceEntries(block) + "};\n\n" % %endfunction %% InstantiateCopyICsFcnArgCache %% Function: DefineCopyICsFcnArgCacheProto ========================================== %% Abstract: %% Declare the structure definition prototype for %% the function argument cache, and render into %% the model.h file. %% %function DefineCopyICsFcnArgCacheProto(block) void %% Only want this include to occur ONCE per model, even if %% many blocks make use of this Initial Condition system. %% %if JustCreatedCompiledModelRecord(getCopyICsArgsStructName(block)) %openfile buffer #include "dsp_ic_rt.h" /* For use with DSP initial condition code. */ %closefile buffer % % %endif %endfunction %% DefineCopyICsFcnArgCacheProto %% Function: CallCopyICsFcn =============================================== %% Abstract: %% Generate the appropriate CopyICs function prototype, function body, %% and argument cache instance as necessary: %% %function CallCopyICsFcn(block) Output %% %\ %\ %% %(&%); %% %endfunction %% CallCopyICsFcn %% [EOF] dsp_ic.tlc