一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

NVMe VIP架構(gòu):主機(jī)功能

星星科技指導(dǎo)員 ? 來源:synopsys ? 作者:synopsys ? 2023-05-26 16:54 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

上一篇文章中,介紹了一個基本的NVMe VIP測試用例,包括一些基本的設(shè)置,發(fā)送命令和接收完成。在這里,我們將再看一些NVMe命令,涉及VIP的一些特性和功能。

在這里,您可以了解有關(guān)適用于 NVMe 和 PCIe 的 Synopsys VC 驗證 IP 的更多信息。

貴賓的(提醒)視圖

我們上次簡要介紹了這一點。這次我們將更深入地介紹,因此我們將繼續(xù)參考此圖:

pYYBAGRwc4aAYzD_AARikJWM8Eg768.png

NVMe VIP 提供了一組功能來幫助測試。其中包括隨機(jī)化、功能窺探、簡化的 PRP 和數(shù)據(jù)緩沖區(qū)處理、內(nèi)存屏蔽和內(nèi)置記分板。我們將依次通過另一個示例來查看其中的每一個。

繼續(xù)我們的測試用例...

繼上一篇文章中的“瑣碎測試用例”之后(同樣,我們沒有顯示一些任務(wù)參數(shù)或檢查錯誤),讓我們再看幾個命令來啟動我們的 NVMe 測試用例。

提醒一下:以腳本一詞開頭的任務(wù)是 NVMe 命令。其他(不以腳本開頭)是 VIP 狀態(tài)/控制/配置任務(wù)。

// We will assume that the PCIe stack is setup and running
bit [63:0] base_addr = 32’h0001_0000; // Ctlr BAR base addr
dword_t num_q_entries, ctlr_id;
// Tell the host where the controller has its base address
AllocateControllerID(base_addr, ctlr_id, status);
num_q_entries = 2;
// Create the Admin Completion and Submission Queues
ScriptCreateAdminCplQ(ctlr_id, num_q_entries, status);
ScriptCreateAdminSubQ(ctlr_id, num_q_entries, status);
// Send an “Identify Controller” Command
data_buf_t #(dword_t) identify_buffer; // identify data
identify_buffer = new(1024);
ScriptIdentify(ctlr_id, 0, identify_buffer, 0, status);

我們以調(diào)用標(biāo)識控制器結(jié)束了最后一個示例?,F(xiàn)在,繼續(xù)在這一點上,我們讀取字節(jié) 519:516 以獲取有效命名空間 ID 的數(shù)量。我們通過 SetNumNamespaces() 調(diào)用將其傳遞給主機(jī) VIP。請注意,我們必須對識別控制器緩沖區(qū)中返回的(小端序)數(shù)據(jù)進(jìn)行字節(jié)交換。

int num_ns, nsid, blk_size_pow2, blk_size_in_bytes;
bit [63:0] ns_size_in_blks;
feature_identifier_t feature_id;
nvme_feature_t set_feature;
// We’ll grab the Number of valid namespaces (NN) from the
// identify buffer. Note index converted from bytes to dword.
num_ns = ByteSwap32(identify_buffer[516 >> 2]); // bytes 519:516
// Tell the VIP how many active NSIDs the controller has
SetNumNamespaces(ctlr_id, num_ns, status);

接下來,我們讀取其中一個命名空間(命名空間 ID=1)的信息。請注意,我們在這里“作弊”了一點,因為我們應(yīng)該遍歷所有有效的命名空間。對于這個例子,我們只假設(shè)我們只有 NSID=1。盡管標(biāo)識調(diào)用不采用 PRP 列表,但其主機(jī)內(nèi)存緩沖區(qū)可以具有偏移量。如果需要,請選擇參數(shù)“use_offset=1”。實際偏移通過約束 MIN/MAX_PRP_DWORD_OFFSET_VAR 隨機(jī)化。

// Now send an “Identify Namespace” command for nsid=1
nsid = 1;
use_offset = 1; // Randomize buffer offset
ScriptIdentify(ctlr_id, nsid, identify_buffer,
use_offset, status);
// Pull information from format[0]
blk_size_pow2 = ByteSwap32(identify_buffer.GetData(128 >> 2)));
blk_size_pow2 = (blk_size_pow2 >> 16) & 32’hff; // dword[23:16]
blk_size_in_bytes = 1 << blk_size_pow2;???? ???? // Convert
ns_size_in_blks = ByteSwap64({identify_buffer.GetData(8 >> 2),
identify_buffer.GetData(12 >> 2)});
// Before we create queues, we need to configure the num queues
// on the controller.
feature_id = FEATURE_NUM_QUEUES;
set_feature = new(feature_id);

一旦識別命名空間返回,我們現(xiàn)在有了塊大小和命名空間大小。我們使用設(shè)置功能設(shè)置請求的隊列數(shù)量。通過 VIP 的功能偵聽,這將(透明地)將 VIP 設(shè)置為當(dāng)前支持的提交和完成隊列數(shù)量(用于以后的檢查和錯誤注入支持)。

接下來的步驟設(shè)置命名空間的格式(使用標(biāo)識命名空間數(shù)據(jù)結(jié)構(gòu)中的格式 0)。然后,我們更新命名空間信息的 VIP 視圖。VIP 需要此命名空間信息來保留每個命名空間的記分板。

set_features.SetNumCplQ(2); // Request number of sub &
set_features.SetNumSubQ(3); // cpl queues
// Call Set Features command to set the queues on the ctlr
ScriptSetFeatures(ctlr_id, set_features, …, status);
// Note that Set Features Number of Queues command need not
// return the same amount of queues that were requested. We can
// check by examining set_features.GetNumCplQ() and
// GetNumSubQ(), but in this case we’ll just trust it…
// Format the Namespace
sec_erase = 0; // Don’t use secure erase
pi_md_settings = 0; // Don’t use prot info or metadata
format_number = 0; // From Identify NS data structure
ScriptFormatNVM(ctlr_id, nsid, sec_erase, pi_md_settings,
format_number, …, status);
// Tell the VIP about this NS
SetNamespaceInfo(ctlr_id, nsid, blk_size_in_bytes,
ns_size_in_blks, md_bytes_per_blk,
pi_md_settings, 0, status);

接下來,我們創(chuàng)建一對 I/O 隊列。由于提交隊列需要與其一起傳遞其配套完成隊列,因此我們首先創(chuàng)建完成隊列。請注意,隊列創(chuàng)建例程采用參數(shù)重疊群。如果設(shè)置了重疊群,則隊列將放置在連續(xù)內(nèi)存中,否則將為該隊列創(chuàng)建 PRP 列表。除了創(chuàng)建實際隊列之外,VIP 還會在隊列周圍創(chuàng)建圍欄,以驗證對隊列的內(nèi)存訪問。從控制器(例如)從完成隊列讀取的嘗試將被標(biāo)記為無效的訪問嘗試。實際隊列 ID 是隨機(jī)的(在法律和用戶可配置的約束范圍內(nèi))。

// Create the I/O Queues
num_q_entries = 10;
contig = 1; // Contiguous queue
ScriptCreateIOCplQ(ctlr_id, num_q_entries,
contig, …, cplq_id, …, status);
contig = 0; // PRP-based queue
ScriptCreateIOSubQ(ctlr_id, num_q_entries,
contig, cplq_id …, subq_id, …, status);

一旦我們創(chuàng)建了 I/O 隊列,我們就可以開始執(zhí)行 I/O.使用 ScriptWrite() 和 ScriptRead() 調(diào)用,我們將數(shù)據(jù)發(fā)送到控制器并立即檢索相同的數(shù)據(jù)。數(shù)據(jù)的底層數(shù)據(jù)結(jié)構(gòu)(在主機(jī)內(nèi)存中)由 VIP 自動構(gòu)建。請注意 use_offset 參數(shù)(與我們的隊列創(chuàng)建任務(wù)一樣)來控制我們是否生成 PRP 和 PRP 列表偏移量(分別由 MIN/MAX_PRP_DWORD_OFFSET_VAR 和 MIN/MAX_PRP_LIST_DWORD_OFFSET 控制)。由于我們內(nèi)置了記分板,我們不必比較從寫入的數(shù)據(jù)讀取的數(shù)據(jù),VIP 正在根據(jù)其卷影副本檢查返回的數(shù)據(jù),該卷影副本正在跟蹤成功向控制器寫入的 VIP。

// Do our I/O write then read with a random LBA/length
data_buf_t #(dword_t) wbuf, rbuf; // Write/Read Data buffers
num_blks = RandBetween(1, ns_size_in_blks);
lba = RandBetween(0, ns_size_in_blks – num_blks);
num_dwords = (blk_size_in_bytes / 4) * num_blks;
wbuf = new(num_dwords);
for (int idx = 0 ; idx < num_dwords ; idx++) // Fill the buffer
wbuf.SetData(idx, { 16’hdada, idx[15:0] } );
ScriptWrite(ctlr_id, subq_id, lba, nsid, wbuf, num_blks,
use_offset, …, status);
// We’ll read the same LBA since we know it’s been written
ScriptRead(ctlr_id, subq_id, lba, nsid, rbuf, num_blks,
use_offset, …, status);
// Do what you’d like with the rbuf (that’s the data we just read).

大功告成!

希望這能讓我們完成大部分基礎(chǔ)知識。您應(yīng)該對VIP的操作有很好的感覺。同樣,其中許多任務(wù)都有更多的參數(shù),允許更多的控制和錯誤注入,但我們的目標(biāo)是在不處理更深奧的功能的情況下完成。如果您有VIP手邊的VIP,請隨意瀏覽示例:它們應(yīng)該看起來很熟悉。

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 控制器
    +關(guān)注

    關(guān)注

    114

    文章

    17113

    瀏覽量

    184317
  • PCIe
    +關(guān)注

    關(guān)注

    16

    文章

    1342

    瀏覽量

    85152
  • nvme
    +關(guān)注

    關(guān)注

    0

    文章

    252

    瀏覽量

    23247
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    Xilinx FPGA NVMe Host Controller IP,NVMe主機(jī)控制器

    ,實現(xiàn)必須以及可選的NVMe Admin Command Set和NVM Command Set,實現(xiàn)對PCIe SSD的復(fù)位/斷電管理、IO(Page)讀寫、DMA讀寫和數(shù)據(jù)擦除功能,提供用戶一個
    發(fā)表于 02-21 10:16

    Xilinx FPGA NVMe主機(jī)控制器IP,高性能版本介紹應(yīng)用

    ,實現(xiàn)必須以及可選的NVMe Admin Command Set和NVM Command Set,實現(xiàn)對PCIe SSD的復(fù)位/斷電管理、IO(Page)讀寫、DMA讀寫和數(shù)據(jù)擦除功能,提供用戶一個簡單
    發(fā)表于 03-09 13:56

    Xilinx FPGA高性能NVMe SSD主機(jī)控制器,NVMe Host Controller IP

    )讀寫、DMA讀寫和數(shù)據(jù)擦除功能,提供用戶一個簡單高效的接口實現(xiàn)高性能存儲解決方案。NVMe Host Controller IP DMA讀寫的順序傳輸長度可以配置,最小是4K-Byte,最大
    發(fā)表于 03-27 17:23

    高性能NVMe主機(jī)控制器,Xilinx FPGA NVMe Host Accelerator IP

    )讀寫、DMA讀寫和數(shù)據(jù)擦除功能,提供用戶一個簡單高效的接口實現(xiàn)高性能存儲解決方案。NVMe Host Controller IP DMA讀寫的順序傳輸長度可以配置,最小是4K-Byte,最大
    發(fā)表于 04-10 22:55

    高性能NVMe主機(jī)控制器,Xilinx FPGA PCIe 3

    Self-test管理、IO(Page)讀寫、DMA讀寫和數(shù)據(jù)擦除功能,提供用戶一個簡單高效的接口實現(xiàn)高性能存儲解決方案。NVMe Host Controller IP DMA讀寫的順序傳輸長度可以配置
    發(fā)表于 04-20 14:41

    NVME控制器設(shè)計1

    功能劃分為命令控制模塊、 隊列管理模塊、 PRP 管理模塊三個部分。 圖1NVMe 控制模塊架構(gòu)圖 指令控制模塊負(fù)責(zé) NVMe 指令的組裝、分配、注銷。在
    發(fā)表于 04-24 09:45

    NVMe協(xié)議簡要分析

    NVM Express(NVMe)是一種高性能、可擴(kuò)展的接口協(xié)議,用于通過PCI express(PCIe)總線,實現(xiàn)主機(jī)軟件與NVM設(shè)備之間的通信。目前,由于NVMe SSD相比于SATA SSD
    發(fā)表于 05-15 00:34

    NVMe協(xié)議簡介2

    NVMe指令提交與完成機(jī)制 NVMe指令提交與完成機(jī)制是NVMe協(xié)議的核心,該機(jī)制制定了NVMe指令的交互流程和處理步驟。在基于PCIe的NVMe
    發(fā)表于 05-15 23:15

    NVMe協(xié)議研究掃盲

    內(nèi)部的并行性實現(xiàn)可擴(kuò)展性、高吞吐量和低延遲的目標(biāo)。相較于SATA協(xié)議,NVMe協(xié)議具有以下幾點優(yōu)勢:管理更高效、功能性更強、I/O效率更高、讀寫延遲和功耗更低。由于NVMe SSD與HDD和SATA
    發(fā)表于 06-02 23:28

    NVMe IP高速傳輸卻不依賴便利的XDMA設(shè)計之三:系統(tǒng)架構(gòu)

    吞吐量不低于2GB/s, 隨機(jī)寫IOPS不低于500000, 隨機(jī)寫延遲不高于1ms。 (3) 易集成、 易操作 實現(xiàn)的 NVMe 主機(jī)控制邏輯和 NVMe 固態(tài)硬盤作為存儲子系統(tǒng), 應(yīng)能夠方便的集成到
    發(fā)表于 06-29 17:42

    在Xilinx Zynq UltraScale+ MPSoC中實現(xiàn)的NVMe主機(jī)加速器

    在本演示中,Intelliprop演示了在Xilinx Zynq UltraScale + MPSoC中實現(xiàn)的NVMe主機(jī)加速器。
    的頭像 發(fā)表于 11-26 06:18 ?6558次閱讀

    一文讀懂NVMe的基本原理

    為了便于理解主機(jī)NVMe設(shè)備的關(guān)系,我們這里簡化NVMe設(shè)備的內(nèi)部結(jié)構(gòu)。如圖2所示為NVMe白皮書中的配圖,這里主機(jī)稱為Host,而
    發(fā)表于 09-13 11:42 ?1.2w次閱讀
    一文讀懂<b class='flag-5'>NVMe</b>的基本原理

    NVMe VIP:驗證功能

    我用一個或多或少完整的NVMe VIP測試用例示例結(jié)束了我的上一篇博客文章,試圖展示從基本設(shè)置到執(zhí)行NVM寫入然后讀取的所有內(nèi)容。我們將在這里稍微改變一下,從 NVMe 命令轉(zhuǎn)移到一些可用于協(xié)助您測試的
    的頭像 發(fā)表于 05-26 16:36 ?1917次閱讀
    <b class='flag-5'>NVMe</b> <b class='flag-5'>VIP</b>:驗證<b class='flag-5'>功能</b>

    新思科技NVMe VIP:高層次視圖

    NVM Express 或非易失性內(nèi)存主機(jī)控制器接口(其先前名稱為 NVMHCI,現(xiàn)在縮寫為 NVMe)是一種基于主機(jī)的軟件接口,旨在通過 PCIe 結(jié)構(gòu)與固態(tài)存儲設(shè)備進(jìn)行通信。目前
    的頭像 發(fā)表于 05-26 17:41 ?3024次閱讀
    新思科技<b class='flag-5'>NVMe</b> <b class='flag-5'>VIP</b>:高層次視圖

    本機(jī)NVMe/FC支持提供性能增長路徑虛擬基礎(chǔ)架構(gòu)

    電子發(fā)燒友網(wǎng)站提供《本機(jī)NVMe/FC支持提供性能增長路徑虛擬基礎(chǔ)架構(gòu).pdf》資料免費下載
    發(fā)表于 08-28 09:23 ?0次下載
    本機(jī)<b class='flag-5'>NVMe</b>/FC支持提供性能增長路徑虛擬基礎(chǔ)<b class='flag-5'>架構(gòu)</b>