private void btnAdd_Click(Object sender, EventArgs e) { var unit = new RegisterUnit(); if (_data.Count > 0) { unit.Address = _data[^ 1].Address + 1;
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(); }
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"); }
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); }