کیا آپ یقینی طور پر جانتے ہیں کہ آپ کے RISC-V RTL میں کوئی سرپرائز نہیں ہے؟

ماخذ نوڈ: 1600300

RISC-V RTL ڈیزائنز کی نسبتی نیاپن اور پیچیدگی کو دیکھتے ہوئے، چاہے آپ تجارتی طور پر تعاون یافتہ کور خرید رہے ہوں یا ایک مقبول اوپن سورس پیشکش کو ڈاؤن لوڈ کر رہے ہوں، آپ کے حتمی پروڈکٹ میں غیر مطلوبہ حیرتوں کے بچ جانے کا چھوٹا لیکن غیر صفر خطرہ ہے۔ زیادہ سے کم امکان کی ترتیب میں، غور کریں:

  • ایک عجیب و غریب ابھی تک مکمل طور پر ممکنہ کارنر کیس بگ کی موجودگی
  • کیڑے "اندر" حسب ضرورت ہدایات جو آپ یا آپ کا وینڈر آپ کی درخواست کے لیے بنا رہے ہیں۔
  • حسب ضرورت ہدایت کے "کناروں پر" کیڑے — مثلاً، ہدایات پر عمل درآمد صحیح طور پر ہوتا ہے، لیکن یہ کسی نہ کسی طرح مشین کو خراب حالت میں چھوڑ دیتا ہے۔
  • متعلقہ: غیر دستاویزی اور/یا ناقص طور پر متعین کردہ نئی خصوصیات جو انجانے میں ڈیزائن میں سوراخ کر دیتی ہیں
  • نقصان دہ ٹروجن منطق کو سپلائی چین حملے کے ذریعے خفیہ طور پر داخل کیا گیا۔

عام تخفیف کے طریقے

قدرتی طور پر، دفاع کی پہلی لائن آنے والے یا ترقی پذیر RTL کوڈ کا ماہر معائنہ ہے۔ ظاہر ہے، ایسا ہونا چاہیے؛ لیکن یہ اتنا ہی واضح ہونا چاہئے کہ یہ تکنیک - جیسا کہ وہ ریاضی کی دنیا میں کہتے ہیں - "ضروری ہے لیکن کافی نہیں" (چاہے آپ نے خود پروفیسر پیٹرسن کو اپنے کوڈ کا جائزہ لیا ہو)۔

دفاع کی اگلی لائن تخروپن پر مبنی نقطہ نظر کا اطلاق کر رہی ہے: انسٹرکشن سیٹ سمولیشن (ISS)، گولڈن ماڈلز کے لیے آپ کے DUT کا خودکار موازنہ، DUT RTL سمولیشن کے لیے محدود بے ترتیب UVM ٹیسٹ بینچز، اور یہاں تک کہ حقیقی دنیا کے محرک کو ہارڈ ویئر کی مدد سے ایمولیشن میں پائپ کرنا۔ DUT کے. ایک بار پھر، یہ تمام طریقے قابل قدر ہیں اور کیے جانے چاہئیں۔ لیکن وہ سب ایک ہی خامی سے دوچار ہیں: وہ فطری طور پر نامکمل ہیں کیونکہ وہ محرک پیدا کرنے پر انحصار کرتے ہیں۔ مثال کے طور پر، سپلائی چین اٹیک کے انتہائی لیکن ممکنہ معاملے میں، ٹروجن لاجک ڈویلپر نے جان بوجھ کر سگنلنگ اور ڈیٹا کا ایک متحرک سلسلہ بنایا ہے جو ممکنہ طور پر انتہائی تخلیقی سفید ہیٹ ہیکر کے ذریعے پتہ لگانے سے بچ جائے گا۔ اور ظاہر ہے، فنکشنل بگز کے پاس پوشیدہ رہنے کے لیے قدرتی طور پر پائے جانے والے اینٹروپی کو استعمال کرنے کا اپنا طریقہ ہے۔

سب سے اہم بات یہ ہے کہ مکمل طور پر اس بات کا یقین کرنے کا واحد طریقہ ہے کہ آپ کا RISC-V RTL کسی بھی قدرتی یا بدنیتی پر مبنی حیرت سے پاک ہے ڈیزائن کی تصدیق کے لیے مکمل، رسمی طریقوں کا اطلاق کرنا ہے۔

کرنے سے کہیں زیادہ آسان کہا، ٹھیک ہے؟

ہاں اور نہیں: 14 سال پہلے، اس طرح کا تجزیہ صرف پی ایچ ڈی کی سطح کے محققین ہی اپنے ہاتھ سے تیار کردہ پروگراموں کے ذریعے کر سکتے تھے۔ لیکن 2008 کے بعد سے، ٹولز اور تکنیکوں کو اس طرح تیار کیا گیا ہے کہ کوئی بھی جو رسمی تصدیق کی بنیادی باتوں اور IEEE سٹینڈرڈ سسٹم ویریلوگ ایسسرشنز (SVA) کی تحریر سے واقف ہے وہ یہاں تیزی سے درخواست دے سکتا ہے اور کامیاب ہو سکتا ہے۔

تین مراحل کا رسمی بنیاد پر عمل

تجویز کردہ رسمی بنیاد پر بہاؤ اس طرح ظاہر ہوتا ہے:

  1. ایک باضابطہ ٹیسٹ بینچ بنائیں جو DUT تفصیلات کو "ماڈل" کرے۔
  2. ان پٹ رکاوٹوں کی وضاحت کریں اور DUT کے خلاف چلائے جانے والے چیکس
  3. تجزیہ کریں

مرحلہ 1 - ایک باضابطہ ٹیسٹ بینچ بنائیں جو DUT تفصیلات کو "ماڈل" کرے۔

اس طریقہ کار کی بنیاد خصوصیات کا ایک مجموعہ لکھنا ہے جو آپ کے RISC-V ڈیزائن میں ہر ہدایت کے رویے کی نمائندگی کرتی ہے۔ کام IP کے آؤٹ پٹس اور اندرونی آرکیٹیکچرل ریاستوں پر دی گئی ہدایات کے اثر کو پکڑنا ہے (RISC-V دنیا میں، یہ پروگرام کاؤنٹر (PC) اور رجسٹر فائل (RF) ہے) کسی بھی من مانی طور پر طویل ان پٹ تسلسل کے لیے۔ یہ IEEE SVA میں ایک مقصد سے تیار کردہ توسیع کا استعمال کرتے ہوئے کیا جاتا ہے جسے آپریشنل SVA کہتے ہیں۔ مختصراً، یہ ایک لائبریری ہے جو رسمی بنیاد پر پروسیسر کی تصدیق کے آلے کے ساتھ بھیجی گئی ہے۔ اور تصدیقی انجینئر کے نقطہ نظر سے، یہ مانوس SVA کوڈ کے بدیہی ذیلی سیٹ کی طرح لگتا ہے۔ شکل 1 عام ساخت کو ظاہر کرتا ہے:

جائیداد کی ہدایات_A؛ // تصوراتی حالت t ##0 ready_to_issue() اور // trigger t ##0 opcode==instr_A_opc کا مطلب ہے // تصوراتی حالت t ##0 ready_to_issue() اور // میموری انٹرفیس آؤٹ پٹ // اگلی ہدایات پڑھیں t ##0 imem_access(instr_A_opc) اور // data load/store t ##1 dmem_access(instr_A_opc) اور // آرکیٹیکچرل رجسٹرز t ##1 RF_update(instr_A_opc) اور t ##1 PC_update(instr_A_opc) endproperty 

تصویر 1: آپریشنل ایس وی اے کوڈ کا ڈھانچہ جو پروسیسر کی ہدایات کی تفصیلات کو حاصل کرتا ہے۔ [1]

اعداد و شمار 1 کا حوالہ دیتے ہوئے، کے بائیں ہاتھ کی طرف ملوث ہونے (کوڈ کا حصہ اوپر کلیدی لفظ کا مطلب ہے) اس بات کی نشاندہی کرتا ہے کہ مشین کب نئی ہدایات جاری کرنے کے لیے تیار ہے، اور ہدایات جاری کی جارہی ہیں۔ یہ دعویٰ آرکیٹیکچرل ریاستوں کی موجودہ اقدار کو حاصل کرتا ہے اور، مضمرات کے دائیں طرف (کوڈ کا حصہ) نیچے کلیدی لفظ کا مطلب ہے)، ان کی اگلی اقدار کو ثابت کرتا ہے۔

مزید برآں، پروسیسر کے آؤٹ پٹس کو درست ثابت کرنا ہے — اس صورت میں یہ یقینی بنانے کے لیے کہ ہدایات متوقع ڈیٹا اور انسٹرکشن میموری کے مقامات تک رسائی حاصل کرتی ہے۔ اس دعوے سے یہ بھی ثابت ہوتا ہے کہ مشین اگلے سائیکل پر ایک نئی ہدایات جاری کرنے کے لیے تیار ہے۔ کسی ہدایت کی تصدیق کو ان ہدایات کی ترتیب سے دوگنا کرنے کے لیے یہ بہت ضروری ہے جس کا یہ ایک حصہ ہو سکتا ہے۔ مثال کے طور پر، انسٹرکشن A صحیح طریقے سے چل سکتا ہے، لیکن مشین کو خراب حالت میں چھوڑ سکتا ہے۔ یہ غلط حالت اگلی ہدایت B کو اس کی اپنی غلطی کے بغیر غلط نتائج پیدا کرنے کا سبب بن سکتی ہے۔ لہذا، آپریشنل SVA اپروچ کے ساتھ، دعویٰ کی تصدیق کرنے والی ہدایت B پاس ہو جائے گی، جب کہ دعویٰ کی تصدیق کرنے والی ہدایت A ناکام ہو جائے گی (جہاں پڑھنے اور لکھنے کے میموری آپریشنز کئی چکر چل سکتے ہیں)۔

باٹم لائن: آپریشنل SVA کوڈ میں آرکیٹیکچرل ریاستوں کی نمائندگی کرنے والے فنکشنز کو لاگو کرنے والے سگنلز کے ساتھ نقشہ بنانا چاہیے اور پروسیسر کے مائیکرو آرکیٹیکچر کی عکاسی کرنی چاہیے۔ مثال کے طور پر، RF کی حیثیت فارورڈنگ پاتھوں کے فعال ہونے پر منحصر ہو سکتی ہے۔ [1]

[نوٹ: آپ میں سے ان لوگوں کے لیے جو نقلی یا رسمی فنکشنل کوریج سے واقف ہیں، مکمل ہونے کا یہ تصور ساختی کوریج میٹرکس پر، یا فنکشنل کوریج ماڈل کے لیے میٹرکس بنانے اور جمع کرنے پر انحصار نہیں کرتا ہے۔ اس کے بجائے (اور بقیہ مراحل اور نتائج سے تھوڑا آگے نکلنا)، یہاں تجزیہ آؤٹ پٹ تمام خصوصیات کے مکمل ثبوت حاصل کرنے کے بارے میں ہے۔ مکمل ثبوت یہ بھی واضح طور پر ظاہر کرتے ہیں کہ کوئی دوسری فعالیت نہیں ہے — جو کہ غیر متعینہ یا غیر متوقع تھی (تصویر یا کوڈنگ بگ)، یا بدنیتی سے داخل کی گئی تھی — جو کہ خصوصیات کے اس سیٹ کے ذریعے حاصل نہیں کی گئی ہے۔ دوبارہ بیان کرتے ہوئے، یہ طریقہ کار 100% "ٹیسٹ پلان کوریج" کو حاصل کرنے کے بارے میں ہے جیسا کہ مکمل باضابطہ تجزیہ کے نتائج سے تصدیق شدہ ہے - جہاں ریاضی کے ثبوت سے زیادہ "مکمل" کچھ نہیں ہے!]

مرحلہ 2 - ان پٹ رکاوٹوں کی وضاحت کریں اور DUT کے خلاف چلائے جانے والے چیکس

ہر ہدایت کے لیے تصریح کی خصوصیات کو پورا کرنے کے لیے، اگلا مرحلہ ان پٹ کی رکاوٹوں اور کسی بھی اضافی آؤٹ پٹ چیک کی وضاحت کرنا ہے۔ ایک بار پھر، آپریشنل SVA ملازم ہے، جہاں صارف اب قانونی ان پٹ اور غیر قانونی سگنلنگ دونوں کی وضاحت کرنے کے لیے ایک "مکملیت کا منصوبہ" بتاتا ہے جسے DUT کو نظر انداز کرنا چاہیے۔ شکل 2 میں دکھائی گئی مثال کے مطابق، تین حصے ہیں: تعین مفروضے، تعین کے تقاضے، اور پراپرٹی گراف۔

مکمل پروسیسر؛ determination_assumptions: // INPUTS طے شدہ(imem_data_i)؛ طے شدہ(dmem_valid_i)؛ اگر (dmem_valid_i) طے شدہ (dmem_data_i) endif؛ determination_Requirements: // آؤٹ پٹ کا تعین کیا گیا (imem_read_o)، اگر (imem_read_o) کا تعین کیا گیا (imem_addr_o) endif؛ طے شدہ(dmem_enable_o)؛ اگر (dmem_enable_o) طے شدہ(dmem_rd_wr_o)، طے شدہ(dmem_addr_o) endif؛ // تعمیراتی ریاستوں کا تعین (PC)؛ طے شدہ (RF)؛ پراپرٹی_گراف: تمام_ہدایات := ہدایات_نہیں_ا، ہدایات_اضافہ_ا، ہدایات_سب_ا، [...] تمام_ہدایات -> تمام_ہدایات؛ تکمیل کی تکمیل؛ 

تصویر 2: مشروط عزم کے مفروضوں اور تقاضوں کے ساتھ مکمل منصوبہ کی مثال۔

تفصیل کے لیے:

  • "determination_assumptions" صرف ان پٹ ویلیو کی رکاوٹوں کے لیے ایک فینسی نام ہے۔
  • "determination_requirements" سگنلز کی ایک تعریف ہے جس کی تصدیق ہونی چاہیے (پروسیسر کے آؤٹ پٹ سگنلز اور تعمیراتی حالت دونوں)
  • "پراپرٹی_گراف" سیکشن صرف اس فائل کا مرحلہ 1 میں بنائی گئی تمام خصوصیات کا پابند ہے۔

ہم اس مقام پر کہاں ہیں اس کا جائزہ لینا: مرحلہ 1 میں آپ نے DUT کا مؤثر طریقے سے ایک سائیکل درست ماڈل بنایا ہے جو ہر وقت اور تمام معلومات کے لیے درست ثابت ہونا چاہیے۔ مرحلہ 2 میں آپ رکاوٹیں اور کوئی خاص طرز عمل ترتیب دیتے ہیں جن کو تلاش کرنا ہے۔ ان کو ایک ساتھ شامل کریں، اور درحقیقت آپ کے پاس ایک باضابطہ ٹیسٹ بینچ ہے جو چلانے کے لیے تیار ہے!

مرحلہ 3 - تجزیہ کریں۔

تمام رسمی ٹولز کا مقصد مکمل طور پر یہ ثابت کرنا ہے کہ تمام خصوصیات ہر وقت اور تمام ان پٹ کے لیے درست ہیں۔ RISC-V پروسیسر کی توثیق کے معاملے میں، ٹول یہ ثابت کرنے کے لیے کام کرتا ہے کہ کسی بھی من مانی طور پر طویل ان پٹ ترتیب کو مخصوص آپریشنل SVA کے ایک منفرد ترتیب سے ملایا جا سکتا ہے جو آؤٹ پٹ اور تعمیراتی حالتوں کی قدروں کی پیش گوئی کرتا ہے۔

اور بالکل ایسا ہی ہوتا ہے۔ اگر تصریح اور DUT کے درمیان رویے میں کوئی فرق پایا جاتا ہے تو، رسمی ٹول ایک "کاؤنٹر مثال" ویوفارم فراہم کرتا ہے جو بالکل ان پٹ سگنلز اور ڈیٹا کی سیریز کو ظاہر کرتا ہے جو قیاس کی خلاف ورزی کر سکتا ہے۔ جیسا کہ اوپر اشارہ کیا گیا ہے، اس طرح کی ناکامیاں ہدایات کی RTL منطق کے اندرونی حصے میں یا "ہینڈ آف منطق" میں پائی جا سکتی ہیں جو کہ اگلی قانونی شاخ/ہدایت کو ختم کرتی ہے۔

کسی بھی طرح سے، جب یہ مسائل ٹھیک ہو جاتے ہیں اور ٹول تمام خصوصیات کو ثابت کر دیتا ہے، تو نتائج واقعی "مکمل" ہوتے ہیں — یعنی، آپ ریاضی کے اعتبار سے اس بات کا یقین کر سکتے ہیں کہ RTL کوڈنگ کی کوئی خرابی نہیں ہے — رسمی تجزیہ نے لفظی طور پر کسی کیڑے کی عدم موجودگی کو ثابت کر دیا ہے۔ !

نتائج کی نمائش

سب سے پہلے، جیسا کہ اوپر بیان کیا گیا ہے، کئی سالوں کے دوران بہت سے پروسیسر ڈویلپرز نے اس بہاؤ سے فائدہ اٹھایا ہے [2]، [3]، [4]۔

اس طریقہ کار کو RISC-V کے ساتھ آزماتے ہوئے، میرے ساتھیوں نے مقبول راکٹ چپ اوپن سورس کور کا استعمال کرتے ہوئے کیس اسٹڈی کیا۔ خاص طور پر، RV64IMAFDC – sv39 vm کنفیگریشن کی جانچ کی گئی۔ یہ ایک 64 بٹ پروسیسر کور ہے جس میں 39 بٹ ورچوئل میموری سسٹم ہے [5] اور ایکسٹینشنز، جیسے کمپریسڈ اور ایٹم ہدایات [6]۔ یہ اوپن سورس، RISC-V ISA کا نفاذ طویل تاخیر سے متعلق ہدایات، جیسے تقسیم یا کیش مسز کے لیے ایک پانچ مرحلے، سنگل ایشو، ان آرڈر پائپ لائن کا استعمال کرتا ہے۔ کور برانچ کی پیشن گوئی اور "میسا" رجسٹر کی رن ٹائم ترمیم کو بھی سپورٹ کرتا ہے، جس سے یہ کچھ ہدایات سیٹ ایکسٹینشنز کو بند کر سکتا ہے۔

اگرچہ راکٹ چپ کے اس سنیپ شاٹ کی بڑے پیمانے پر تصدیق کی گئی تھی اور متعدد بار ٹیپ آؤٹ کیا گیا تھا، چار پہلے نامعلوم، کارنر کیس، مشکوک رویوں کی نشاندہی کی گئی تھی اور راکٹ کور RTL ڈویلپرز کو اطلاع دی گئی تھی۔ یہ مسائل ([7]، [8]، [9]، اور [10]) مکمل طور پر اس مضمون میں بیان کردہ مکمل رسمی توثیق کے طریقہ کار کے منظم اطلاق کے ذریعے دریافت ہوئے تھے۔

خاص طور پر [10] کی وضاحت کرتے ہوئے — RTL میں ایک غیر معیاری انسٹرکشن CEASE (Opcode 0x30500073) کی دریافت: واضح طور پر راکٹ چپ ٹیم اپنی دستاویزات میں پیچھے پڑ گئی (اور انہوں نے اسے GitHub پل کی درخواست دائر کرنے کے فوراً بعد ٹھیک کر دیا)۔ بڑا نکتہ یہ ہے کہ یہ ظاہر کرتا ہے کہ ایک پوری ہدایات کو لاگو کرنے کے لیے منطق کی ضرورت ہوتی ہے — کوڈ کی درجنوں لائنیں اور سنتھیسائزڈ، پلیسڈ اور روٹڈ منطق کے بہت سے دروازے — بصری معائنہ، RTL سمولیشن، گیٹ لیول سمولیشن، پوری طرح سے پتہ لگانے سے بچ سکتے ہیں۔ بیک اینڈ پر عمل درآمد کا عمل، اور لیب میں ہارڈویئر پروٹو ٹائپس!

لیکن اس بہاؤ کی کارکردگی کا کیا ہوگا؟

سب سے پہلے، آئیے "کارکردگی" کے بڑے معنی پر توجہ دیں۔ راکٹ چپ ڈیزائن کی نئی نوعیت کی وجہ سے، اس کیس اسٹڈی کے لیے ہمارے باضابطہ تصدیقی پریکٹیشنرز کو پورے ٹیسٹ بینچ اور رکاوٹوں کو تیار کرنے میں تقریباً 20 انجینئرنگ ہفتے لگے۔ تاہم، زیادہ ساختہ، تجارتی IP پر اس بہاؤ کی پہلے کی درخواستوں نے عام طور پر اس وقت کا ایک حصہ لیا ہے۔ فطری طور پر، پورے لانے کا عمل بہت تیزی سے آگے بڑھے گا جتنی زیادہ مستحکم اور پختہ چشمی ہوگی، DUT RTL کوڈ کتنی اچھی طرح سے دستاویزی اور پڑھنے کے قابل ہے، اور سوال و جواب کے لیے ڈیزائن انجینئرز تک آپ کی کتنی رسائی ہوگی۔

ایک بار جب ماحول قائم ہو گیا تو، وال کلاک کا رن ٹائم 2 گھنٹے کا تھا — یعنی اس سے بہت کم جس کی آپ معقول حد تک بے ترتیب RTL سمولیشن اور یہاں تک کہ ہارڈ ویئر کی مدد سے تصدیق سے توقع کر سکتے تھے۔ اس کے علاوہ، یاد رکھیں کہ اس تجزیہ کے نتائج تمام معلومات اور ہر وقت کے لیے درست ہیں - ایک لفظ میں، وہ مکمل ہیں [11]۔

خلاصہ

اس مضمون میں پیش کردہ مکمل، رسمی بنیاد پر پروسیسر کی توثیق کا طریقہ IEEE SVA، آپریشنل SVA تک توسیع کا استعمال کرتا ہے، تاکہ باضابطہ طور پر اس بات کی تصدیق کی جا سکے کہ RISC-V ISA خلاء اور تضادات سے پاک ہے۔ محدود-رینڈم سمولیشن ٹیسٹ بینچز، ایمولیشن، یا فزیکل پروٹو ٹائپنگ کے برعکس، پراپرٹیز اور رکاوٹوں کا مکمل سیٹ بہت سی قسم کی RTL کی خرابیوں کے ساتھ ساتھ غیر دستاویزی یا ناقص مخصوص کوڈ اور بدنیتی پر مبنی ٹروجن کی موجودگی کا پتہ لگاتا ہے۔

حوالہ جات

1 - 2019 GOMACTech کانفرنس، Albuquerque، NM، 28 مارچ 2019: ٹروجن فری ٹرسٹڈ ICs کے لیے RISC-V پروسیسر IPs کی مکمل باضابطہ تصدیق، David Landoll، et.al.

2 – DVCon 2007: TriCore2 اور دیگر پروسیسرز، Infineon Gmbh کی مکمل باضابطہ تصدیق۔

3 - 51st ڈیزائن آٹومیشن کانفرنس (DAC): باضابطہ توثیق کا اطلاق Renesas MCU ڈیزائن پلیٹ فارم پر OneSpin ٹولز کا استعمال کرتے ہوئے

4 – DVCon Europe 2019: آٹوموٹیو DSPs، Bosch Gmbh کے خاندان کی مکمل باضابطہ تصدیق۔

5 – RISC-V انسٹرکشن سیٹ مینوئل، جلد II: مراعات یافتہ فن تعمیر، دستاویز کا ورژن 1.10۔

6 - https://github.com/freechipsproject/rocket-chip [دسمبر 20th، 2018 تک رسائی حاصل کی]

7 - DIV ہدایات کا نتیجہ فائل کو رجسٹر کرنے کے لیے نہیں لکھا گیا۔
https://github.com/freechipsproject/rocket-chip/issues/1752

8 - JAL اور JALR ہدایات مختلف ریٹرن پی سی کو اسٹور کریں۔
https://github.com/freechipsproject/rocket-chip/issues/1757

9 – غیر قانونی اوپکوڈز دوبارہ چلائے گئے اور غیر متوقع ضمنی اثرات کا باعث بنے۔
https://github.com/freechipsproject/rocket-chip/issues/1861

10 – غیر معیاری ہدایات CEASE (Opcode 0x30500073) RTL میں دریافت، https://github.com/freechipsproject/rocket-chip/issues/1868

11 - تصدیقی افق بلاگ، آپ کیسے کہہ سکتے ہیں کہ رسمی تصدیق مکمل ہے؟، جو ہپسی III
https://blogs.sw.siemens.com/verificationhorizons/2021/09/16/how-can-you-say-that-formal-verification-is-exhaustive/

ماخذ: https://semiengineering.com/do-you-know-for-sure-your-risc-v-rtl-doesnt-contain-any-surprises/

ٹائم اسٹیمپ:

سے زیادہ سیمی کنڈکٹر انجینئرنگ