снижение логических элементов и энергопотребления в FPGA (статические и динамические данные) - PullRequest
0 голосов
/ 29 июня 2019

Я разрабатываю FPGA для приложения беспроводной связи.Я бы хотел уменьшить энергопотребление и количество логических элементов конструкции (осталось очень мало логических элементов, но много блочной оперативной памяти).Будет ли использование блока оперативной памяти правильным выбором?Есть ли лучший вариант?

Мне интересны две ситуации: 1) Мне нужно сохранить некоторые статические параметры для сбора информации о датчике (например, команды инициализации АЦП, отправленные через SPI, которые всегда будут одинаковыми)2) Мне также нужно буферизовать данные АЦП до тех пор, пока у меня не будет достаточно выборок для отправки полного пакета (например, собрать 16 выборок с АЦП и затем передать данные).

В настоящее время я храню как статические, так идинамические данные как «логика» (например, при записи системного verilog «логическая команда [1] = 32'hABCDABCD;» и т. д. для статических команд при выполнении чего-то подобного для буфера данных.

При переключении наБлок оперативной памяти помогает снизить энергопотребление? У меня есть ощущение, что это поможет уменьшить количество логических элементов, используемых в моем проекте, но я не уверен, как это повлияет на энергопотребление.

Спасибо за комментарии / предложения. IСейчас я работаю над тем, чтобы опробовать его, но хотел бы услышать мнение сообщества, если у него есть другие идеи.

//EXAMPLE OF THE STATIC COMMANDS BEING USED

//Commands for the ADC.

logic [DEPTH_I-1:0] [WIDTH-1:0] initCmds

//Define the commands

always_comb

begin

    initCmds[0]  = 32'hC0FF0000;    //Read(255) dummy cmd

initCmds[1]  = 32'h80200000;    //Disable Stimulation

initCmds[2]  = 32'h80210000;    //Disable Stimulation   

initCmds[3]  = 32'h8026FFFF;    //Turn ON all DC amps 

initCmds[4]  = 32'h6A000000;    //CLEAR - Set ADC Calibration

   ...

end

//EXAMPLE OF THE DATA BUFFER BEING USED//


 logic [DEPTH-1:0] [(4*WIDTH)-1:0] dataPkt;

  assign dataOut = {dataPkt[0], 

      dataPkt[1],

      dataPkt[2],

      dataPkt[3],

      dataPkt[4]};

...(some state machine code that sends command i to ADC, gets data, and stores as a dataPkt[i])...
...