Ejemplo n.º 1
0
        /// <summary>
        /// Appends a compiled DS script statment to the execution body
        /// </summary>
        /// <param name="executionStmt"></param>
        public void AppendExecutionStatement(VHDLNode executionStmt)
        {
            ExecutionBody.Add(executionStmt);

            // If the stmt is a signal assignment, update the lhs signal
            AssignmentNode assignNode = executionStmt as AssignmentNode;

            if (assignNode != null)
            {
                ProcessNode process = GetCurrentProcess();
                Validity.Assert(assignNode.LHS is IdentifierNode);
                process.AssignedSignals.Add((assignNode.LHS as IdentifierNode).Value);
            }
        }
Ejemplo n.º 2
0
 public BinaryExpressionNode(VHDLNode lhs, VHDLNode rhs, Operator optr)
 {
     this.LHS  = lhs;
     this.RHS  = rhs;
     this.Optr = optr;
 }
Ejemplo n.º 3
0
 public AssignmentNode(VHDLNode lhs, VHDLNode rhs, bool isSignal = true)
 {
     LHS = lhs;
     RHS = rhs;
     IsSignalAssignment = isSignal;
 }
Ejemplo n.º 4
0
        public override string ToString()
        {
            StringBuilder sbIfExpr = new StringBuilder();

            // Optional name
            if (!string.IsNullOrEmpty(Name))
            {
                sbIfExpr.Append(Name);
                sbIfExpr.Append(" ");
                sbIfExpr.Append(":");
                sbIfExpr.Append(" ");
            }

            // An ifnode must always have an expression
            Validity.Assert(sbIfExpr != null);

            // If expr
            sbIfExpr.Append(ProtoCore.VHDL.Constants.Keyword.If);
            sbIfExpr.Append(" ");
            sbIfExpr.Append(IfExpr.ToString());
            sbIfExpr.Append(" ");
            sbIfExpr.Append(ProtoCore.VHDL.Constants.Keyword.Then);
            sbIfExpr.Append("\n");

            // If body
            StringBuilder sbIfBody = new StringBuilder();

            foreach (AST.VHDLNode node in IfBody)
            {
                sbIfBody.Append(node.ToString());
                sbIfBody.Append("\n");
            }
            sbIfBody.Append("\n");

            // Elsif expr
            StringBuilder sbElsifStmt = new StringBuilder();

            if (ElsifExprList.Count > 0)
            {
                for (int i = 0; i < ElsifExprList.Count; ++i)
                {
                    VHDLNode exprNode = ElsifExprList[i];
                    sbElsifStmt.Append(ProtoCore.VHDL.Constants.Keyword.Elsif);
                    sbElsifStmt.Append(" ");
                    sbElsifStmt.Append(exprNode.ToString());
                    sbElsifStmt.Append(" ");
                    sbElsifStmt.Append(ProtoCore.VHDL.Constants.Keyword.Then);
                    sbElsifStmt.Append("\n");

                    // Elsif body
                    foreach (VHDLNode node in ElsifBodyList[i])
                    {
                        sbElsifStmt.Append(node.ToString());
                        sbElsifStmt.Append("\n");
                    }
                    sbElsifStmt.Append("\n");
                }
            }

            // Else
            StringBuilder sbElse     = new StringBuilder();
            StringBuilder sbElseBody = new StringBuilder();

            if (ElseBody.Count > 0)
            {
                sbElse.Append(ProtoCore.VHDL.Constants.Keyword.Else);
                sbElse.Append("\n\t");

                // Else body
                foreach (AST.VHDLNode node in ElseBody)
                {
                    sbElseBody.Append(node.ToString());
                    sbElseBody.Append("\n");
                }
                sbElseBody.Append("\n");
            }

            StringBuilder sbEndIf = new StringBuilder();

            sbEndIf.Append(ProtoCore.VHDL.Constants.Keyword.End);
            sbEndIf.Append(" ");
            sbEndIf.Append(ProtoCore.VHDL.Constants.Keyword.If);
            sbEndIf.Append(" ");
            sbEndIf.Append(Name);
            sbEndIf.Append(";");


            StringBuilder sbFormat = new StringBuilder();

            sbFormat.Append(sbIfExpr);
            sbFormat.Append(sbIfBody);
            sbFormat.Append(sbElsifStmt);
            sbFormat.Append(sbElse);
            sbFormat.Append(sbElseBody);
            sbFormat.Append(sbEndIf);
            return(sbFormat.ToString());
        }