Это простой дизайн, который позволяет испытать тестирование FPGA, потребляя все доступные логические ресурсы (LUTS + FFS). Конструкция реализует модифицированный LFSR Galois для генерации большого количества «хаотической» активности переключения / динамического энергопотребления, чтобы также испытать стресс-тест FPGA Power Supplies.
Большинство концепций для тестирования максимального использования / требований к питанию используют простой регистр смены, где каждый цикл переключает каждый цикл. Такие концепции основаны исключительно на FFS, но также обеспечивают максимальную активность переключения (только в FFS). fpga_torture также основан на потреблении всех доступных FFS. Кроме того, он также включает в себя все доступные LUT (поисковые таблицы) для использования всех логических ресурсов общего назначения FPGA для создания более реалистичного варианта использования. Кроме того, результирующая активность переключения является более хаотичной (без монотонного переключения), обеспечивая также более реальное поведение.
Код VHDL содержит технологическую реакцию, в котором не используются примитивы, атрибуты или другие элементы, специфичные для устройства/платформу. Он был протестирован на FPGAS с решеткой (Radiant, SinplifyPro) и Intel (Quartus Prime).
Конструкция fpga_torture основана на цепочке регистра, которая в основном реализует «круговой» модифицированный Galois LFSR (регистр сдвига линейной обратной связи). Размер цепи определяется проектами NUM_CELLS generic. Каждая клетка состоит из FF и LUT. LUT в положении цепи I использует выходы из трех предыдущих FF, чтобы вычислить следующее значение для 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, например, светодиодом или не подключенным штифтом FPGA.
Моделируйте/проверяйте конфигурацию NUM_CELLS , используя Testbench перед синтезом. Некоторые значения NUM_CELLS (например, 32) приводят к максимальной активности переключения (все переключения FFS в каждом цикле).
Проекты предоставляют простой тестовый балл ( sim/fpga_torture_tb.vhd ), который может быть смоделирован с помощью GHDL через сценарий DEGIN ( 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 . Конструкция потребует NUM_CELLS+1 FFS (регистры) и NUM_CELLS+2 lut3s (таблицы поиска, по 3 входа в каждый). Некоторые FPGAS/Toolchains могут также представить некоторые дополнительные LUT.
Пример отображения: решетчатая 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