這是一個簡單的設計,可以通過消耗所有可用邏輯資源(LUTS + FFS)來強調FPGA利用率。該設計實現了修改的Galois LFSR,以生成許多“混亂”的切換活動 /動態功耗,以應對fpga電源。
測試最大利用率 /功率要求的大多數概念都使用一個簡單的移位寄存器,每個FF(flip flop /寄存器)在每個週期中都可以切換。這些概念完全基於FF,但也提供了最大的切換活動(僅在FFS中)。 fpga_torture還基於消費所有可用的FF。此外,它還包括所有可用的LUTS(查找表),以利用FPGA的所有通用邏輯資源來生產更現實的用例。此外,由此產生的切換活動更加混亂(無單調切換)也提供了更現實的行為。
VHDL代碼提供了技術 - 靜態描述,該描述不使用任何原始屬性,屬性或其他設備/平台特定的元素。它已在晶格(Radiant,Sinplifypro)和Intel(Quartus Prime)FPGA上進行了測試。
fpga_torture設計基於寄存器鏈,該寄存器鏈基本上實現了“圓形”修改的Galois LFSR(線性反饋移位寄存器)。鏈的大小由Designs NUM_CELLS通用定義。每個細胞由FF和LUT組成。 LUT在鏈位置我使用前三個FF的輸出來計算單元格的下一個值:
chain(i) <= combine_f(chain(i-3), chain(i-2), chain(i-1));
所有輸入的邏輯XOR用作組合函數( combine_f() )。
技術視圖(剪切,Quartus Prime):通過使用前三個寄存器chain[3] , chain[4]和chain[5]的狀態通過一個LUT計算寄存器chain[6] ,並通過XOR組合它們:
鏈的開頭使用額外的FF,該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 ;如果目標FPGA通過Bitstream支持FF初始化,則重置信號rstn_i是可選的。在這種情況下, rstn_i信號可以綁定到1 。需要out_o輸出信號以防止合成工具刪除整個設計邏輯。將此信號連接到一些非批判性的FPGA輸出引腳,例如LED或未連接的FPGA引腳。
進行合成之前,請使用TestBench仿真/測試NUM_CELLS的配置。一些NUM_CELLS值(例如32)會導致最大的切換活動(所有FF在每個週期中都在切換)。
這些項目提供了一個簡單的測試台( sim/fpga_torture_tb.vhd ),可以通過GHDL通過提供腳本( sim/ghdl.sh )模擬該項目:
fpga_torture/sim$ sh ghdl.sh
模擬將使用100MHz時鐘以1ms的速度運行。波形數據存儲到sim/fpga_torture.vcd因此可以使用GTKWAVE查看:
fpga_torture/sim$ gtkwave fpga_torture.vcd
鏈的總大小由NUM_CELLS通用定義。該設計將需要NUM_CELLS+1 ffs(寄存器)和NUM_CELLS+2 lut3s(查找表,每個3輸入)。一些FPGA/工具鏈也可能會引入一些其他路線。
映射示例: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