اليوم، نتحدث عن موضوع شيق من عالم تصميم الدوائر الرقمية ومحاكاتها، مستوحى من خبر عن أداة محاكاة المنطق في المتصفح «Boolflow» وتقنيتها لـ'تسوية الدوائر الفرعية'. تخيل أنك تقوم ببناء مدينة ضخمة باستخدام مكعبات الليغو. بدلاً من بناء كل منزل أو بناية من الصفر، قد تستخدم تصاميم جاهزة لمنازل صغيرة أو متاجر (هذه هي 'الدوائر الفرعية' أو 'المكونات'). يمكنك تكرار استخدام هذه التصاميم عدة مرات في مدينتك.

عندما تريد معرفة كيفية عمل مدينتك ككل – مثلاً، كيف تتدفق حركة المرور أو كيف تتصل الخدمات – سيكون من الصعب تحليل كل تصميم جاهز ككتلة واحدة معقدة. هنا يأتي دور مفهوم 'التسوية' (Flattening). التسوية تعني ببساطة فك هذه التصاميم الجاهزة أو 'المكونات الفرعية' إلى أجزائها الأساسية الأصغر. فبدلاً من رؤية 'منزل صغير'، يرى المحاكي (أو المخطط) كل طوبة على حدة، وكل سلك يربط بينها.

في عالم الدوائر الرقمية، 'الدوائر الفرعية' هي كتل منطقية معقدة مثل جمع كامل (Full Adder) أو مسجل (Register) التي تتكون بدورها من بوابات منطقية أبسط (AND, OR, NOT). عندما يقوم برنامج المحاكاة مثل «Boolflow» بتجهيز الدائرة، فإنه 'يسويها'. هذا يعني أنه يأخذ كل كتلة معقدة ويستبدلها بتفاصيلها الداخلية من البوابات المنطقية الأساسية والأسلاك. النتيجة هي دائرة 'مسطحة' واحدة ضخمة تتكون فقط من المكونات الأبسط التي يمكن للمحاكي فهمها ومعالجتها بسهولة وكفاءة.

للحفاظ على تتبع كل جزء، حتى عندما تكون هناك دوائر فرعية متداخلة (كتلة داخل كتلة) أو نستخدم نفس الكتلة الفرعية عدة مرات، يتم استخدام 'معرفات المسار' (Path IDs). تخيل أنك سميت الطوابق في المنزل الأول 'منزل_1/طابق_أول' وفي المنزل الثاني 'منزل_2/طابق_أول'. هذا يضمن أن كل جزء داخل الدائرة المسطحة لديه اسم فريد، مما يسهل على المحاكي تتبع حالته وسلوكه. بهذه الطريقة، يمكن للمهندسين تصميم دوائر معقدة بشكل منظم باستخدام مكونات قابلة لإعادة الاستخدام، بينما يظل المحاكي قادرًا على فهم وتحليل الدائرة على مستوى أدنى وأكثر تفصيلاً. هذا يبسط عملية المحاكاة بشكل كبير ويجعلها أكثر فعالية.