一、NICE接口的概念
NICE(Nuclei Instruction Co-unit Extension)接口是蜂鳥E203處理器中用于擴展自定義指令的協處理器接口,基于RISC-V標準協處理器擴展機制設計。它允許用戶在不修改處理器核流水線的情況下,通過外部硬件加速特定計算任務。NICE接口通過一組握手信號與處理器核交互,支持標量指令的同步執行。其核心思想是將復雜或頻繁使用的操作(如加密、DSP計算)卸載到專用硬件,從而提升能效比。該接口遵循RISC-V的模塊化擴展原則,確保兼容性,同時為開發者提供低延遲的硬件加速路徑。
NICE接口的主要特點是輕量化、低功耗和同步阻塞式設計。它采用單發射流水線機制,每次僅處理一條指令,通過ready信號實現嚴格的流控,確保指令順序執行。接口的數據通道寬度與RISC-V處理器核一致(通常為32位),支持標準的加載/存儲操作和自定義運算。其低功耗特性源于精簡的狀態機設計,避免復雜的多線程調度邏輯。NICE接口的核心作用是擴展處理器功能,彌補通用CPU在特定領域(如信號處理、AI推理)的性能短板。通過將關鍵計算任務(如矩陣乘法、FFT)委托給協處理器,可顯著減少指令開銷和內存訪問延遲。例如,在IoT設備中,NICE接口可加速傳感器數據的實時濾波或加密算法,從而降低主CPU負載。此外,該接口支持用戶自定義指令集,允許開發者針對垂直場景(如邊緣AI)優化硬件,而無需改動RISC-V核心架構。這種靈活性使其在嵌入式和高能效計算中具有廣泛的應用潛力。
NICE接口的處理機制基于同步請求-響應模型。當處理器核解碼到自定義指令時,會通過nice_req_valid信號觸發協處理器,并等待nice_req_ready信號確認。NICE接口采用嚴格的兩級流水線握手協議,處理器核與協處理器之間的交互必須至少跨越兩個時鐘周期,以避免組合邏輯環路。當核心發出請求時,協處理器不能在同一周期直接返回響應(即禁止nice_rsp_valid = nice_req_valid的組合邏輯連接),否則會形成時序環路,導致電路振蕩或亞穩態問題。協處理器必須在下一個時鐘周期才能斷言nice_rsp_valid,確保信號通過寄存器打拍。這一設計是蜂鳥E203的硬性約束,所有自定義協處理器必須遵守。例如,即使協處理器的計算是純組合邏輯,也需額外插入一級寄存器延遲,強制將響應推遲到第二周期返回。
二、NICE接口的四個通道
蜂鳥E203的NICE接口包括4個通道,分別是請求通道、反饋通道、存儲器請求通道和存儲器反饋通道。當主處理器在譯碼階段遇到任意一種預定義指令組時,會將指令和源操作數通過請求通道派發給協處理器,協處理器接收指令后做進一步譯碼并執行指令,執行完畢后通過反饋通道將結果反饋給主處理器。協處理器執行NICE指令時,可以通過存儲器請求和反饋通道對主處理器中的數據進行連續讀寫,且讀寫過程與執行過程完全獨立,具有較高的讀寫效率。
1. 請求通道
請求通道用于主處理器向協處理器發起執行自定義指令的請求,具體包含的信號如下表,注意表中的信號方向是站在協處理器角度的方向。當主處理器通過指令的操作碼識別到自定義指令時,會將nice_req_valid信號拉高,當nice_req_ready信號也是高電平時,即完成一次握手,此時協處理器會根據自定義指令的機器碼判斷需要進行什么操作,同時結合rs1和rs2的值進行計算。
通道 | 方向 | 位寬 | 信號名 | 描述 |
請求通道 | Input | 1 | nice_req_valid | 該信號為1時表示主處理器發出了一個請求 |
Output | 1 | nice_req_ready | 該信號為1時表示NICE協處理器可以接收一個請求 | |
Input | 32 | nice_req_inst | 自定義指令的機器碼 | |
Input | 32 | nice_req_rs1 | 源寄存器1的值 | |
Input | 32 | nice_req_rs2 | 源寄存器2的值 |
2. 反饋通道
當協處理器執行完自定義指令后,需要通過反饋通道向主處理器返回計算結果,具體包含的信號如下表。當協處理器計算完成時,會將nice_rsp_valid信號拉高,當nice_rsp_ready信號也是高電平時,即完成一次握手,此時主處理器會接收nice_rsp_data數據,并寫回到rd寄存器中。
通道 | 方向 | 位寬 | 信號名 | 描述 |
反饋通道 | Output | 1 | nice_rsp_valid | 該信號為1時表示NICE協處理器發送了一個響應 |
Input | 1 | nice_rsp_ready | 該信號為1時表示主處理器可以接收一個響應 | |
Output | 32 | nice_rsp_data | 來自NICE協處理器的計算結果 | |
Output | 1 | nice_rsp_err | 該信號為1時表示在NICE協處理器執行過程中檢測到錯誤 |
值得注意的是,當nice_req_valid信號拉高時不能立即就將nice_rsp_valid信號拉高,即直接將nice_req_valid信號連接到nice_rsp_valid信號,如下面的Verilog代碼所示。即便協處理器只需要完成一個很簡單的操作,僅需少量純組合邏輯即可完成,也不能這樣賦值。因為在主處理器核中,nice_req_valid信號本身依賴nice_rsp_valid信號,直接賦值會形成組合邏輯環,即時序環路。這意味著協處理器中執行的指令至少需要兩個時鐘周期才能執行完畢,NICE接口硬性約束了自定義指令不能是單周期指令。
assign nice_rsp_valid = nice_req_valid;
3. 存儲器請求通道
?當協處理器需要額外的數據參與運算時,即除了rs1和rs2寄存器提供的數據還需要其他數據時,可以通過存儲器請求通道直接訪問主處理的內存,而不需要設置額外的指令來專門傳遞數據。此外,協處理器可以通過存儲器請求通道向主處理器連續發起多個讀寫請求,這種設計大大提高的訪問效率。并且數據訪問完全可以和其他運算并行執行,這些設計使得蜂鳥處理器可以適用于實時性較高、需要處理大量數據流的場景。
存儲器請求通道的具體信號如下表,當協處理器識別到自定義指令需要訪問數據時,首先會將nice_mem_holdup拉高,并保持高電平,直到完成所有內存訪問。這種機制阻塞了后面的加載和存儲指令,可以避免一些死鎖場景。在nice_mem_holdup的幫助下,協處理器可以在NICE指令完成之前的任何時間啟動一次或多次內存訪問。
nice_mem_holdup拉高后,當任何時候需要訪問主處理器內存時,只需要將nice_icb_cmd_valid拉高,并設置好地址、操作類型、寫入數據和訪問數據長度四個信號,當nice_icb_cmd_ready信號也為高時,訪問請求便發送成功。一段時間后,主處理器會自動反饋訪問請求的結果,因此協處理器也需要做好接收數據和反饋結果的準備。
通道 | 方向 | 位寬 | 信號名 | 描述 |
存儲器請求通道 | Output | 1 | nice_icb_cmd_valid | 該信號為1時表示協處理器發出了一個內存訪問請求 |
Input | 1 | nice_icb_cmd_ready | 該信號為1時表示主處理器可以接收內存訪問請求 | |
Output | 32 | nice_icb_cmd_addr | 存儲器訪問請求的地址 | |
Output | 1 | nice_icb_cmd_read | 內存訪問請求的讀或寫操作 0: 寫 1: 讀 | |
Output | 32 | nice_icb_cmd_wdata | 存儲器寫請求的寫入數據 | |
Output | 2 | nice_icb_cmd_size | 存儲器訪問請求的數據長度 2’b00: 字節 2’b01: 半字 2’b10: 字 2’b11: 保留 | |
Input | 1 | nice_mem_holdup | 該信號為1時表示協處理器占用了主處理器的LSU流水線,用于暫停后續的加載和存儲指令執行 |
?4. 存儲器反饋通道
存儲器反饋通道的具體信號如下表,當協處理器發起存儲器訪問請求的一段時間后,主處理器會向協處理器發起反饋請求,即將nice_icb_rsp_valid信號拉高,并等待協處理器做好接收數據的準備。協處理器準備好后將nice_icb_rsp_ready拉高,將nice_icb_rsp_valid和nice_icb_rsp_ready同時為高時完成一次握手,如里時讀取數據的訪問請求,協處理器會保存或處理nice_icb_rsp_rdata中的數據。如果是向內存寫入數據的請求,同樣需要通過存儲器反饋通道的握手信號進行執行的反饋,只是協處理器不需要接收數據。
通道 | 方向 | 位寬 | 信號名 | 描述 |
存儲器反饋通道 | Input | 1 | nice_icb_rsp_valid | 該信號為1時表示主處理器發出了一個內存訪問反饋 |
Output | 1 | nice_icb_rsp_ready | 該信號為1時表示協處理器可以接收內存訪問反饋 | |
Input | 32 | nice_icb_rsp_rdata | 讀存儲器訪問的讀取數據 | |
Input | 1 | nice_icb_rsp_err | 該信號為1時表示在內存訪問期間檢測到錯誤 |
三、總結
NICE接口是蜂鳥E203處理器擴展自定義指令的協處理器接口,基于RISC-V標準設計,通過四通道機制實現高效硬件加速。其核心特性包括:1)采用請求、反饋、存儲器請求和反饋四個獨立通道,支持指令派發、結果返回和內存訪問;2)強制兩周期延遲設計,避免組合邏輯環路;3)允許協處理器直接訪問主存,實現并行數據流處理。該接口通過卸載復雜計算(如加密、DSP)到專用硬件,顯著提升能效比,特別適用于IoT和邊緣計算場景,同時保持RISC-V架構的兼容性和靈活性。