53 def WriteCommonHeader(self):
54
55
56
57
58 self.CommonHeaderFileScala.write("""package hwdbg.script
59
60import chisel3._
61import chisel3.util._
62
63/**
64 * @brief
65 * The structure of HWDBG_SHORT_SYMBOL used in script engine of HyperDbg
66 */
67class HwdbgShortSymbol(
68 scriptVariableLength: Int
69) extends Bundle {
70
71 //
72 // Ensure that the script variable length is at least 8 bits or 1 byte
73 //
74 require(
75 scriptVariableLength >= 8,
76 f"err, the minimum script variable length is 8 bits (1 byte)."
77 )
78
79 val Type = UInt(scriptVariableLength.W) // long long unsigned is 64 bits but it can be dynamic
80 val Value = UInt(scriptVariableLength.W) // long long unsigned is 64 bits but it can be dynamic
81}
82
83/**
84 * @brief
85 * Constant values for the script engine
86 */
87object ScriptConstants {
88 val SYMBOL_MEM_VALID_CHECK_MASK = 1 << 31
89 val INVALID = 0x80000000
90 val LALR_ACCEPT = 0x7fffffff
91}
92
93/**
94 * @brief
95 * Constant type values for the script engine
96 */
97object ScriptConstantTypes {
98 object ScriptDataTypes extends ChiselEnum {
99 val symbolUndefined, symbolGlobalIdType, symbolLocalIdType, symbolNumType, symbolRegisterType, symbolPseudoRegType, symbolSemanticRuleType, symbolTempType, symbolStringType, symbolVariableCountType, symbolInvalid, symbolWstringType, symbolFunctionParameterIdType, symbolReturnAddressType, symbolFunctionParameterType, symbolStackIndexType, symbolStackBaseIndexType, symbolReturnValueType = Value
100 }
101}
102
103""")
104
105
106
107 self.CommonHeaderFile.write(
108 """#pragma once
109#ifndef SCRIPT_ENGINE_COMMON_DEFINITIONS_H
110#define SCRIPT_ENGINE_COMMON_DEFINITIONS_H
111
112typedef struct SYMBOL
113{
114 long long unsigned Type;
115 long long unsigned Len;
116 long long unsigned Value;
117
118} SYMBOL, *PSYMBOL;
119
120#define SIZE_SYMBOL_WITHOUT_LEN sizeof(long long unsigned) * 2
121
122typedef struct HWDBG_SHORT_SYMBOL
123{
124 long long unsigned Type;
125 long long unsigned Value;
126
127} HWDBG_SHORT_SYMBOL, *PHWDBG_SHORT_SYMBOL;
128
129typedef struct SYMBOL_BUFFER {
130 PSYMBOL Head;
131 unsigned int Pointer;
132 unsigned int Size;
133 char* Message;
134} SYMBOL_BUFFER, * PSYMBOL_BUFFER;
135
136typedef struct SYMBOL_MAP
137{
138 char* Name;
139 long long unsigned Type;
140} SYMBOL_MAP, * PSYMBOL_MAP;
141
142typedef struct ACTION_BUFFER {
143 long long unsigned Tag;
144 long long unsigned CurrentAction;
145 char ImmediatelySendTheResults;
146 long long unsigned Context;
147 char CallingStage;
148} ACTION_BUFFER, *PACTION_BUFFER;
149
150#define SYMBOL_UNDEFINED 0
151#define SYMBOL_GLOBAL_ID_TYPE 1
152#define SYMBOL_LOCAL_ID_TYPE 2
153#define SYMBOL_NUM_TYPE 3
154#define SYMBOL_REGISTER_TYPE 4
155#define SYMBOL_PSEUDO_REG_TYPE 5
156#define SYMBOL_SEMANTIC_RULE_TYPE 6
157#define SYMBOL_TEMP_TYPE 7
158#define SYMBOL_STRING_TYPE 8
159#define SYMBOL_VARIABLE_COUNT_TYPE 9
160#define SYMBOL_INVALID 10
161#define SYMBOL_WSTRING_TYPE 11
162#define SYMBOL_FUNCTION_PARAMETER_ID_TYPE 12
163#define SYMBOL_RETURN_ADDRESS_TYPE 13
164#define SYMBOL_FUNCTION_PARAMETER_TYPE 14
165#define SYMBOL_STACK_INDEX_TYPE 15
166#define SYMBOL_STACK_BASE_INDEX_TYPE 16
167#define SYMBOL_RETURN_VALUE_TYPE 17
168#define SYMBOL_REFERENCE_LOCAL_ID_TYPE 18
169#define SYMBOL_REFERENCE_TEMP_TYPE 19
170#define SYMBOL_DEREFERENCE_LOCAL_ID_TYPE 20
171#define SYMBOL_DEREFERENCE_TEMP_TYPE 21
172
173static const char *const SymbolTypeNames[] = {
174"SYMBOL_UNDEFINED",
175"SYMBOL_GLOBAL_ID_TYPE",
176"SYMBOL_LOCAL_ID_TYPE",
177"SYMBOL_NUM_TYPE",
178"SYMBOL_REGISTER_TYPE",
179"SYMBOL_PSEUDO_REG_TYPE",
180"SYMBOL_SEMANTIC_RULE_TYPE",
181"SYMBOL_TEMP_TYPE",
182"SYMBOL_STRING_TYPE",
183"SYMBOL_VARIABLE_COUNT_TYPE",
184"SYMBOL_INVALID",
185"SYMBOL_WSTRING_TYPE",
186"SYMBOL_FUNCTION_PARAMETER_ID_TYPE",
187"SYMBOL_RETURN_ADDRESS_TYPE",
188"SYMBOL_FUNCTION_PARAMETER_TYPE",
189"SYMBOL_STACK_INDEX_TYPE",
190"SYMBOL_STACK_BASE_INDEX_TYPE",
191"SYMBOL_RETURN_VALUE_TYPE",
192"SYMBOL_REFERENCE_LOCAL_ID_TYPE",
193"SYMBOL_REFERENCE_TEMP_TYPE",
194"SYMBOL_DEREFERENCE_LOCAL_ID_TYPE",
195"SYMBOL_DEREFERENCE_TEMP_TYPE"
196};
197
198#define SYMBOL_MEM_VALID_CHECK_MASK (1 << 31)
199#define INVALID 0x80000000
200#define LALR_ACCEPT 0x7fffffff
201
202\n\n""")
203
204
205