コード例 #1
0
        /// <summary>
        /// Returns the right-hand-side expression being assigned to <c>Target</c>.
        /// </summary>
        public Expression GetRHS()
        {
            var builder = new DefaultAlgorithmBuilder();

            ToProcess().Implement(builder);
            var stmt  = builder.Complete().Body.AsStatementList().First();
            var sstmt = stmt as StoreStatement;

            return(sstmt.Value);
        }
コード例 #2
0
        public void CreateStagedDecoder(IAutoBinder binder, SLVSignal cwSignal, SLSignal clkSignal, bool registered)
        {
            var       valWordInit   = StdLogicVector._0s(_vcf.ValueWordWidth);
            var       rcwSignal     = (SLVSignal)binder.GetSignal(EPortUsage.Default, "D1_CW", null, valWordInit);
            var       rcwSignalDesc = rcwSignal.Descriptor;
            SLVSignal rrcwSignal    = null;

            if (registered)
            {
                rrcwSignal = (SLVSignal)binder.GetSignal(EPortUsage.Default, "D2_CW", null, valWordInit);
            }

            var syncBuilder = new DefaultAlgorithmBuilder();

            syncBuilder.If(clkSignal.ToSignalRef(SignalRef.EReferencedProperty.RisingEdge));

            syncBuilder.Store(rcwSignal.ToSignalRef(SignalRef.EReferencedProperty.Next),
                              ((ISignal)cwSignal[_vcf.ValueWordWidth - 1, 0]).ToSignalRef(SignalRef.EReferencedProperty.Cur));
            if (registered)
            {
                syncBuilder.Store(rrcwSignal.ToSignalRef(SignalRef.EReferencedProperty.Next),
                                  rcwSignal.ToSignalRef(SignalRef.EReferencedProperty.Cur));
            }

            foreach (var ms in _strings)
            {
                ms.AssembleStagedDecoderSync(binder, syncBuilder, cwSignal, registered);
            }
            syncBuilder.EndIf();
            var syncFunc = syncBuilder.Complete();

            syncFunc.Name = "cwdecode_sync";
            binder.CreateProcess(SystemSharp.Components.Process.EProcessKind.Triggered, syncFunc, clkSignal.Descriptor);

            var combBuilder = new DefaultAlgorithmBuilder();
            var sensitivity = new HashSet <ISignalOrPortDescriptor>();

            sensitivity.Add(cwSignal.Descriptor);
            sensitivity.Add(rcwSignalDesc);
            if (registered)
            {
                sensitivity.Add(rrcwSignal.Descriptor);
            }
            foreach (var ms in _strings)
            {
                ms.AssembleStagedDecoderComb(combBuilder, registered ? rrcwSignal : rcwSignal, sensitivity, registered);
            }
            var combFunc = combBuilder.Complete();

            combFunc.Name = "cwdecode_comb";
            binder.CreateProcess(SystemSharp.Components.Process.EProcessKind.Triggered, combFunc, sensitivity.ToArray());
        }
コード例 #3
0
        public void CreateDecoder(IAutoBinder binder, SLVSignal cwSignal)
        {
            var pbuilder    = new DefaultAlgorithmBuilder();
            var sensitivity = new HashSet <ISignalOrPortDescriptor>();

            sensitivity.Add(cwSignal.Descriptor);
            foreach (var ms in _strings)
            {
                ms.AssembleDecoder(pbuilder, cwSignal, sensitivity);
            }
            var decFunc = pbuilder.Complete();

            decFunc.Name = "cwdecode";
            binder.CreateProcess(SystemSharp.Components.Process.EProcessKind.Triggered, decFunc, sensitivity.ToArray());
        }
コード例 #4
0
                public CommonClockProcess(SignalDescriptor clk)
                {
                    Contract.Requires <ArgumentNullException>(clk != null);

                    Clk = clk;
                    var frame = new DefaultAlgorithmBuilder();

                    var srClk = SignalRef.Create(Clk, SignalRef.EReferencedProperty.RisingEdge);
                    var lrClk = new LiteralReference(srClk);

                    frame.If(lrClk);
                    BodyBuilder = frame.BeginSubAlgorithm();
                    frame.EndIf();
                    FrameBuilder = frame;
                }