
HAL [/hel/] एक व्यापक नेटलिस्ट रिवर्स इंजीनियरिंग और हेरफेर फ्रेमवर्क है।
नेटलिस्ट विश्लेषण पर उपलब्ध लगभग सभी शोध निरीक्षण के तहत नेटलिस्ट के ग्राफ-आधारित प्रतिनिधित्व पर काम करते हैं। इसके मूल में, HAL वही प्रदान करता है: एक फ्रेमवर्क जो मनमाने स्रोतों, जैसे FPGA या ASIC, से नेटलिस्ट को पार्स करके ग्राफ-आधारित नेटलिस्ट प्रतिनिधित्व में बदलता है और शामिल गेट्स और नेट्स के ट्रैवर्सल और विश्लेषण के लिए आवश्यक अंतर्निहित उपकरण प्रदान करता है।
हमारी दृष्टि यह है कि HAL IDA या Ghidra जैसे उपकरणों के हार्डवेयर-रिवर्स-इंजीनियरिंग समकक्ष बन जाए। हम चाहते हैं कि HAL शोधकर्ताओं और विश्लेषकों के लिए एक सामान्य आधार रेखा सक्षम करे, ताकि शोध परिणामों की पुनरुत्पादनशीलता में सुधार हो और नेटलिस्ट पार्सिंग जैसे आवर्ती बुनियादी कार्यों को दूर किया जा सके।
HAL को सक्रिय रूप से मैक्स प्लैंक इंस्टीट्यूट फ़ॉर सिक्योरिटी एंड प्राइवेसी के एम्बेडेड सिक्योरिटी समूह द्वारा विकसित किया जा रहा है। कई शोध परियोजनाओं के अलावा, इसका उपयोग रूहर यूनिवर्सिटी बोखुम (RUB) में हमारे विश्वविद्यालय व्याख्यान "Einführung ins Hardware Reverse Engineering" (हार्डवेयर रिवर्स इंजीनियरिंग का परिचय) में भी किया जाता है।
ध्यान दें कि हमारे पास एक अलग रिपॉजिटरी में नेटलिस्ट रिवर्स इंजीनियरिंग तकनीकों के मूल्यांकन के लिए आधुनिक अत्याधुनिक बेंचमार्क सर्किट का एक सेट भी उपलब्ध है।
इस रिपॉजिटरी में चयनित प्लगइन्स का एक संग्रह है:
liberty गेट लाइब्रेरी प्रारूप में मनमानी गेट लाइब्रेरी के लिए समर्थन जोड़ता हैHAL की सुविधाओं का एक व्यापक दस्तावेज़ीकरण हमारे Wiki में उपलब्ध है। इसके अलावा, हम पूर्ण C++ API और Python API दस्तावेज़ीकरण प्रदान करते हैं।
HAL बनाने के निर्देशों के लिए, कृपया हमारे Wiki में समर्पित पृष्ठ देखें।
HAL स्थापित करें या बनाएं और hal -g के माध्यम से GUI प्रारंभ करें। आप hal [--help|-h] के माध्यम से सभी उपलब्ध विकल्पों को सूचीबद्ध कर सकते हैं।
हमने examples उपनिर्देशिका में कुछ उदाहरण प्रोजेक्ट शामिल किए हैं। एक उदाहरण प्रोजेक्ट के साथ शुरू करने के लिए आपको इसे
मुख्य मेनू से Import Project के माध्यम से आयात करना होगा या ज़िप की गई फ़ाइल को वेलकम स्क्रीन के OPEN PROJECT क्षेत्र में छोड़ना होगा।
ऐसा करने पर एक पॉपअप लेखन अनुमतियों वाली निर्देशिका का अनुरोध करेगा जहां HAL प्रोजेक्ट निर्देशिका बनाएगा और फ़ाइलों को अनज़िप करेगा।
अनज़िप करने के लिए बाहरी उपकरणों का उपयोग न करें क्योंकि अनुकूलन किए जाते हैं ताकि अगली बार प्रोजेक्ट खोलने पर नेटलिस्ट और गेट लाइब्रेरी मिल जाए।
यदि आप अपनी स्वयं की Verilog या VHDL नेटलिस्ट खोलना चाहते हैं, तो आपको इसके बजाय Import Netlist चलाना होगा। यह तभी काम करेगा जब
plugins/gate_libraries/definitions में कोई मिलान गेट लाइब्रेरी हो या आप गेट लाइब्रेरी मैन्युअल रूप से प्रदान करें।
अपनी स्वयं की गेट लाइब्रेरी बनाने के निर्देशों और अन्य उपयोगी ट्यूटोरियल के लिए, wiki देखें।
निम्नलिखित उदाहरण कोड fsm उदाहरण को संदर्भित करता है।
इंटरैक्ट करने के लिए एकीकृत Python शेल या Python स्क्रिप्ट विंडो का उपयोग करें। दोनों में (सीमित) ऑटोकम्पलीट कार्यक्षमता है।
आइए सभी लुकअप टेबल को सूचीबद्ध करें और उनके बूलियन फंक्शन प्रिंट करें:
for gate in netlist.get_gates():
if "LUT" in gate.type.name:
print("{} (id {}, type {})".format(gate.name, gate.id, gate.type.name))
print(" {}-to-{} LUT".format(len(gate.type.input_pins), len(gate.type.output_pins)))
boolean_functions = gate.boolean_functions
for name in boolean_functions:
print(" {}: {}".format(name, boolean_functions[name]))
print("")
उदाहरण नेटलिस्ट fsm.vhd के लिए यह प्रिंट करता है:
FSM_sequential_STATE_REG_0_i_3_inst (id 4, type LUT6)
6-to-1 LUT
O: (!I1 & !I2 & I3 & !I4 & I5) | (I0 & !I2) | (I0 & I1) | (I0 & I3) | (I0 & I4) | (I0 & I5)
FSM_sequential_STATE_REG_0_i_2_inst (id 3, type LUT6)
6-to-1 LUT
O: (I2 & I3 & I4 & !I5) | (I1 & !I5) | (I1 & !I4) | (I1 & !I3) | (I0 & I1) | (I1 & I2)
FSM_sequential_STATE_REG_1_i_3_inst (id 6, type LUT6)
6-to-1 LUT
O: (!I1 & I4 & !I5) | (!I1 & !I3 & I4) | (I0 & I4 & !I5) | (I0 & !I3 & I4) | (!I1 & I2 & I4) | (I0 & I2 & I4) | (!I2 & !I5) | (!I2 & !I4) | (!I2 & !I3) | (!I0 & !I4) | (!I0 & !I2) | (!I0 & !I1) | (I1 & !I4) | (I1 & !I2) | (I0 & I1) | (I3 & !I5) | (I3 & !I4) | (!I0 & I3) | (I1 & I3) | (I2 & I3) | (!I4 & I5) | (!I3 & I5) | (!I0 & I5) | (I1 & I5) | (I2 & I5)
FSM_sequential_STATE_REG_1_i_2_inst (id 5, type LUT6)
6-to-1 LUT
O: (!I0 & I1 & !I2 & I3 & I4 & !I5) | (I0 & !I2 & I3 & I4 & I5)
OUTPUT_BUF_0_inst_i_1_inst (id 18, type LUT1)
1-to-1 LUT
O: !I0
OUTPUT_BUF_1_inst_i_1_inst (id 20, type LUT2)
2-to-1 LUT
O: (I0 & !I1) | (!I0 & I1)
आप HAL के विकास में योगदान करने के लिए स्वागत है। कृपया GitHub के माध्यम से एक नया पुल अनुरोध सबमिट करने में संकोच न करें।
कृपया उससे पहले स्थैतिक जांच + clang format चलाने पर विचार करें।
आप इन जांचों को किसी भी कमिट से पहले git हुक के रूप में भी स्थापित कर सकते हैं।
क्लैंग-फॉर्मेट हुक स्थापित करने के लिए git-hooks स्थापित करें और चलाएं:
git hooks --install