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交付舊項目並清空槽

邊緣 0 儲存 tag0,y9。邊緣 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 後將它遺失。

此選擇適用於本瀏覽器,隨時可從頁尾變更。