Main Content

Generate HLS Code for MATLAB Value Classes

This guide offers a comprehensive step-by-step approach to generating code for MATLAB® value classes. By following this example, you will learn how to create a class hierarchy, implement functionality, and review the generated code using the code generation report. This process not only enhances your understanding of MATLAB's capabilities but also equips you with the skills to optimize code for performance and integration in larger applications.

In MATLAB®, value classes are a type of class that defines how objects are copied and passed with in the code. This example shows how to generate HLS code for a MATLAB value class and then view the generated code in the code generation report.

Follow these steps to generate code for value classes:

  1. In a writable folder, create a MATLAB value class named Shape and save the code as Shape.m.

    classdef Shape 
    % SHAPE Create a shape at coordinates 
    % centerX and centerY
        properties
            centerX;
            centerY;
        end
        properties (Dependent = true)
            area;
        end
        methods 
            function out = get.area(obj)
                out =  obj.getarea();
            end
            function obj = Shape(centerX,centerY)
                obj.centerX = centerX;
                obj.centerY = centerY;
            end
        end
        methods(Abstract = true)
            getarea(obj);
        end
        methods(Static)
            function d = distanceBetweenShapes(shape1,shape2)
                xDist = abs(shape1.centerX - shape2.centerX);
                yDist = abs(shape1.centerY - shape2.centerY);
                d = sqrt(xDist^2 + yDist^2);
            end
        end
    end

  2. Create a class named Square in the same folder, making it a subclass of Shape. Save this code as Square.m.

    classdef Square < Shape 
    % Create a Square at coordinates center X and center Y 
    % with sides of length of side
        properties
            side;
        end
        methods
            function obj = Square(side,centerX,centerY)
                obj@Shape(centerX,centerY);
                obj.side = side;
            end
            function Area = getarea(obj)
                Area = obj.side^2;
            end
        end
    end

  3. Create another class named Rhombus, also a subclass of Shape, and save it as Rhombus.m.

    classdef Rhombus < Shape
        properties
            diag1;
            diag2;
        end
        methods
            function obj = Rhombus(diag1,diag2,centerX,centerY)
                obj@Shape(centerX,centerY);
                obj.diag1 = diag1;
                obj.diag2 = diag2;
            end
            function Area = getarea(obj)
                Area = 0.5*obj.diag1*obj.diag2;
            end
        end
    end

  4. Write a function use_shape that uses these classes to demonstrate their functionality.

    function [TotalArea, Distance] =   use_shape
    %#codegen
    s = Square(2,1,2);
    r = Rhombus(3,4,7,10);
    TotalArea  = s.area + r.area;
    Distance = Shape.distanceBetweenShapes(s,r);

  5. Generate HLS Code for use_shape and generate a code generation report.

    cfg = coder.config('hdl');
    cfg.Workflow = 'High Level Synthesis';
    codegen -config cfg use_shape -report

  6. Click the View report link to open the code generation report.

  7. In the MATLAB Source pane, locate Rhombus.m and click on Rhombus to highlight the constructor of the Rhombus class.

  8. Click the Variables tab. You see that the variable obj is an object of the Rhombus class. To see its properties, expand obj.

    This image shows the code generation report viewer for the example discussed previously. It shows the code for the Rhombus class, and the properties for the class constructor.

  9. In the MATLAB Source pane, click Call Tree.

    The Call Tree view shows that use_shape calls the Rhombus constructor and that the Rhombus constructor calls the Shape constructor.

    This image shows the MATLAB Source pane after you click Call Tree.

  10. In the code pane, in the Rhombus class constructor, move your pointer to this line:

    obj@Shape(centerX,centerY)
    The Rhombus class constructor calls the Shape method of the base Shape class. To view the Shape class definition, in obj@Shape, double-click Shape.

    This image shows the code for the Shape class definition in the report viewer. This view opens after you follow step 10. To view the Shape class definition, in obj@Shape, double-click Shape.