/// <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); } }
public BinaryExpressionNode(VHDLNode lhs, VHDLNode rhs, Operator optr) { this.LHS = lhs; this.RHS = rhs; this.Optr = optr; }
public AssignmentNode(VHDLNode lhs, VHDLNode rhs, bool isSignal = true) { LHS = lhs; RHS = rhs; IsSignalAssignment = isSignal; }
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()); }