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();
        }
Ejemplo n.º 2
0
        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();
        }
Ejemplo n.º 3
0
        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();
                    }
                }
            }
        }