이것은 사용 가능한 모든 로직 리소스 (LUTS + FFS)를 소비하여 FPGA 활용을 스트레스 테스트 할 수있는 간단한 설계입니다. 이 설계는 수정 된 Galois LFSR을 구현하여 스트레스 테스트 FPGA 전원 공급 장치를 위해 많은 "혼란스러운"스위칭 활동 / 동적 전력 소비를 생성합니다.
최대 활용 / 전력 요구 사항 테스트를위한 대부분의 개념은 각 FF (Flip Flop / Register)가 모든주기에서 토글하는 간단한 시프트 레지스터를 사용합니다. 이러한 종류의 개념은 전적으로 FFS를 기반으로하지만 최대 스위칭 활동 (FFS에서만)을 제공합니다. fpga_torture 또한 사용 가능한 모든 FF를 소비하는 것을 기반으로합니다. 또한 FPGA의 범용 논리 리소스를 모두 활용하여보다 현실적인 사용 사례를 생성하기 위해 사용 가능한 모든 LUT (룩업 테이블)도 포함되어 있습니다. 또한, 결과적인 스위칭 활동은 더 혼란스러워 (모노톤 토글링 없음)가 더 실제 행동을 제공합니다.
VHDL 코드는 기술적 인 설명을 제공하며,이 설명은 프리미티브, 속성 또는 기타 장치/플랫폼 별 요소를 사용하지 않습니다. 그것은 격자 (Radiant, Sinplifypro) 및 Intel (Quartus Prime) FPGA에 대해 테스트되었습니다.
fpga_torture 설계는 기본적으로 "원형"수정 된 Galois LFSR (선형 피드백 시프트 레지스터)을 구현하는 레지스터 체인을 기반으로합니다. 체인의 크기는 Designs NUM_CELLS Generic에 의해 정의됩니다. 각 셀은 FF와 LUT로 구성됩니다. 체인 위치 I 의 LUT는 3 개의 이전 FFS의 출력을 사용하여 셀의 FF의 다음 값을 계산합니다.
chain(i) <= combine_f(chain(i-3), chain(i-2), chain(i-1));
모든 입력의 논리적 XOR은 조합 함수 ( combine_f() )로 사용됩니다.
기술보기 (컷 아웃, 쿼터 프라임) : 이전 3 개의 레지스터 chain[3] , chain[4] 및 chain[5] 의 상태를 사용하여 하나의 LUT를 통한 레지스터 chain[6] 의 다음 값 계산을 통해 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 ; RESET 신호 rstn_i 대상 FPGA가 BITSTREAM을 통해 FF 초기화를 지원하는 경우 선택 사항입니다. 이 경우 rstn_i 신호는 1 에 묶일 수 있습니다. 합성 도구가 전체 설계 로직을 제거하는 것을 방지하려면 out_o 출력 신호가 필요합니다. 이 신호를 LED 또는 연결되지 않은 FPGA 핀과 같은 비판적 FPGA 출력 핀에 연결하십시오.
합성을 수행하기 전에 테스트 벤치를 사용하여 NUM_CELLS 의 구성을 시뮬레이션/테스트하십시오. 일부 NUM_CELLS 값 (예 : 32)은 최대 스위칭 활동을 초래합니다 (모든주기의 모든 FFS 토글링).
이 프로젝트는 간단한 TestBench ( sim/fpga_torture_tb.vhd )를 제공하며, 이는 공급 스크립트 ( sim/ghdl.sh )를 통해 GHDL에서 시뮬레이션 할 수 있습니다.
fpga_torture/sim$ sh ghdl.sh
시뮬레이션은 100MHz 시계를 사용하여 1ms의 경우 실행됩니다. 파형 데이터는 sim/fpga_torture.vcd 에 저장되므로 GTKWAVE를 사용하여 볼 수 있습니다.
fpga_torture/sim$ gtkwave fpga_torture.vcd
체인의 총 크기는 NUM_CELLS GENERIC로 정의됩니다. 디자인에는 NUM_CELLS+1 FFS (레지스터) 및 NUM_CELLS+2 LUT3S (각각 3 개의 입력)가 필요합니다. 일부 FPGA/Toolchains는 일부 추가 경로 스루 LUT를 도입 할 수도 있습니다.
매핑 예 : 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