1 // 2 // Copyright (c) 2010-2022 Antmicro 3 // 4 // This file is licensed under the MIT License. 5 // Full license text is available in 'licenses/MIT.txt'. 6 // 7 8 using System; 9 using System.Linq; 10 using Antmicro.Renode.Core; 11 using Antmicro.Renode.Core.Structure.Registers; 12 using Antmicro.Renode.Utilities; 13 14 namespace Antmicro.Renode.Peripherals 15 { 16 public class ReferencingPeripheral : BasicDoubleWordPeripheral, IKnownSize 17 { ReferencingPeripheral(Machine machine)18 public ReferencingPeripheral(Machine machine) : base(machine) 19 { 20 IValueRegisterField value; 21 22 Registers.Base.Define(this) 23 .WithValueField(0, 32, out value, FieldMode.Write); 24 25 Registers.Multiplier.Define(this) 26 .WithValueField(0, 32, FieldMode.Read, valueProviderCallback: _ => value.Value * 2); 27 28 Registers.BitCounter.Define(this) 29 .WithValueField(0, 32, FieldMode.Read, valueProviderCallback: _ => (uint)BitHelper.GetBits(value.Value).Where(x => x).Select(x => 1).Sum(x => x)); 30 } 31 32 public long Size => ReferencedType.Size; 33 34 private enum Registers : long 35 { 36 Base = 0x0, 37 Multiplier = 0x04, 38 BitCounter = 0x08, 39 } 40 } 41 } 42