| // |
| // Copyright (c) 2010-2022 Antmicro |
| // |
| // This file is licensed under the MIT License. |
| // Full license text is available in 'licenses/MIT.txt'. |
| // |
| |
| using System; |
| using System.Linq; |
| using Antmicro.Renode.Core; |
| using Antmicro.Renode.Core.Structure.Registers; |
| using Antmicro.Renode.Utilities; |
| |
| namespace Antmicro.Renode.Peripherals |
| { |
| public class ReferencingPeripheral : BasicDoubleWordPeripheral, IKnownSize |
| { |
| public ReferencingPeripheral(Machine machine) : base(machine) |
| { |
| IValueRegisterField value; |
| |
| Registers.Base.Define(this) |
| .WithValueField(0, 32, out value, FieldMode.Write); |
| |
| Registers.Multiplier.Define(this) |
| .WithValueField(0, 32, FieldMode.Read, valueProviderCallback: _ => value.Value * 2); |
| |
| Registers.BitCounter.Define(this) |
| .WithValueField(0, 32, FieldMode.Read, valueProviderCallback: _ => (uint)BitHelper.GetBits(value.Value).Where(x => x).Select(x => 1).Sum(x => x)); |
| } |
| |
| public long Size => ReferencedType.Size; |
| |
| private enum Registers : long |
| { |
| Base = 0x0, |
| Multiplier = 0x04, |
| BitCounter = 0x08, |
| } |
| } |
| } |