Ejemplo n.º 1
0
        private void btnAdd_Click(Object sender, EventArgs e)
        {
            var unit = new RegisterUnit();

            if (_data.Count > 0)
            {
                unit.Address = _data[^ 1].Address + 1;
Ejemplo n.º 2
0
        private void btnAdd_Click(Object sender, EventArgs e)
        {
            var unit = new RegisterUnit();

            if (_data.Count > 0)
            {
                unit.Address = _data[_data.Count - 1].Address + 2;
            }
            _data.Add(unit);

            dgv.DataSource = null;
            dgv.DataSource = _data;
            dgv.Refresh();
        }
Ejemplo n.º 3
0
        private void writeDataPathRegister(StreamWriter stream, RegisterUnit registerUnit)
        {
            var bits = registerUnit.Registers.Max(reg => reg.Bits);

            stream.WriteLine();
            stream.WriteLine($"\t-- {registerUnit.Name} ({string.Join(", ", registerUnit.Registers.Select(reg => reg.Name))})");
            stream.WriteLine($"\t{registerUnit.Name} : c_register");
            stream.WriteLine($"\t\tgeneric map({bits})");
            stream.WriteLine("\t\tport map");
            stream.WriteLine("\t\t(");
            stream.Write($"\t\t\tinput({bits - 1} downto 0) => ");

            //wire up the input
            if (registerUnit.Registers.Length == 1)
            {
                var reg = registerUnit.Registers.First();
                //if the input is an input variable
                if (reg is InputRegister)
                {
                    stream.WriteLine($"{reg.Name}({reg.Bits - 1} downto 0),");
                }
                //else if input is a single functional unit
                else
                {
                    var functionalUnit = Functional.Units.First(item => item.Operations.Any(op => op.Output == reg));
                    stream.WriteLine($"{functionalUnit.Name}_out({functionalUnit.Bits - 1} downto 0), -- Operations: {string.Join(", ", functionalUnit.Operations.Where(op => op.Output == reg).Select(op => op.Name))}");
                }
            }
            //else if the input is multiple function units
            else
            {
                var inputMultiplexor = Multiplexers.RegisterUnitMultiplexers.First(multiplexer => multiplexer.Unit == registerUnit);
                stream.WriteLine($"{inputMultiplexor.Name}_out({inputMultiplexor.OutputBitSize - 1} downto 0), -- Items: {string.Join(", ", inputMultiplexor.ItemNames)}");
            }

            //wire up the store value control wire
            stream.WriteLine($"\t\t\twr => ctrl({registerUnit.Index}),");

            //wire up the clear value control wire
            stream.WriteLine("\t\t\tclear => clear,");

            //wire up the clock signal
            stream.WriteLine("\t\t\tclock => clock,");

            //wire up the output
            stream.WriteLine($"\t\t\toutput => {registerUnit.Name}_out");

            stream.WriteLine("\t\t);");
        }
        private string writeControllerValueFor(StreamWriter stream, RegisterUnit unit, int cycle, int index)
        {
            stream.Write($"\t\t\t\tcontrol_bus({index}) <= '");

            var inputReg = unit.Registers.OfType <InputRegister>().FirstOrDefault();

            if (cycle == 0 && inputReg != null)
            {
                stream.WriteLine($"1'; -- {unit.Name}: store input {inputReg.Name}");
                return("1");
            }

            var operation = AifFile.Operations.Values.FirstOrDefault(op => op.CycleIndex == cycle && unit.Registers.Any(reg => reg == op.Output));

            stream.WriteLine(operation != null ?
                             $"1'; -- {unit.Name}: store output from operation {operation.Name}" :
                             $"0'; -- {unit.Name}: keep value");

            return(operation != null ? "1" : "0");
        }
Ejemplo n.º 5
0
 public RegisterMappingAttribute(uint address, RegisterType type = RegisterType.Object, RegisterUnit unit = RegisterUnit.None)
 {
     Address = address;
     Type    = type;
     Unit    = unit;
 }
        /// <summary>
        /// Открывает указанный программный модуль во вкладке.
        /// </summary>
        /// <param name="unit">Открываемый программный модуль.</param>
        private void OpenUnitTab(RegisterUnit unit)
        {
            TabPage page = new TabPage(unit.Name);
            page.Tag = unit;

            RegisterCodeEditor editor = new RegisterCodeEditor();
            editor.IsParallel = _parallelMode;
            editor.Text = unit.Code;
            page.Controls.Add(editor);
            editor.Dock = DockStyle.Fill;
            editor.TextChanged += DataChangedHandler;
            editor.BreakPointToggled += BreakPointToggled;

            tabCtrl.TabPages.Add(page);
        }
        /// <summary>
        /// Загружает все программные модули, связанные с проектом, и заносит их в список модулей.
        /// </summary>
        /// <returns>Массив загруженных программных модулей.</returns>
        private void LoadProjectUnits()
        {
            string ext = ".rmc";
            string[] files = Array.FindAll(_project.GetFiles(), x => x.Substring(x.Length - ext.Length) == ext);

            List<RegisterUnit> units = new List<RegisterUnit>();
            RegisterUnit unit;
            foreach(string file in files)
            {
                unit = new RegisterUnit()
                {
                    Name = Path.GetFileNameWithoutExtension(file),
                    Code = _project.LoadString(file)
                };
                units.Add(unit);
            }

            _units = units;
        }
 /// <summary>
 /// Создает новый программный модуль с указанным именем и открывает его во вкладке.
 /// </summary>
 /// <param name="name">Имя создаваемого модуля.</param>
 private void CreateUnit(string name)
 {
     RegisterUnit unit = new RegisterUnit() { Name = name, Code = "" };
     _units.Add(unit);
     OpenUnitTab(unit);
 }