public SubscriptionFramework() { m_angleReference = new SignalAssignment(); m_subscribers = new List <ISubscriber>(); m_allSignalGroups = new HashSet <SignalGroup>(); m_allSignals = new HashSet <MetadataBase>(); m_activeSignalGroups = new HashSet <SignalGroup>(); m_activeSignals = new HashSet <MetadataBase>(); ReLoadSignalsAndSignalGroups(); m_updateFramework = new UpdateFramework(); }
protected override void visitSignalAssignment(SignalAssignment statement) { appendLabel(statement); output.writeSignalAssignmentTarget(statement.Target); writer.Append(" <= "); if (statement.DelayMechanism != null) { output.getMiscellaneousElementOutput().delayMechanism(statement.DelayMechanism); writer.Append(' '); } output.getMiscellaneousElementOutput().waveform(statement.Waveform); writer.Append(";").NewLine(); }
internal override void addClockAssignments(List <SequentialStatement> statements) { SequentialStatement signalAssignment = new SignalAssignment(Name.reference(output), Name.reference(input)); if (writeEnable != null) { Expression writeEnableCondition = new Equals(Name.reference(writeEnable), StdLogic1164.STD_LOGIC_1); IfStatement writeEnableIf = new IfStatement(writeEnableCondition); writeEnableIf.Statements.Add(signalAssignment); statements.Add(writeEnableIf); } else { statements.Add(signalAssignment); } }
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(); } } } }