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

NVMe控制器IP設(shè)計(jì)之接口轉(zhuǎn)換
NVME控制器之隊(duì)列管理模塊
NVMe控制器之完成信息解析模塊
NVME控制器之隊(duì)列管理模塊

NVME控制器之指令控制模塊設(shè)計(jì)
NVMe控制器設(shè)計(jì)1

NVME控制器設(shè)計(jì)1

評(píng)論