14 / 24 · 概念
設計單槽彈性暫存器
在空槽接受資料,或替換同時被消費的項目。
單元可免費閱讀,註冊課程即可儲存學習進度。
由可用儲存空間推導 ready
單槽緩衝器包含 full 位元與負載暫存器。空的時候,即使接收端停頓,也可接受輸入。滿的時候,若接收端在該邊緣消費目前輸出,便可接受替換。因此 input-ready 為 !full OR output-ready,output-valid 為 full。此暫存緩衝器沒有組合式資料直通。
input-ready 為高時,下一個 full 等於 input-valid。有輸入便擷取負載;否則清空槽。input-ready 為低時,保留 full 與負載。若只因輸出傳輸就清除 full,會遺失同時到達的替換。只憑 input-valid 擷取,則會覆寫已滿且停頓的槽。
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| 舊 full | out-ready | in-valid | 動作 |
|---|---|---|---|
| 0 | 0 | 1 | 儲存輸入 |
| 1 | 0 | 1 | 拒絕輸入並保持輸出 |
| 1 | 1 | 1 | 交付舊項目並儲存替換 |
| 1 | 1 | 0 | 交付舊項目並清空槽 |
邊緣 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 後將它遺失。
✓ 已學習