هذا تصميم بسيط يسمح باختبار استخدام FPGA من خلال استهلاك جميع الموارد المنطقية المتاحة (LUTS + FFS). ينفذ التصميم Galois LFSR المعدل لإنشاء الكثير من نشاط التبديل "الفوضوي" / استهلاك الطاقة الديناميكي إلى إمدادات الطاقة FPGA الإجهاد.
تستخدم معظم مفاهيم اختبار الاستخدام / الطاقة القصوى سجل تحول بسيط حيث تبديل كل FF (Flip Flop / Record) في كل دورة. يعتمد هذا النوع من المفاهيم بالكامل على FFS ولكنه يوفر أيضًا نشاطًا أقصى تبديل (في FFS فقط). يعتمد fpga_torture أيضًا على استهلاك جميع FFS المتاحة. بالإضافة إلى ذلك ، فإنه يشمل أيضًا جميع LUTs المتاحة (طاولات البحث) لاستخدام جميع موارد المنطق للأغراض العامة في FPGA لإنتاج حالة استخدام أكثر واقعية. علاوة على ذلك ، فإن نشاط التبديل الناتج أكثر فوضوية (بدون تبديل رتيب) يوفر أيضًا المزيد من سلوك الحياة الواقعية.
يوفر رمز VHDL وصفًا غير محدد للتكنولوجيا ، والذي لا يستخدم أي بدائيات أو سمات أو عناصر أخرى خاصة بالجهاز/النظام الأساسي. تم اختباره على شعرية (مشع ، sinplifypro) و Intel (Quartus prime) FPGAs.
يعتمد تصميم fpga_torture على سلسلة تسجيل ، والتي تنفذ أساسًا GALOIS LFSR "الدائري" (سجل نوبة التعليقات الخطي). يتم تعريف حجم السلسلة بواسطة التصميمات NUM_CELLS عام. تتكون كل خلية من FF و LUT. يستخدم LUT في موضع السلسلة I المخرجات من FFS الثلاثة السابقة لحساب القيمة التالية لـ FF للخلية:
chain(i) <= combine_f(chain(i-3), chain(i-2), chain(i-1));
يتم استخدام XOR منطقي لجميع المدخلات كدالة تركيبة ( combine_f() ).
عرض التكنولوجيا (القطع ، Quartus Prime): حساب القيمة التالية chain[6] عبر LUT واحد باستخدام حالات chain[3] ، chain[4] والسلسلة chain[5] والدمج بينها عبر XOR:
تستخدم بداية السلسلة FF إضافية ، والتي تبديل كل دورة على مدار الساعة "لبدء" السلسلة. بعد وقت قصير من "التهيئة" ، تتأرجح السلسلة بطريقة عشوائية زائفة تولد نشاط تبديل فوضوي للغاية واستهلاك الطاقة الديناميكي.
الكيان العلوي هو rtl/fpga_torture.vhd :
entity fpga_torture is
generic (
NUM_CELLS : positive -- number of LUT3+FF elements
);
port (
clk_i : in std_ulogic ; -- clock input
rstn_i : in std_ulogic ; -- low-active async reset
out_o : out std_ulogic -- dummy output (LED or unconnected FPGA pin)
);
end fpga_torture ; تكون إشارة إعادة تعيين rstn_i اختيارية إذا كان الهدف FPGA يدعم تهيئة FF عبر BitStream. في هذه الحالة ، يمكن ربط إشارة rstn_i بـ 1 . مطلوب إشارة الإخراج out_o لمنع أداة التوليف من إزالة منطق التصميم بالكامل. قم بتوصيل هذه الإشارة ببعض دبوس إخراج FPGA غير الحرج مثل LED أو دبوس FPGA غير متصل.
محاكاة/اختبار تكوين NUM_CELLS باستخدام testbench قبل القيام بالتوليف. تؤدي بعض قيم NUM_CELLS (مثل 32) إلى أقصى نشاط للتبديل (جميع FFS تبديل في كل دورة).
توفر المشاريع Testbench بسيطة ( sim/fpga_torture_tb.vhd ) ، والتي يمكن محاكاةها بواسطة GHDL عبر البرنامج النصي ( sim/ghdl.sh ):
fpga_torture/sim$ sh ghdl.sh
سيتم تشغيل المحاكاة لمدة 1 مللي ثانية باستخدام ساعة 100 ميجا هرتز. يتم تخزين بيانات الشكل الموجي إلى sim/fpga_torture.vcd بحيث يمكن عرضها باستخدام gtkwave :
fpga_torture/sim$ gtkwave fpga_torture.vcd
يتم تعريف الحجم الإجمالي للسلسلة بواسطة NUM_CELLS Generic. سيتطلب التصميم NUM_CELLS+1 FFS (السجلات) و NUM_CELLS+2 lut3s (جداول البحث ، 3 مدخلات لكل منهما). قد تقدم بعض FPGAs/Charkains أيضًا بعض LUTs الإضافية.
مثال رسم الخرائط: lattice iCE40UP5K-UWG30ITR FPGA ، SinplifyPro ، NUM_CELLS = 5278
Number of slice registers: 5279 out of 5280 (100%)
Number of I/O registers: 0 out of 63 (0%)
Number of LUT4s: 5280 out of 5280 (100%)
Number of logic LUT4s: 5280
Number of ripple logic: 0 (0 LUT4s)
Number of IO sites used: 3 out of 21 (14%)
Number of Clocks: 1
Net clk_i_c: 5279 loads, 5279 rising, 0 falling (Driver: Port clk_i)
Number of LSRs: 1
Net rstn_i_c_i: 5279 loads, 5279 SLICEs