Altifigence Academy

1 / 37 · 概念

RTL:描述併發工作的電路

區分軟體執行順序與硬體並行結構,明確當前狀態、下一狀態和觀察時刻。

電路持續工作

RTL 描述數值如何經過組合邏輯在暫存器之間移動。模組是硬體邊界,兩個例項是相互連線的結構,不是先呼叫一個函式再呼叫另一個。輸入改變時電路仍在工作。把數位邏輯電路中的門、儲存和狀態機轉成明確的 SystemVerilog 介面與可重現驗證。實現前應說明每個訊號的位元寬度、驅動來源、有效時刻和重置行為。

分開當前狀態與下一狀態

這個完整模組將無號 4 位 sample 累加到 8 位暫存器。重置同步、高有效,優先於 enable。有致能的時脈邊緣執行加法,其餘時脈邊緣保持 sum,算術按模 256 迴繞。

SystemVerilog
module accumulator (
  input  logic       clk, rst, enable,
  input  logic [3:0] sample,
  output logic [7:0] sum
);
  logic [7:0] next_sum;
  assign next_sum = sum + {4'b0000, sample};
  always_ff @(posedge clk) begin
    if (rst) sum <= 8'b0;
    else if (enable) sum <= next_sum;
  end
endmodule

next_sum 是組合結果,即使沒有時脈時脈邊緣,sum 或 sample 改變也會改變它。sum 儲存狀態,在上升緣更新。同樣宣告為 logic 不代表相同硬體作用。時脈塊省略最後的 else 表示保持暫存器;組合塊漏賦值則可能要求鎖存器。先看清塊的型別。

模擬前計算時脈邊緣表

每行使用時脈邊緣前的狀態和輸入,在非阻塞更新後觀察結果。

時脈邊緣rstenablesample更新前 sum更新後 sum
E0119未知0
E101303
E200733
E301538
E4111580

E4 重置優先,不做加法。舊 sum=250、接受的 sample=10 時,8 位結果是 4。保留第九位意味著改變介面和算術契約。

賦值順序屬於區域,併發屬於結構

組合過程內阻塞賦值 = 按過程順序執行。不同過程及連續賦值作為併發程序排程。時脈過程的非阻塞賦值 <= 用過程執行時可見的值計算右側,再安排更新。原始碼順序不能替代延遲契約。不要在累加器中用 #10 表示等待一個時脈;延遲和時脈發生器屬於後面的通用模擬測試平台。可合成狀態轉移透過時脈邊緣和狀態表達,不是軟體 sleep。

練習:改變一項要求

將循環改為在 255 飽和。顯式擴展兩個運算元後計算 9 位和,位 8 為 1 則存 255,否則存 7:0。保持 reset 與 enable 優先順序。測試 0+0、250+5、250+6、禁用時脈邊緣、同時 reset/enable;期望依次是 0、255、255、保持舊狀態、0。只測 250+5 不能暴露進位丟失,必須包含 250+6。

一起儲存原始碼、時脈邊緣表和期望值。課程完成標記是學習記錄,與模擬執行不同。

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