Altifigence Academy

14 / 24 · Теория

Спроектируйте эластичный регистр на одно место

Принимайте данные в пустое место или заменяйте одновременно потреблённый элемент.

Выводите ready из доступного места хранения

Буфер на одно место содержит бит full и регистр полезных данных. Когда он пуст, он может принять вход даже при остановленном приёмнике. Когда полон, он может принять замену, если приёмник потребляет существующий выход на этом фронте. Поэтому input-ready равен !full OR output-ready, а output-valid — full. Этот регистровый буфер не имеет комбинационного сквозного прохода данных.

Если input-ready высок, следующий full равен input-valid. Фиксируйте полезные данные, если есть вход; иначе освобождайте место. Если input-ready низок, сохраняйте full и данные. Очистка full лишь потому, что выход передан, теряет одновременную замену. Фиксация только по input-valid перезаписывает полное остановленное место.

SystemVerilog
module elastic_byte (
  input logic clk, rst,
  input logic in_valid,
  output logic in_ready,
  input logic [7:0] in_data, in_tag,
  output logic out_valid,
  input logic out_ready,
  output logic [7:0] out_data, out_tag
);
  logic full;
  assign in_ready = !full || out_ready;
  assign out_valid = full;
  always_ff @(posedge clk) begin
    if (rst) full <= 1'b0;
    else if (in_ready) begin
      full <= in_valid;
      if (in_valid) begin
        out_data <= in_data;
        out_tag <= in_tag;
      end
    end
  end
endmodule
Старое fullout-readyin-validДействие
001Сохранить вход
101Не принять вход и удерживать выход
111Выдать старый элемент и сохранить замену
110Выдать старый элемент и освободить место

Сохраните tag0,y9 на фронте 0. Остановитесь на фронте 1. На фронте 2 потребите tag0 и сохраните tag1,y12; место остаётся полным. На фронте 3 потребите tag1 и освободите место, если входа нет. Замена позволяет одну транзакцию за такт.

Соединение многих ступеней создаёт обратный комбинационный путь ready. Регистрация ready требует дополнительного хранения для данных, прибывающих до вступления в силу уведомления об остановке. Отдельно проверьте ограничения комбинационных путей конкретной шины. Независимо от ширины полезных данных храните данные и все сопутствующие поля при одном условии и проверяйте все четыре случая обновления.

Попробуйте сами

На фронте с full=1, out-ready=1 и in-valid=1 потребляется tag7 и предлагается tag8. Чему равны следующие full и out-tag? Что неверно, если full всегда очищается при потреблении?

Прочитать объяснение

Input-ready высок, поэтому сохраните tag8 и оставьте full=1. Out-tag становится 8. Постоянная очистка full теряет tag8 после его приёма.

Выбор действует в этом браузере. Его можно изменить внизу страницы.