%% Area Reduction of Multichannel Filter Subsystem
% To reduce the number of multipliers in the HDL implementation of a multichannel 
% filter and surrounding logic, use the *StreamingFactor* HDL Coder(TM) optimization.  
open_system('DiscreteFIRStreaming')
%%
% The model includes a two-channel sinusoidal signal source feeding a filter 
% subsystem targeted for HDL code generation.
%
% <<../DiscreteFIRStreaming_SubSystem.png>>
% 
% The subsystem contains a Discrete FIR Filter block and a constant multiplier.
% The multiplier is included to show the optimizations operating over all 
% eligible logic in a subsystem. 
%%
% The filter has 44 symmetric coefficients. With no optimizations enabled, 
% the generated HDL code takes advantage of symmetry. The nonoptimized 
% HDL implementation uses 46 multipliers: 22 for each channel of the filter
% and 1 for each channel of the Product block.
%
% <<../DiscreteFIRStreaming_HDLArchNoOptim.png>>
%
% To enable streaming optimization for the Multichannel FIR Filter Subsystem,
% right-click the subsystem and select *HDL Code* > *HDL Block Properties*. 
%
% <<../DiscreteFIRStreaming_HDLBlockProps.png>>
%
% Set the *StreamingFactor* to 2, because this design is a two-channel system. 
%% 
% To observe the effect of the optimization, under *Configuration Parameters* 
% > *HDL Code Generation*, select *Generate resource utilization report* and
% *Generate optimization report*. Then, to generate HDL code, right-click the 
% Multichannel FIR Filter Subsystem and select *HDL Code* > *Generate HDL
% for Subsystem*.
%%
% With the streaming factor applied, the logic for one channel is instantiated 
% once and run at twice the rate of the original model.
%
% <<../DiscreteFIRStreaming_HDLArch.png>>
%
% In the *Code Generation Report* window, click *High-level Resource
% Report*. The generated HDL code now uses 23 multipliers, compared to 46 
% in the nonoptimized code. The multipliers in the filter kernel and 
% subsequent scaling are shared between the channels. 
%
% <<../DiscreteFIRStreaming_Resource.png>>
%
%%
% To apply *SharingFactor* to multichannel filters, set the
% *SharingFactor* to 23. 
%
% <<../DiscreteFIRStreaming_HDLBlockPropsShare.png>>
%
% The optimized HDL now uses only 2 multipliers. The optimization tools do 
% not share multipliers of different sizes.  
%
% <<../DiscreteFIRStreaming_ResourceShare.png>>
%

%% 
% Copyright 2016 The MathWorks, Inc.