/// <summary> /// Writes a signal assignment target. /// </summary> /// <param name="target">the target</param> public virtual void writeSignalAssignmentTarget(ISignalAssignmentTarget target) { if (target is Aggregate) { writeExpression((Aggregate)target); } else if (target is Expression) { writeExpression((Expression)target); } else if (target == null) { //ignore } else { throw new ArgumentException("Unknown signal assignment target."); } }
public void ObserveSignalAssignmentStatement(VHDLCompilerInterface compiler, SignalAssignment statement) { ISignalAssignmentTarget interpretedTarget = statement.Target; if (interpretedTarget is Expression) { string target = VHDLOperandGenerator.GetOperand(interpretedTarget as Expression, compiler, false); if ((statement.Waveform.Count == 1) && (statement.Waveform[0].After == null)) { string value = VHDLOperandGenerator.GetOperand(statement.Waveform[0].Value, compiler); RegisterDutyCycleDelayEvent template = new RegisterDutyCycleDelayEvent(target, value); code = template.TransformText(); } else { List <string> events = new List <string>(); foreach (VHDL.WaveformElement wfe in statement.Waveform) { events.Add(GetScheduledEvent(compiler, wfe)); } if (statement.DelayMechanism == VHDL.DelayMechanism.TRANSPORT) { RegisterTransportDelayEvent template = new RegisterTransportDelayEvent(target, events); code = template.TransformText(); } else { RegisterInertialDelayEvent template; if (statement.DelayMechanism.PulseRejectionLimit == null) { template = new RegisterInertialDelayEvent(target, events); } else { string Rejection = VHDLOperandGenerator.GetOperand(statement.DelayMechanism.PulseRejectionLimit, compiler); template = new RegisterInertialDelayEvent(target, events, Rejection); } code = template.TransformText(); } } } }