指令控制模塊由一個指令信息緩存, 一個指令組裝狀態機和一個 ID 池組成。 指令信息緩存中存放著由系統控制模塊寫入的待處理指令信息; 指令組裝狀態機獲取緩存的指令信息, 將其組裝成提交隊列條目寫入提交隊列中; ID 池則用于存放可使用的指令 ID。
圖1 NVMe控制器之指令控制轉移圖
指令組裝狀態機狀態轉移如圖 1所示。 系統復位后, 首先進入 IDLE 狀態。 在IDLE 狀態下, 當檢測到指令信息緩存非空時, 表示有新的指令信息需要處理, 跳轉到 GET_CMD 狀態; 當指令信息緩存為空時, 保持 IDLE 狀態。
在 GET_CMD 狀態下, 讀取一條緩存中的指令信息, 同時從 ID 池中獲取一個 ID,進入 SEL_SQ 狀態; 如果 ID 池中的 ID 全部都在被使用, 則保持 GET_CMD 狀態。
在 SEL_SQ 狀態下, 根據讀取的指令信息的指令類型選擇提交條目將要放入的提交隊列。 當指令類型為 Admin 指令時, 選擇 Admin 提交隊列, 當指令類型為 I/O 指令時, 使用輪詢仲裁選擇將要放入的隊列。 然后跳轉到 WR_SQ 狀態。
在 WR_SQ 狀態下, 將獲取的 ID 和指令信息組裝成為提交條目, 寫入 SEL_SQ狀態下選擇的隊列。 如果指令涉及數據傳輸, 在該狀態下還要將 ID 和對應的 PRP 寫入 PRP 控制模塊。 完成指令的寫入后, 如果指令信息緩存非空, 跳轉到 GET_CMD獲取新的指令信息, 否則回到 IDLE 狀態。
ID 池在復位時被寫入位寬為 16 比特的連續 ID, 由于實際應用中 SSD 處理任務的性能有限, 所以將 ID 池深度設置為 1024, 足以滿足常見 SSD 的并發性能。 在有新的指令信息被組裝成提交條目時, ID 池中的 ID 被讀出; 在接收到新的完成條目時,將完成條目中返回的指令 ID 寫入 ID 池。
對相關視頻感興趣的,B站搜用戶名: 專注與守望
審核編輯 黃宇
-
控制器設計
+關注
關注
0文章
11瀏覽量
6952 -
nvme
+關注
關注
0文章
234瀏覽量
23036
發布評論請先 登錄
NVME控制器之隊列管理模塊
NVMe控制器之完成信息解析模塊
NVME控制器之隊列管理模塊



高壓伺服控制器的原理與作用
什么是電機控制器?具體有哪些應用類型?
簡述cpu控制器的工作原理

評論