public static ProtoCore.VHDL.AST.IfNode GenerateClockSyncTemplate()
        {
            // rising_edge call
            List <ProtoCore.VHDL.AST.VHDLNode> argList = new List <ProtoCore.VHDL.AST.VHDLNode>();

            argList.Add(new ProtoCore.VHDL.AST.IdentifierNode(ProtoCore.VHDL.Constants.Naming.ClockSignalName));
            ProtoCore.VHDL.AST.FunctionCallNode clockedgeCall = new ProtoCore.VHDL.AST.FunctionCallNode(
                ProtoCore.VHDL.Constants.Naming.RisingEdge,
                argList
                );

            // clock sync ifstmt
            ProtoCore.VHDL.AST.IfNode clockIf = new ProtoCore.VHDL.AST.IfNode(ProtoCore.VHDL.Constants.Naming.ClockSync);
            clockIf.IfExpr = clockedgeCall;

            return(clockIf);
        }
        public static ProtoCore.VHDL.AST.IfNode GenerateResetSyncTemplate()
        {
            // Reset sync ifstmt
            ProtoCore.VHDL.AST.IfNode resetSyncIf = new ProtoCore.VHDL.AST.IfNode(ProtoCore.VHDL.Constants.Naming.ResetSync);
            resetSyncIf.IfExpr = new ProtoCore.VHDL.AST.BinaryExpressionNode(
                new ProtoCore.VHDL.AST.IdentifierNode(ProtoCore.VHDL.Constants.Naming.ResetSignalName),
                new ProtoCore.VHDL.AST.BitStringNode(1),
                ProtoCore.VHDL.AST.BinaryExpressionNode.Operator.Eq
                );

            resetSyncIf.ElsifExprList.Add(new ProtoCore.VHDL.AST.BinaryExpressionNode(
                                              new ProtoCore.VHDL.AST.IdentifierNode(ProtoCore.VHDL.Constants.Naming.ResetSignalName),
                                              new ProtoCore.VHDL.AST.BitStringNode(0),
                                              ProtoCore.VHDL.AST.BinaryExpressionNode.Operator.Eq
                                              ));

            return(resetSyncIf);
        }