FpgaVersion.cs 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace Uestc.Auto6.Dso.Hardware.Driver
  7. {
  8. internal class FpgaVersion
  9. {
  10. public int MaxNum
  11. {
  12. get;
  13. set;
  14. }
  15. public int SubNum
  16. {
  17. get;
  18. set;
  19. }
  20. public int MinNum
  21. {
  22. get;
  23. set;
  24. }
  25. public string Designer
  26. {
  27. get;
  28. set;
  29. } = "";
  30. public string Comment
  31. {
  32. get;
  33. set;
  34. } = "";
  35. public DateTime BuildTime
  36. {
  37. get;
  38. set;
  39. }
  40. public string BuildTimeString
  41. {
  42. get
  43. {
  44. return BuildTime.Year + "-" + BuildTime.Month.ToString().PadLeft(2, '0') + "-"+BuildTime.Day.ToString().PadLeft(2, '0') + " " + BuildTime.Hour.ToString().PadLeft(2, '0') + ":" + BuildTime.Minute.ToString().PadLeft(2, '0') + ":" + BuildTime.Second.ToString().PadLeft(2, '0');
  45. }
  46. }
  47. public override string ToString()
  48. {
  49. return $"[Version:{MaxNum}.{SubNum}.{MinNum},CompileTime={BuildTimeString},Designer={Designer},Comment={Comment}]";
  50. }
  51. internal static bool ReadFPGAVersion(FpgaVersionRegs regs, ref FpgaVersion fpgaVersion)
  52. {
  53. int findFirstZeroPos(byte[] source)
  54. {
  55. for (int i = 0; i < source.Length; i++)
  56. {
  57. if (source[i] == 0)
  58. return i;
  59. }
  60. return source.Length;
  61. }
  62. #region 编译时间
  63. Int64 readBackCompileTime = 0;
  64. readBackCompileTime = HdIO.ReadReg(regs.CompileTime_H16);
  65. readBackCompileTime <<= 16;
  66. readBackCompileTime |= HdIO.ReadReg(regs.CompileTime_L16);
  67. if (readBackCompileTime == 0)
  68. return false;
  69. DateTime compileTime = new DateTime(1970, 1, 1, 0, 0, 0);
  70. compileTime = compileTime.AddSeconds(readBackCompileTime);
  71. compileTime = TimeZoneInfo.ConvertTimeFromUtc(compileTime, TimeZoneInfo.Local);
  72. fpgaVersion.BuildTime = compileTime;
  73. #endregion
  74. #region version
  75. UInt32 readBackVersion = 0;
  76. readBackVersion = HdIO.ReadReg(regs.VerionNo_H16);
  77. readBackVersion <<= 16;
  78. readBackVersion |= HdIO.ReadReg(regs.VerionNo_L16);
  79. fpgaVersion.MinNum = (Int32)(readBackVersion & 0xffff);
  80. fpgaVersion.SubNum = (Int32)(readBackVersion >> 16 & 0xff);
  81. fpgaVersion.MaxNum = (Int32)(readBackVersion >> 24 & 0xff);
  82. #endregion
  83. #region designer
  84. UInt16[] readBackDesigner = new UInt16[4];
  85. for (int i = 0; i < 4; i++)
  86. readBackDesigner[i] = (UInt16)HdIO.ReadReg(regs.Designer_Words[i]);
  87. byte[] bytesDesigner = new byte[8];
  88. Buffer.BlockCopy(readBackDesigner, 0, bytesDesigner, 0, 8);
  89. byte[] bytesDesigner2 = bytesDesigner.Reverse<byte>().ToArray();
  90. int firstZeroPos = findFirstZeroPos(bytesDesigner2);
  91. fpgaVersion.Designer = System.Text.Encoding.UTF8.GetString(bytesDesigner2, 0, firstZeroPos);
  92. #endregion
  93. #region comment
  94. UInt16[] readbackComment = new ushort[16];
  95. for (int i = 0; i < 16; i++)
  96. readbackComment[i] = (UInt16)HdIO.ReadReg(regs.Comment_Words[i]);
  97. byte[] bytesComment = new byte[16 * 2];
  98. Buffer.BlockCopy(readbackComment, 0, bytesComment, 0, 16 * 2);
  99. byte[] bytesComment2 = bytesComment.Reverse<byte>().ToArray();
  100. firstZeroPos = findFirstZeroPos(bytesComment2);
  101. fpgaVersion.Comment = System.Text.Encoding.UTF8.GetString(bytesComment2, 0, firstZeroPos);
  102. #endregion
  103. return true;
  104. }
  105. public static string GetAllFPGAVersionInfo()
  106. {
  107. StringBuilder stringBuilder = new StringBuilder();
  108. stringBuilder.AppendLine($"[PCIE_Board]:{ Hd.currProduct?.PcieBd?.FpgaVersion?.ToString()}");
  109. stringBuilder.AppendLine($"[S6_Board]:{ Hd.currProduct?.S6Bd?.FpgaVersion?.ToString()}");
  110. stringBuilder.AppendLine($"[Process_Board]:{ Hd.currProduct?.ProcBd?.FpgaVersion?.ToString()}");
  111. for (int fpgaIndex = 0; fpgaIndex < AbstractAcqBd.FPGATotalCount; fpgaIndex++)
  112. {
  113. FpgaVersion? fpgaVersion = Hd.currProduct?.AcqBd?.GetFpgaVersion(fpgaIndex)??null;
  114. if (fpgaVersion != null)
  115. stringBuilder.AppendLine($"[Acq_Board{fpgaIndex + 1}]:{fpgaVersion.ToString()}");
  116. }
  117. return stringBuilder.ToString();
  118. }
  119. }
  120. internal record FpgaVersionRegs(
  121. UInt32 CompileTime_L16, UInt32 CompileTime_H16,
  122. UInt32 VerionNo_L16, UInt32 VerionNo_H16,
  123. UInt32[/*4*/] Designer_Words,
  124. UInt32[/*16*/] Comment_Words);
  125. }