本發(fā)明涉及數(shù)據(jù)傳輸領(lǐng)域,尤其涉及一種基于增強(qiáng)型外設(shè)互連(PCIe,Peripheral Component Interconnect express)協(xié)議總線的數(shù)據(jù)傳輸方法及裝置。
背景技術(shù):
PCIe協(xié)議總線是第三代高性能接口總線,屬于一種基于數(shù)據(jù)包的串行連接協(xié)議,它提供高速的、高帶寬的、高性能的、高擴(kuò)展性的、可熱插拔的、點(diǎn)到點(diǎn)的、雙單工的、串行差分信號(hào)鏈路來互聯(lián)設(shè)備。并且,已經(jīng)被廣泛應(yīng)用于計(jì)算機(jī)和電子通信領(lǐng)域的外圍設(shè)備互連上。
基于PCIe協(xié)議總線在通信領(lǐng)域的應(yīng)用,已出現(xiàn)了很多不同的類型,比如:基于PCIe協(xié)議總線的高級(jí)可擴(kuò)展接口(AXI);主機(jī)適配接口(HAL);專利《基于PCIE協(xié)議的中央處理器(CPU)訪問本地總線的裝置及方法》(專利號(hào):CN201310528347.9)闡述的一種通過PCIe實(shí)現(xiàn)CPU訪問寄存器的方法;專利《在PCIE總線上傳輸報(bào)文的方法、設(shè)備和系統(tǒng)》(專利號(hào):CN201110032172.3)闡述的一種以標(biāo)識(shí)(ID)路由的方式從PCIe起始設(shè)備傳輸協(xié)議報(bào)文到目的設(shè)備的方法;等等,但這些已有技術(shù)都是基于某一個(gè)特定應(yīng)用如單一實(shí)現(xiàn)CPU訪問寄存器或者傳輸協(xié)議報(bào)文。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明實(shí)施例期望提供一種基于增強(qiáng)型外設(shè)互連協(xié)議總線的數(shù)據(jù)傳輸方法及裝置,可以基于一條PCIe總線同時(shí)實(shí)現(xiàn)CPU讀寫訪問寄存器和數(shù)據(jù)報(bào)文以直接存儲(chǔ)訪問(DMA,Direct Memory Access)方式進(jìn)行雙向傳輸。
為達(dá)到上述目的,本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的:
本發(fā)明實(shí)施例提供了一種基于增強(qiáng)型外設(shè)互連PCIe協(xié)議總線的數(shù)據(jù)傳輸 方法,所述方法應(yīng)用于控制器,所述控制器中包括第一工作模塊、第二工作模塊、第三工作模塊和第四工作模塊,所述方法包括:
接收對(duì)端設(shè)備發(fā)送的數(shù)據(jù)包,所述數(shù)據(jù)包上攜帶有工作類型標(biāo)志位;
在工作類型標(biāo)志位表示為讀操作時(shí),將所述數(shù)據(jù)包分配給第一工作模塊,所述第一工作模塊解析所述數(shù)據(jù)包獲得讀操作命令,將所述讀操作命令發(fā)送給目標(biāo)設(shè)備,接收目標(biāo)設(shè)備返回的讀數(shù)據(jù),并將所述讀數(shù)據(jù)發(fā)送給所述對(duì)端設(shè)備;
在工作類型標(biāo)志位表示為寫操作時(shí),將所述數(shù)據(jù)包分配給第二工作模塊,所述第二工作模塊解析所述數(shù)據(jù)包獲得寫操作命令時(shí),將所述數(shù)據(jù)包中的寫操作命令發(fā)送給目標(biāo)設(shè)備,接收目標(biāo)設(shè)備返回的寫操作完成信號(hào);
所述第二工作模塊解析所述數(shù)據(jù)包獲得直接存儲(chǔ)訪問DMA讀操作命令時(shí),啟動(dòng)所述第三工作模塊,將所述DMA讀操作命令發(fā)送給所述第三工作模塊,所述第三工作模塊根據(jù)所述DMA讀操作命令獲得所述對(duì)端設(shè)備中的發(fā)送報(bào)文,將所述發(fā)送報(bào)文發(fā)送給目標(biāo)設(shè)備;
所述第二工作模塊解析所述數(shù)據(jù)包獲得DMA寫操作命令時(shí),啟動(dòng)所述第四工作模塊,將所述DMA寫操作命令發(fā)送給所述第四工作模塊,所述第四工作模塊根據(jù)所述DMA寫操作命令將目標(biāo)設(shè)備發(fā)送的接收?qǐng)?bào)文,發(fā)送給對(duì)端設(shè)備。
上述方案中,所述第一工作模塊解析所述數(shù)據(jù)包獲得讀操作命令,將所述讀操作命令發(fā)送給目標(biāo)設(shè)備,接收目標(biāo)設(shè)備返回的讀數(shù)據(jù),并將所述讀數(shù)據(jù)發(fā)送給所述對(duì)端設(shè)備,包括:
所述第一工作模塊解析數(shù)據(jù)包獲得CPU讀操作命令,然后將所述CPU讀操作命令轉(zhuǎn)換為一個(gè)或多個(gè)通用寄存器讀操作訪問命令;其中,所述CPU讀操作命令中包括讀使能、讀初始地址、讀數(shù)據(jù)個(gè)數(shù),所述通用寄存器讀操作訪問命令包括讀使能、讀地址;
第一工作模塊將所述一個(gè)或多個(gè)通用寄存器讀操作訪問命令緩存到第一異步先入先出緩存器FIFO中;
所述第一工作模塊中的第一異步FIFO將所述一個(gè)或多個(gè)通用寄存器讀操 作訪問命令的時(shí)序轉(zhuǎn)換為符合目標(biāo)設(shè)備的時(shí)序,并在轉(zhuǎn)換后將所述一個(gè)或多個(gè)通用寄存器讀操作訪問命令通過配置通道發(fā)送給所述目標(biāo)設(shè)備;通用寄存器讀操作訪問命令用于所述目標(biāo)設(shè)備進(jìn)行讀操作獲得讀數(shù)據(jù);
所述第一工作模塊中的第二異步FIFO通過配置通道接收所述讀數(shù)據(jù),并將所述讀數(shù)據(jù)轉(zhuǎn)換為符合PCIe協(xié)議要求的TLP包結(jié)構(gòu)形式和時(shí)序;并將轉(zhuǎn)換后的讀數(shù)據(jù)發(fā)送給對(duì)端設(shè)備。
上述方案中,所述第一工作模塊的第二異步FIFO在第一預(yù)設(shè)時(shí)間內(nèi)未接收到所述目標(biāo)設(shè)備發(fā)送的讀數(shù)據(jù)時(shí),自行生成無效讀數(shù)據(jù)。
上述方案中,所述第二工作模塊解析所述數(shù)據(jù)包獲得寫操作命令時(shí),將所述數(shù)據(jù)包中的寫操作命令發(fā)送給目標(biāo)設(shè)備,接收目標(biāo)設(shè)備返回的寫操作完成信號(hào),包括:
所述第二工作模塊解析數(shù)據(jù)包獲得CPU寫操作命令,然后將所述CPU寫操作命令轉(zhuǎn)換為一個(gè)或多個(gè)通用寄存器寫操作訪問命令;其中,所述CPU寫操作命令中包括寫使能、寫數(shù)據(jù)、寫初始地址、寫數(shù)據(jù)個(gè)數(shù),所述通用寄存器寫操作訪問命令包括寫使能、寫地址、所述寫地址對(duì)應(yīng)的單個(gè)寫數(shù)據(jù);
第二工作模塊將所述一個(gè)或多個(gè)通用寄存器寫操作訪問命令緩存到第三異步FIFO中;
所述第二工作模塊中的第三異步FIFO將所述一個(gè)或多個(gè)通用寄存器寫操作訪問命令的時(shí)序轉(zhuǎn)換為符合目標(biāo)設(shè)備的時(shí)序,并在轉(zhuǎn)換后將所述一個(gè)或多個(gè)通用寄存器寫操作訪問命令通過配置通道發(fā)送給所述目標(biāo)設(shè)備;通用寄存器寫操作訪問命令用于所述目標(biāo)設(shè)備在寫地址寫入所述寫地址對(duì)應(yīng)的單個(gè)寫數(shù)據(jù);
所述第二工作模塊通過配置通道接收所述目標(biāo)設(shè)備發(fā)送的寫操作完成信號(hào)。
上述方案中,所述第二工作模塊在第二預(yù)設(shè)時(shí)間內(nèi)未接收到所述目標(biāo)設(shè)備發(fā)送的寫操作完成信號(hào)時(shí),所述第二工作模塊自行生成所述寫操作完成信號(hào)。
上述方案中,所述DMA讀操作命令中包括報(bào)文發(fā)送指示信息的初始地址和地址空間大?。凰龅谌ぷ髂K根據(jù)所述DMA讀操作命令獲得所述對(duì)端設(shè)備中的發(fā)送報(bào)文,將所述發(fā)送報(bào)文發(fā)送給目標(biāo)設(shè)備,包括:
在第i次時(shí),所述第三工作模塊根據(jù)所述DMA讀操作命令將報(bào)文發(fā)送指示信息的地址發(fā)送給對(duì)端設(shè)備;其中,所述報(bào)文發(fā)送指示信息的地址為報(bào)文發(fā)送指示信息的初始地址+i-1,i為大于等于1的整數(shù);
所述第三工作模塊接收對(duì)端設(shè)備發(fā)送的所述報(bào)文發(fā)送指示信息的地址中的報(bào)文發(fā)送指示信息內(nèi)容;其中,所述報(bào)文發(fā)送指示信息內(nèi)容包括報(bào)文發(fā)送有效指示信息、報(bào)文大小和報(bào)文初始緩存的地址;
所述第三工作模塊在所述報(bào)文發(fā)送有效指示信息為有效時(shí),將所述報(bào)文大小和報(bào)文初始緩存地址發(fā)送給對(duì)端設(shè)備;
所述第三工作模塊接收所述對(duì)端設(shè)備發(fā)送的所述報(bào)文大小和報(bào)文初始緩存地址對(duì)應(yīng)的發(fā)送報(bào)文;
所述第三工作模塊將所述發(fā)送報(bào)文緩存到第四異步FIFO中,經(jīng)過時(shí)序轉(zhuǎn)換、數(shù)據(jù)位寬轉(zhuǎn)換后,轉(zhuǎn)換為通用包結(jié)構(gòu)形式報(bào)文,通過DMA通道發(fā)送給目標(biāo)設(shè)備;
所述第三工作模塊向?qū)Χ嗽O(shè)備發(fā)送報(bào)文發(fā)送完成命令,所述報(bào)文發(fā)送完成命令用于所述對(duì)端設(shè)備將所述發(fā)送報(bào)文對(duì)應(yīng)的報(bào)文發(fā)送有效指示信息更改為無效;
依次循環(huán)進(jìn)行上述步驟,直至所述報(bào)文發(fā)送指示信息的地址超出所述報(bào)文發(fā)送指示信息的初始地址和地址空間大小限定的地址范圍。
上述方案中,所述DMA寫操作命令中包括報(bào)文接收指示信息的初始地址和地址空間大小;所述第四工作模塊根據(jù)所述DMA寫操作命令將目標(biāo)設(shè)備發(fā)送的接收?qǐng)?bào)文,發(fā)送給對(duì)端設(shè)備,包括:
在第j次時(shí),所述第四工作模塊根據(jù)所述DMA寫操作命令將報(bào)文接收指示信息的地址發(fā)送給對(duì)端設(shè)備;其中,所述報(bào)文接收指示信息的地址為報(bào)文接收指示信息的初始地址+j-1,j為大于等于1的整數(shù);
所述第四工作模塊接收對(duì)端設(shè)備發(fā)送的所述報(bào)文接收指示信息的地址中的報(bào)文接收指示信息內(nèi)容;其中,所述報(bào)文接收指示信息內(nèi)容包括報(bào)文接收有效指示信息、接收?qǐng)?bào)文的初始緩存地址;
所述第四工作模塊的第五異步FIFO將目標(biāo)設(shè)備發(fā)送的通用包結(jié)構(gòu)形式的接收?qǐng)?bào)文進(jìn)行緩存、時(shí)序轉(zhuǎn)換和數(shù)據(jù)位寬轉(zhuǎn)換后,轉(zhuǎn)換為符合PCIe協(xié)議要求的TLP包結(jié)構(gòu)形式和時(shí)序的報(bào)文數(shù)據(jù)包;
在所述報(bào)文接收有效指示信息為有效時(shí),所述第四工作模塊將所述接收?qǐng)?bào)文的初始緩存地址以及從第五異步FIFO輸出的報(bào)文數(shù)據(jù)包發(fā)送給對(duì)端設(shè)備;所述接收?qǐng)?bào)文的初始緩存地址用于所述對(duì)端設(shè)備從所述接收?qǐng)?bào)文的初始緩存地址處緩存報(bào)文數(shù)據(jù)包;
所述第四工作模塊對(duì)端設(shè)備發(fā)送報(bào)文接收完成命令,所述報(bào)文接收完成命令用于所述對(duì)端設(shè)備將所述報(bào)文數(shù)據(jù)包初始緩存地址對(duì)應(yīng)的報(bào)文接收有效指示信息更改為無效;
依次循環(huán)進(jìn)行上述步驟,直至所述報(bào)文接收指示信息的地址超出所述報(bào)文接收指示信息的初始地址和地址空間大小限定的地址范圍。
本發(fā)明實(shí)施例還提供了一種基于增強(qiáng)型外設(shè)互連PCIe協(xié)議總線的數(shù)據(jù)傳輸裝置,所述裝置包括:接收模塊,分配模塊,第一工作模塊、第二工作模塊、第三工作模塊和第四工作模塊,其中,
接收模塊,用于接收對(duì)端設(shè)備發(fā)送的數(shù)據(jù)包,所述數(shù)據(jù)包上攜帶有工作類型標(biāo)志位;
分配模塊,用于在所述接收模塊接收到的工作類型標(biāo)志位表示為讀操作時(shí),將所述數(shù)據(jù)包分配給第一工作模塊;
所述第一工作模塊,用于在解析出所述分配模塊分配的數(shù)據(jù)包獲得讀操作命令時(shí),將所述讀操作命令發(fā)送給目標(biāo)設(shè)備,接收目標(biāo)設(shè)備返回的讀數(shù)據(jù),并將所述讀數(shù)據(jù)發(fā)送給所述對(duì)端設(shè)備;
分配模塊,還用于在所述接收模塊接收到的工作類型標(biāo)志位表示為寫操作時(shí),將所述數(shù)據(jù)包分配給第二工作模塊;
所述第二工作模塊,用于在解析出所述分配模塊分配的所述數(shù)據(jù)包獲得寫操作命令時(shí),將所述數(shù)據(jù)包中的寫操作命令發(fā)送給目標(biāo)設(shè)備,接收目標(biāo)設(shè)備返回的寫操作完成信號(hào);
所述第二工作模塊,還用于在解析所述數(shù)據(jù)包獲得直接存儲(chǔ)訪問DMA讀操作命令時(shí),啟動(dòng)所述第三工作模塊,并將所述DMA讀操作命令發(fā)送給所述第三工作模塊;
所述第三工作模塊,用于根據(jù)所述第二工作模塊發(fā)送的所述DMA讀操作命令獲得所述對(duì)端設(shè)備中的發(fā)送報(bào)文,并將所述發(fā)送報(bào)文發(fā)送給目標(biāo)設(shè)備;
所述第二工作模塊,還用于在解析出所述數(shù)據(jù)包獲得DMA寫操作命令時(shí),啟動(dòng)所述第四工作模塊,將所述DMA寫操作命令發(fā)送給所述第四工作模塊;
所述第四工作模塊,用于根據(jù)所述第二工作模塊發(fā)送的所述DMA寫操作命令將目標(biāo)設(shè)備發(fā)送的接收?qǐng)?bào)文,發(fā)送給對(duì)端設(shè)備。
上述方案中,所述第一工作模塊中包括:第一處理模塊,第一異步先入先出緩存器FIFO模塊和第二異步FIFO模塊;其中,
所述第一處理模塊,用于解析數(shù)據(jù)包獲得CPU讀操作命令,然后將所述CPU讀操作命令轉(zhuǎn)換為一個(gè)或多個(gè)通用寄存器讀操作訪問命令;其中,所述CPU讀操作命令中包括讀使能、讀初始地址、讀數(shù)據(jù)個(gè)數(shù),所述通用寄存器讀操作訪問命令包括讀使能、讀地址;
所述第一處理模塊,還用于將所述一個(gè)或多個(gè)通用寄存器讀操作訪問命令緩存到第一異步先入先出緩存器FIFO模塊中;
所述第一異步FIFO模塊,用于將所述第一處理模塊緩存的一個(gè)或多個(gè)通用寄存器讀操作訪問命令的時(shí)序轉(zhuǎn)換為符合目標(biāo)設(shè)備的時(shí)序,并在轉(zhuǎn)換后將所述一個(gè)或多個(gè)通用寄存器讀操作訪問命令通過配置通道發(fā)送給所述目標(biāo)設(shè)備;通用寄存器讀操作訪問命令用于所述目標(biāo)設(shè)備進(jìn)行讀操作獲得讀數(shù)據(jù);
所述第二異步FIFO模塊,用于通過配置通道接收所述讀數(shù)據(jù),并將所述讀數(shù)據(jù)轉(zhuǎn)換為符合PCIe協(xié)議要求的TLP包結(jié)構(gòu)形式和時(shí)序;并將轉(zhuǎn)換后的讀數(shù)據(jù)發(fā)送給對(duì)端設(shè)備。
上述方案中,所述第一異步FIFO模塊,還用于在第一預(yù)設(shè)時(shí)間內(nèi)未接收到所述目標(biāo)設(shè)備發(fā)送的讀數(shù)據(jù)時(shí),自行生成無效讀數(shù)據(jù)。
上述方案中,所述第二工作模塊中包括:第二處理模塊,第三異步FIFO 模塊;其中,
所述第二處理模塊,用于解析數(shù)據(jù)包獲得CPU寫操作命令,然后將所述CPU寫操作命令轉(zhuǎn)換為一個(gè)或多個(gè)通用寄存器寫操作訪問命令;其中,所述CPU寫操作命令中包括寫使能、寫數(shù)據(jù)、寫初始地址、寫數(shù)據(jù)個(gè)數(shù),所述通用寄存器寫操作訪問命令包括寫使能、寫地址、所述寫地址對(duì)應(yīng)的單個(gè)寫數(shù)據(jù);
所述第二處理模塊,還用于將所述一個(gè)或多個(gè)通用寄存器寫操作訪問命令緩存到第三異步FIFO模塊中;
所述第三異步FIFO模塊,用于將所述第二處理模塊緩存的所述一個(gè)或多個(gè)通用寄存器寫操作訪問命令的時(shí)序轉(zhuǎn)換為符合目標(biāo)設(shè)備的時(shí)序,并在轉(zhuǎn)換后將所述一個(gè)或多個(gè)通用寄存器寫操作訪問命令通過配置通道發(fā)送給所述目標(biāo)設(shè)備;通用寄存器寫操作訪問命令用于所述目標(biāo)設(shè)備在寫地址寫入所述寫地址對(duì)應(yīng)的單個(gè)寫數(shù)據(jù);
所述第二處理模塊,還用于通過配置通道接收所述目標(biāo)設(shè)備發(fā)送的寫操作完成信號(hào)。
上述方案中,所述第二處理模塊,還用于在第二預(yù)設(shè)時(shí)間內(nèi)未接收到所述目標(biāo)設(shè)備發(fā)送的寫操作完成信號(hào)時(shí),生成所述寫操作完成信號(hào)。
上述方案中,所述DMA讀操作命令中包括報(bào)文發(fā)送指示信息的初始地址和地址空間大?。凰龅谌ぷ髂K包括第三處理模塊和第四異步FIFO模塊;其中,
第三處理模塊,用于在第i次時(shí),根據(jù)所述DMA讀操作命令將報(bào)文發(fā)送指示信息的地址發(fā)送給對(duì)端設(shè)備;其中,所述報(bào)文發(fā)送指示信息的地址為報(bào)文發(fā)送指示信息的初始地址+i-1,i為大于等于1的整數(shù);所述報(bào)文發(fā)送指示信息的地址不超出所述報(bào)文發(fā)送指示信息的初始地址和地址空間大小限定的地址范圍
第三處理模塊,還用于接收對(duì)端設(shè)備發(fā)送的所述報(bào)文發(fā)送指示信息的地址中的報(bào)文發(fā)送指示信息內(nèi)容;其中,所述報(bào)文發(fā)送指示信息內(nèi)容包括報(bào)文發(fā)送有效指示信息、報(bào)文大小和報(bào)文初始緩存的地址;
第三處理模塊,還用于在所述報(bào)文發(fā)送有效指示信息為有效時(shí),將所述報(bào)文大小和報(bào)文初始緩存地址發(fā)送給對(duì)端設(shè)備;
第三處理模塊,還用于接收所述對(duì)端設(shè)備發(fā)送的所述報(bào)文大小和報(bào)文初始緩存地址對(duì)應(yīng)的發(fā)送報(bào)文,并將所述發(fā)送報(bào)文緩存到第四異步FIFO模塊中
所述第四異步FIFO模塊,用于在將所述第三處理模塊緩存的發(fā)送報(bào)文經(jīng)過時(shí)序轉(zhuǎn)換、數(shù)據(jù)位寬轉(zhuǎn)換后,轉(zhuǎn)換為通用包結(jié)構(gòu)形式報(bào)文,通過DMA通道發(fā)送給目標(biāo)設(shè)備;
第三處理模塊,還用于在所述第四異步FIFO模塊將所述發(fā)送報(bào)文發(fā)送給目標(biāo)設(shè)備后,向?qū)Χ嗽O(shè)備發(fā)送報(bào)文發(fā)送完成命令,所述報(bào)文發(fā)送完成命令用于所述對(duì)端設(shè)備將所述發(fā)送報(bào)文對(duì)應(yīng)的報(bào)文發(fā)送有效指示信息更改為無效。
上述方案中,所述DMA寫操作命令中包括報(bào)文接收指示信息的初始地址和地址空間大小;所述第四工作模塊包括:第四處理模塊和第五異步FIFO模塊,其中,
所述第四處理模塊,用于在第j次時(shí),根據(jù)所述DMA寫操作命令將報(bào)文接收指示信息的地址發(fā)送給對(duì)端設(shè)備;其中,所述報(bào)文接收指示信息的地址為報(bào)文接收指示信息的初始地址+j-1,j為大于等于1的整數(shù);所述報(bào)文接收指示信息的地址未超出所述報(bào)文接收指示信息的初始地址和地址空間大小限定的地址范圍;
所述第四處理模塊,還用于接收對(duì)端設(shè)備發(fā)送的所述報(bào)文接收指示信息的地址中的報(bào)文接收指示信息內(nèi)容;其中,所述報(bào)文接收指示信息內(nèi)容包括報(bào)文接收有效指示信息、接收?qǐng)?bào)文的初始緩存地址;
所述第五異步FIFO模塊,用于將目標(biāo)設(shè)備發(fā)送的通用包結(jié)構(gòu)形式的接收?qǐng)?bào)文進(jìn)行緩存、時(shí)序轉(zhuǎn)換和數(shù)據(jù)位寬轉(zhuǎn)換后,轉(zhuǎn)換為符合PCIe協(xié)議要求的TLP包結(jié)構(gòu)形式和時(shí)序的報(bào)文數(shù)據(jù)包;
所述第四處理模塊,還用于在所述報(bào)文接收有效指示信息為有效時(shí),將所述接收?qǐng)?bào)文的初始緩存地址以及所述第五異步FIFO模塊輸出的報(bào)文數(shù)據(jù)包發(fā)送給對(duì)端設(shè)備;所述接收?qǐng)?bào)文的初始緩存地址用于所述對(duì)端設(shè)備從所述接收?qǐng)?bào) 文的初始緩存地址處緩存報(bào)文數(shù)據(jù)包;
所述第四處理模塊,還用于向?qū)Χ嗽O(shè)備發(fā)送報(bào)文接收完成命令,所述報(bào)文接收完成命令用于所述對(duì)端設(shè)備將所述報(bào)文數(shù)據(jù)包初始緩存地址對(duì)應(yīng)的報(bào)文接收有效指示信息更改為無效。
本發(fā)明實(shí)施例提供的基于增強(qiáng)型外設(shè)互連協(xié)議總線的數(shù)據(jù)傳輸方法及裝置,控制器中兩個(gè)或兩個(gè)以上的工作模塊可以同時(shí)工作,這樣,基于一條PCIe總線鏈路,可以實(shí)現(xiàn)同時(shí)進(jìn)行CPU讀寫訪問寄存器操作和數(shù)據(jù)報(bào)文以DMA方式進(jìn)行雙向傳輸,從而也大大簡化了PCIe總線設(shè)備或系統(tǒng),具有應(yīng)用靈活多樣性的特點(diǎn);另外,一個(gè)所述控制器可以同時(shí)支持一個(gè)或一個(gè)以上的目標(biāo)設(shè)備,具有非常好的擴(kuò)展性。
附圖說明
圖1為本發(fā)明實(shí)施例1提供的一種基于PCIe協(xié)議總線的數(shù)據(jù)傳輸方法的流程示意圖;
圖2為本發(fā)明實(shí)施例2提供的基于PCIe協(xié)議總線的系統(tǒng)架構(gòu)框圖;
圖3為本發(fā)明實(shí)施例2提供的第一種數(shù)據(jù)傳輸方法的流程示意圖;
圖4為本發(fā)明實(shí)施例2提供的第二種數(shù)據(jù)傳輸方法的流程示意圖;
圖5為本發(fā)明實(shí)施例2提供的第三種數(shù)據(jù)傳輸方法的流程示意圖;
圖6為本發(fā)明實(shí)施例2提供的第四種數(shù)據(jù)傳輸方法的流程示意圖;
圖7為本發(fā)明實(shí)施例3提供的一種基于PCIe協(xié)議總線的數(shù)據(jù)傳輸裝置的結(jié)構(gòu)框圖;
圖8為本發(fā)明實(shí)施例3提供的第一工作模塊的結(jié)構(gòu)框圖;
圖9為本發(fā)明實(shí)施例3提供的第二工作模塊的結(jié)構(gòu)框圖;
圖10為本發(fā)明實(shí)施例3提供的第三工作模塊的結(jié)構(gòu)框圖;
圖11為本發(fā)明實(shí)施例3提供的第四工作模塊的結(jié)構(gòu)框圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述。
實(shí)施例1
本發(fā)明實(shí)施例提供了一種基于PCIe協(xié)議總線的數(shù)據(jù)傳輸方法,所述方法應(yīng)用于控制器,所述控制器中包括第一工作模塊、第二工作模塊、第三工作模塊和第四工作模塊,如圖1所示,本實(shí)施例方法的處理流程包括以下步驟:
步驟101、接收對(duì)端設(shè)備發(fā)送的數(shù)據(jù)包,所述數(shù)據(jù)包上攜帶有工作類型標(biāo)志位。
本實(shí)施例方法是對(duì)端設(shè)備與目標(biāo)設(shè)備的之間的數(shù)據(jù)傳輸方法,主要傳輸類型有CPU讀、CPU寫、DMA讀、DMA寫;對(duì)端設(shè)備發(fā)送給控制器的數(shù)據(jù)包上攜帶有工作類型標(biāo)志位,以使控制器區(qū)分工作類型,進(jìn)而應(yīng)用不同的模塊進(jìn)行數(shù)據(jù)處理。
步驟102、在工作類型標(biāo)志位表示為讀操作時(shí),將所述數(shù)據(jù)包分配給第一工作模塊。
步驟103、所述第一工作模塊解析所述數(shù)據(jù)包獲得讀操作命令,將所述讀操作命令發(fā)送給目標(biāo)設(shè)備,接收目標(biāo)設(shè)備返回的讀數(shù)據(jù),并將所述讀數(shù)據(jù)發(fā)送給所述對(duì)端設(shè)備。
這里,第一工作模塊用來處理對(duì)端設(shè)備發(fā)送來的讀操作數(shù)據(jù)包,讀操作數(shù)據(jù)包中會(huì)攜帶有讀操作命令,讀操作命令中會(huì)指明要求目標(biāo)設(shè)備進(jìn)行讀操作的地址,控制器將讀操作命令轉(zhuǎn)發(fā)給目標(biāo)設(shè)備后,目標(biāo)設(shè)備會(huì)根據(jù)讀操作命令在相應(yīng)地址處讀取數(shù)據(jù)獲得讀數(shù)據(jù),然后將讀數(shù)據(jù)轉(zhuǎn)發(fā)給控制器,控制器再將該讀數(shù)據(jù)轉(zhuǎn)發(fā)給對(duì)端設(shè)備,這就完成了一次讀操作。
需要說明的是,在上述過程中,兩個(gè)設(shè)備之間進(jìn)行數(shù)據(jù)傳輸時(shí)要按照適應(yīng)的數(shù)據(jù)格式進(jìn)行傳輸,可以進(jìn)行格式轉(zhuǎn)換,將數(shù)據(jù)轉(zhuǎn)換為適應(yīng)的格式。
步驟104、在工作類型標(biāo)志位表示為寫操作時(shí),將所述數(shù)據(jù)包分配給第二 工作模塊。
步驟105、所述第二工作模塊解析所述數(shù)據(jù)包獲得寫操作命令時(shí),將所述數(shù)據(jù)包中的寫操作命令發(fā)送給目標(biāo)設(shè)備,接收目標(biāo)設(shè)備返回的寫操作完成信號(hào)。
這里,第二工作模塊用來處理對(duì)端設(shè)備發(fā)送來的寫操作數(shù)據(jù)包,寫操作數(shù)據(jù)包中會(huì)攜帶有寫操作命令,寫操作命令中會(huì)指明要求目標(biāo)設(shè)備進(jìn)行寫操作的地址以及寫數(shù)據(jù),第二工作模塊將寫操作命令轉(zhuǎn)發(fā)給目標(biāo)設(shè)備后,目標(biāo)設(shè)備會(huì)根據(jù)寫操作命令將該寫數(shù)據(jù)寫到相應(yīng)地址處,然后發(fā)送寫操作完成信號(hào)給第二工作模塊,第二工作模塊決定接收到寫操作完成信號(hào)后決定是否可以發(fā)送下一個(gè)寫操作命令給目標(biāo)設(shè)備。
在上述過程中,兩個(gè)設(shè)備之間進(jìn)行數(shù)據(jù)傳輸時(shí)要按照適應(yīng)的數(shù)據(jù)格式進(jìn)行傳輸,可以進(jìn)行格式轉(zhuǎn)換,將數(shù)據(jù)轉(zhuǎn)換為適應(yīng)的格式。
步驟106、所述第二工作模塊解析所述數(shù)據(jù)包獲得DMA讀操作命令時(shí),啟動(dòng)所述第三工作模塊,將所述DMA讀操作命令發(fā)送給所述第三工作模塊。
步驟107、所述第三工作模塊根據(jù)所述DMA讀操作命令獲得所述對(duì)端設(shè)備中的發(fā)送報(bào)文,將所述發(fā)送報(bào)文發(fā)送給目標(biāo)設(shè)備。
這里,在工作類型標(biāo)志位表示為寫操作時(shí),將所述數(shù)據(jù)包分配給第二工作模塊,所述第二工作模塊解析所述數(shù)據(jù)包獲得DMA讀操作命令時(shí),啟動(dòng)所述第三工作模塊,將所述DMA讀操作命令發(fā)送給所述第三工作模塊。所述第三工作模塊根據(jù)所述DMA讀操作命令與對(duì)端設(shè)備進(jìn)行信息交互獲得對(duì)端設(shè)備要發(fā)送給目標(biāo)設(shè)備的發(fā)送報(bào)文,然后第三工作模塊將獲得的所述發(fā)送報(bào)文發(fā)送給目標(biāo)設(shè)備。
步驟108、所述第二工作模塊解析所述數(shù)據(jù)包獲得DMA寫操作命令時(shí),啟動(dòng)所述第四工作模塊,將所述DMA寫操作命令發(fā)送給所述第四工作模塊。
步驟109、所述第四工作模塊根據(jù)所述DMA寫操作命令將目標(biāo)設(shè)備發(fā)送的接收?qǐng)?bào)文,發(fā)送給對(duì)端設(shè)備。
這里,在工作類型標(biāo)志位表示為寫操作時(shí),將所述數(shù)據(jù)包分配給第二工作模塊,所述第二工作模塊解析所述數(shù)據(jù)包獲得DMA讀操作命令時(shí),啟動(dòng)所述 第四工作模塊,將所述DMA讀操作命令發(fā)送給所述第四工作模塊。所述第四工作模塊根據(jù)所述DMA寫操作命令與對(duì)端設(shè)備進(jìn)行信息交互獲得對(duì)端設(shè)備給接收?qǐng)?bào)文分配的緩存地址,然后第三工作模塊將獲得的所述目標(biāo)設(shè)備發(fā)送的接收?qǐng)?bào)文轉(zhuǎn)發(fā)給對(duì)端設(shè)備,使對(duì)端設(shè)備在給接收?qǐng)?bào)文分配的緩存地址緩存該接收?qǐng)?bào)文。
上述過程中,步驟102-103和步驟104-105沒有先后順序之分,步驟105、步驟106-107和步驟108-109也沒有先后順序之分,控制器只是根據(jù)數(shù)據(jù)包的內(nèi)容選取工作模塊進(jìn)行上述步驟。
本實(shí)施例方法中,控制器中兩個(gè)或兩個(gè)以上的工作模塊可以同時(shí)工作,這樣基于一條PCIe總線鏈路,本實(shí)施例方法可以實(shí)現(xiàn)同時(shí)進(jìn)行CPU讀寫訪問寄存器操作和數(shù)據(jù)報(bào)文以DMA的方式雙向傳輸,從而也大大簡化了一個(gè)PCIe總線設(shè)備或系統(tǒng),也具有應(yīng)用靈活多樣性的特點(diǎn);且本實(shí)施例方法中,一個(gè)所述控制器可以同時(shí)支持一個(gè)或一個(gè)以上所述目標(biāo)設(shè)備,具有非常好的擴(kuò)展性。
實(shí)施例2
本發(fā)明實(shí)施例提供了一種基于PCIe協(xié)議總線的數(shù)據(jù)傳輸方法,該方法是基于如圖2所示的PCIe鏈路系統(tǒng)架構(gòu),如圖2所示,所述PCIe鏈路系統(tǒng)包括對(duì)端設(shè)備201、協(xié)議層設(shè)備202、控制器203、目標(biāo)設(shè)備204;其中,
所述對(duì)端設(shè)備201能產(chǎn)生CPU讀操作命令和CPU寫操作命令;具有報(bào)文接收指示信息和報(bào)文發(fā)送指示信息的緩存空間;具有緩存接收?qǐng)?bào)文和發(fā)送報(bào)文的緩存空間;在整個(gè)PCIe鏈路系統(tǒng)中作為一個(gè)PCIe根設(shè)備、交換設(shè)備或端點(diǎn)設(shè)備工作;與所述協(xié)議層設(shè)備202通過PCIe鏈路(即:高速串行總線SerDes)進(jìn)行信息的高速、多帶寬的點(diǎn)對(duì)點(diǎn)通信。
協(xié)議層設(shè)備202是為了實(shí)現(xiàn)PCIe協(xié)議層的功能和要求,使得本設(shè)備在整個(gè)PCIe鏈路系統(tǒng)中作為一個(gè)PCIe端點(diǎn)設(shè)備工作。它具有一個(gè)高速串行(SerDes)接口和一個(gè)事務(wù)層包(TLP)接口,其中SerDes接口是與所述對(duì)端設(shè)備201進(jìn)行互聯(lián)和數(shù)據(jù)交互,TLP接口是與所述控制器203進(jìn)行互聯(lián)和數(shù)據(jù)交互。
控制器203中包括第一工作模塊、第二工作模塊、第三工作模塊和第四工 作模塊,控制器203通過第一工作模塊執(zhí)行所述對(duì)端設(shè)備201通過協(xié)議層設(shè)備202發(fā)送過來的CPU讀操作命令,通過第二工作模塊執(zhí)行所述對(duì)端設(shè)備201通過協(xié)議層設(shè)備202發(fā)送過來的CPU寫操作命令;通過第二工作模塊和第三工作模塊協(xié)作執(zhí)行所述對(duì)端設(shè)備201通過協(xié)議層設(shè)備202發(fā)送過來的DMA寫操作命令,通過第二工作模塊和第四工作模塊協(xié)作執(zhí)行所述對(duì)端設(shè)備201通過協(xié)議層設(shè)備202發(fā)送過來的DMA讀操作命令。
所述控制器203上設(shè)置有配置通道接口和DMA通道接口。配置通道接口接口用于發(fā)送和接收CPU讀寫指令,DMA通道接口用于發(fā)送和接收DMA讀寫指令。
目標(biāo)設(shè)備204包括但不限于具有符合所述控制器203的配置通道接口和DMA通道接口中的至少一種接口。在本實(shí)施例中,所述控制器203可以與一個(gè)或一個(gè)以上的所述目標(biāo)設(shè)備204進(jìn)行數(shù)據(jù)通信??刂破?03與目標(biāo)設(shè)備204之間通過配置通道接口連接的通道為配置通道,控制器203與目標(biāo)設(shè)備204之間通過DMA通道接口連接的通道為DMA通道,配置通道用于傳輸CPU讀寫操作的數(shù)據(jù),DMA通道用于傳輸DMA讀寫操作的報(bào)文。
下述方法中,所述對(duì)端設(shè)備與協(xié)議層設(shè)備之間通過高速串行總線SerDes進(jìn)行數(shù)據(jù)交互,數(shù)據(jù)形式為PCIe協(xié)議包;協(xié)議層設(shè)備與控制器之間通過各自的TLP接口進(jìn)行數(shù)據(jù)交互,數(shù)據(jù)形式為TLP包;協(xié)議層設(shè)備可以將對(duì)端設(shè)備發(fā)送的PCIe協(xié)議包轉(zhuǎn)換為TLP包后轉(zhuǎn)發(fā)給控制器,或者,將控制器發(fā)送的TLP包轉(zhuǎn)換為PCIe協(xié)議包后轉(zhuǎn)發(fā)給對(duì)端設(shè)備。
如圖3所示,為對(duì)端設(shè)備從目標(biāo)設(shè)備進(jìn)行CPU訪問讀數(shù)據(jù)的方法,所述方法中控制器的第一工作模塊進(jìn)行工作,該方法的處理流程包括以下步驟:
步驟301、對(duì)端設(shè)備產(chǎn)生CPU讀操作命令,并將所述CPU讀操作命令組成PCIe協(xié)議包通過高速串行總線SerDes發(fā)送給協(xié)議層設(shè)備。
組裝成的PCIe協(xié)議包上設(shè)置有工作類型標(biāo)志位,所述工作類型標(biāo)志位表示為讀操作。
步驟302、協(xié)議層設(shè)備將PCIe協(xié)議包轉(zhuǎn)換成TLP包,并通過TLP接口發(fā) 送給控制器。
該TLP包在PCIe協(xié)議中又稱存儲(chǔ)(memory)讀或IO讀命令的包。所述TLP包上設(shè)置有工作類型標(biāo)志位,所述工作類型標(biāo)志位表示為讀操作。
步驟303、控制器將工作類型標(biāo)志位為讀操作的TLP包分配給第一工作模塊,所述第一工作模塊解析接收到的TLP包,然后將解析出的所述CPU讀操作命令轉(zhuǎn)換為一個(gè)或多個(gè)通用寄存器讀操作訪問命令。
所述CPU讀操作命令中包括讀使能,讀初始地址,讀數(shù)據(jù)個(gè)數(shù);所述通用寄存器讀操作訪問命令包括讀使能、讀地址;假設(shè)讀初始地址為N,讀數(shù)據(jù)個(gè)數(shù)10,則第一工作模塊解析出所述CPU讀操作命令后,會(huì)將所述CPU讀操作命令轉(zhuǎn)換為10個(gè)通用寄存器讀操作訪問命令:(讀使能,讀地址N)、(讀使能,讀地址N+1)……(讀使能,讀地址N+9)。
步驟304、第一工作模塊將所述一個(gè)或多個(gè)通用寄存器讀操作訪問命令緩存到第一異步先入先出緩存器FIFO中。
步驟305、所述第一工作模塊中的第一異步FIFO將所述一個(gè)或多個(gè)通用寄存器讀操作訪問命令的時(shí)序轉(zhuǎn)換為符合目標(biāo)設(shè)備的時(shí)序,并在轉(zhuǎn)換后將所述一個(gè)或多個(gè)通用寄存器讀操作訪問命令通過配置通道發(fā)送給所述目標(biāo)設(shè)備。
所述第一工作模塊中的第一異步FIFO會(huì)通過配置通道接口將所述一個(gè)或多個(gè)通用寄存器讀操作訪問命令發(fā)送給所述目標(biāo)設(shè)備。
步驟306、所述目標(biāo)設(shè)備根據(jù)所述一個(gè)或多個(gè)通用寄存器讀操作訪問命令進(jìn)行讀操作,獲得讀數(shù)據(jù),并將所述讀數(shù)據(jù)通過配置通道發(fā)送給第一工作模塊。
步驟307、所述第一工作模塊中的第二異步FIFO通過配置通道接收所述讀數(shù)據(jù),并將所述讀數(shù)據(jù)轉(zhuǎn)換為符合PCIe協(xié)議要求的TLP包結(jié)構(gòu)形式和時(shí)序;并將轉(zhuǎn)換后的讀數(shù)據(jù)通過所述協(xié)議層設(shè)備發(fā)送到所述對(duì)端設(shè)備。
所述第一工作模塊中的第二異步FIFO將所述讀數(shù)據(jù)轉(zhuǎn)換為符合PCIe協(xié)議要求的包結(jié)構(gòu)形式(TLP包)和時(shí)序后,就可以通過TLP接口將轉(zhuǎn)換后的讀數(shù)據(jù)發(fā)送給所述協(xié)議層設(shè)備,所述協(xié)議層設(shè)備將該讀數(shù)據(jù)通過高速串行總線SerDes發(fā)送給對(duì)端設(shè)備,這樣就完成了所述對(duì)端設(shè)備從目標(biāo)設(shè)備讀數(shù)據(jù)的操作。
如果所述第一工作模塊中的第二異步FIFO在第一預(yù)設(shè)時(shí)間內(nèi)(這個(gè)第一預(yù)設(shè)時(shí)間可根據(jù)實(shí)際情況人為配置)未從配置通道上接收到目標(biāo)設(shè)備返回的所述讀地址對(duì)應(yīng)的讀數(shù)據(jù),則表明是配置通道出現(xiàn)故障或目標(biāo)設(shè)備出現(xiàn)故障等,這時(shí)一個(gè)自檢測的過程。此時(shí)所述第一工作模塊中的第二異步FIFO會(huì)自動(dòng)產(chǎn)生一個(gè)無效讀數(shù)據(jù),并將該無效讀數(shù)據(jù)轉(zhuǎn)換為符合PCIe協(xié)議要求的TLP包結(jié)構(gòu)形式和時(shí)序后,通過所述協(xié)議層設(shè)備發(fā)送到所述對(duì)端設(shè)備。所述對(duì)端設(shè)備接收到該無效讀數(shù)據(jù)后,自主決定是再次進(jìn)行讀操作讀該地址對(duì)應(yīng)的數(shù)據(jù),還是不再讀該地址對(duì)應(yīng)的數(shù)據(jù)。
如圖4所示,為對(duì)端設(shè)備向目標(biāo)設(shè)備寫數(shù)據(jù)的方法,所述方法中控制器的第二工作模塊進(jìn)行工作,該方法的處理流程包括以下步驟:
步驟401、對(duì)端設(shè)備產(chǎn)生CPU寫操作命令,并將所述CPU寫操作命令組成PCIe協(xié)議包通過高速串行總線SerDes發(fā)送給協(xié)議層設(shè)備。
組裝成的PCIe協(xié)議包上設(shè)置有工作類型標(biāo)志位,所述工作類型標(biāo)志位表示為寫操作。
步驟402、協(xié)議層設(shè)備將所述PCIe協(xié)議包轉(zhuǎn)換成TLP包,并通過TLP接口發(fā)送給控制器。
該TLP包在PCIe協(xié)議中又稱存儲(chǔ)(memory)寫或IO寫命令的包。轉(zhuǎn)換成TLP包上設(shè)置有工作類型標(biāo)志位,所述工作類型標(biāo)志位表示為寫操作。
步驟403、控制器將工作類型標(biāo)志位為寫操作的TLP包分配給第二工作模塊,所述第二工作模塊解析接收到的TLP包,然后將解析出的所述CPU寫操作命令轉(zhuǎn)換為一個(gè)或多個(gè)通用寄存器寫操作訪問命令。
所述CPU寫操作命令中包括寫使能,寫數(shù)據(jù),寫初始地址,寫數(shù)據(jù)個(gè)數(shù);所述通用寄存器寫操作訪問命令包括寫使能、寫地址、所述寫地址對(duì)應(yīng)的單個(gè)寫數(shù)據(jù)。假設(shè)寫初始地址為N,寫數(shù)據(jù)個(gè)數(shù)10,則控制器解析出所述CPU寫操作命令后,會(huì)將所述CPU寫操作命令轉(zhuǎn)換為10個(gè)通用寄存器寫操作訪問命令:(寫使能,寫地址N,寫數(shù)據(jù)1)、(寫使能,寫地址N+1,寫數(shù)據(jù)2)……(寫使能,寫地址N+9,寫數(shù)據(jù)10)。
步驟404、第二工作模塊將所述一個(gè)或多個(gè)通用寄存器寫操作訪問命令緩存到第三異步FIFO中。
步驟405、所述第二工作模塊中的第三異步FIFO將所述一個(gè)或多個(gè)通用寄存器寫操作訪問命令的時(shí)序轉(zhuǎn)換為符合目標(biāo)設(shè)備的時(shí)序,并在轉(zhuǎn)換后將所述一個(gè)或多個(gè)通用寄存器寫操作訪問命令通過配置通道發(fā)送給所述目標(biāo)設(shè)備。
所述第二工作模塊中的第三異步FIFO會(huì)通過配置通道接口將所述一個(gè)或多個(gè)通用寄存器寫操作訪問命令發(fā)送給所述目標(biāo)設(shè)備。
步驟406、所述目標(biāo)設(shè)備根據(jù)所述一個(gè)或多個(gè)通用寄存器寫操作訪問命令進(jìn)行寫操作,并在寫操作完成后給第二工作模塊發(fā)送寫操作完成信號(hào)。
步驟407、所述第二工作模塊接收所述寫操作完成信號(hào)。
如果所述第二工作模塊在第二預(yù)設(shè)時(shí)間內(nèi)(這個(gè)第二預(yù)設(shè)時(shí)間內(nèi)可根據(jù)實(shí)際情況人為配置)未從配置通道上接收到目標(biāo)設(shè)備返回的寫操作完成信號(hào),則表明是配置通道出現(xiàn)故障或目標(biāo)設(shè)備出現(xiàn)故障等,這時(shí)一個(gè)自檢測的過程。此時(shí)所述第二工作模塊會(huì)自動(dòng)產(chǎn)生一個(gè)寫操作完成信號(hào),以便第二工作模塊發(fā)送下一個(gè)寫操作命令給目標(biāo)設(shè)備。
如圖5所示,為對(duì)端設(shè)備中存儲(chǔ)的報(bào)文以DMA讀的方式傳輸?shù)侥繕?biāo)設(shè)備的方法,本方法中控制器的第二工作模塊和第三工作模塊進(jìn)行工作,該方法的處理流程包括以下步驟:
步驟501、對(duì)端設(shè)備產(chǎn)生CPU寫操作命令,并將所述CPU寫操作命令組成PCIe協(xié)議包通過高速串行總線SerDes發(fā)送給協(xié)議層設(shè)備。
組裝成的PCIe協(xié)議包上設(shè)置有工作類型標(biāo)志位,所述工作類型標(biāo)志位表示為寫操作。
步驟502、協(xié)議層設(shè)備將所述PCIe協(xié)議包轉(zhuǎn)換成TLP包,并通過TLP接口發(fā)送給控制器。
該TLP包在PCIe協(xié)議中又稱存儲(chǔ)(memory)寫或IO寫命令的包。轉(zhuǎn)換成的TLP包上設(shè)置有工作類型標(biāo)志位,所述工作類型標(biāo)志位表示為寫操作。
步驟503、控制器將工作類型標(biāo)志位為寫操作的TLP包分配給第二工作模 塊,所述第二工作模塊解析接收到的TLP包獲得DMA讀操作命令,然后啟動(dòng)所述第三工作模塊,將所述DMA讀操作命令發(fā)送給所述第三工作模塊。
所述CPU寫操作命令中包括DMA讀操作命令,所述DMA讀操作命令中包括報(bào)文發(fā)送指示信息的初始地址和地址空間大?。黄渲?,DMA讀操作命令用于指示控制器開啟第三工作模塊。所述報(bào)文發(fā)送指示信息的初始地址和地址空間大小用于指示報(bào)文發(fā)送指示信息在緩存空間中的地址。
步驟504、所述第三工作模塊將報(bào)文發(fā)送指示信息的地址通過協(xié)議層設(shè)備發(fā)送給對(duì)端設(shè)備。
在傳輸過程中,控制器將報(bào)文發(fā)送指示信息的地址組裝成TLP包通過TLP接口發(fā)送給協(xié)議層設(shè)備,再由協(xié)議層設(shè)備將該TLP包轉(zhuǎn)換成PCIe協(xié)議包通過高速串行總線發(fā)送給對(duì)端設(shè)備。
所述對(duì)端設(shè)備中具有報(bào)文發(fā)送指示信息的緩存空間以及發(fā)送報(bào)文的緩存空間,所述報(bào)文發(fā)送指示信息的初始地址和地址空間大小用于指示報(bào)文發(fā)送指示信息在緩存空間中的地址。啟動(dòng)第三工作模塊時(shí),所述第三工作模塊首次發(fā)送的報(bào)文發(fā)送指示信息的地址為報(bào)文發(fā)送指示信息的初始地址。
步驟505、所述對(duì)端設(shè)備將所述報(bào)文發(fā)送指示信息的地址中的報(bào)文發(fā)送指示信息內(nèi)容,通過協(xié)議層設(shè)備發(fā)送給第三工作模塊。
所述對(duì)端設(shè)備接收到報(bào)文發(fā)送指示信息的地址后,會(huì)在緩存報(bào)文發(fā)送指示信息的緩存空間中將該地址對(duì)應(yīng)的報(bào)文發(fā)送指示信息內(nèi)容發(fā)送給第三工作模塊。所述報(bào)文發(fā)送指示信息內(nèi)容包括報(bào)文發(fā)送有效指示信息、報(bào)文大小和報(bào)文初始緩存的地址。
步驟506、在所述報(bào)文發(fā)送有效指示信息為有效時(shí),第三工作模塊將所述報(bào)文大小和報(bào)文初始緩存地址通過協(xié)議層設(shè)備發(fā)送給對(duì)端設(shè)備。
報(bào)文大小和報(bào)文初始緩存的地址可以確定報(bào)文的地址;在所述報(bào)文發(fā)送有效指示信息為有效時(shí)表明該地址內(nèi)有發(fā)送報(bào)文需要發(fā)送,此時(shí)控制器將所述報(bào)文大小和報(bào)文初始緩存的地址通過協(xié)議層設(shè)備發(fā)送給對(duì)端設(shè)備,在此傳輸過程中數(shù)據(jù)形式的轉(zhuǎn)換參考上文描述。
若所述報(bào)文發(fā)送有效指示信息為無效或不正確時(shí),則所述控制器會(huì)反復(fù)重復(fù)上述過程,直到所述對(duì)端設(shè)備發(fā)送的所述發(fā)送指示信息為有效為止。
步驟507、對(duì)端設(shè)備根據(jù)所述報(bào)文大小和報(bào)文初始緩存地址獲取發(fā)送報(bào)文,并將獲取到的發(fā)送報(bào)文通過協(xié)議層設(shè)備發(fā)送給第三工作模塊。
步驟508、第三工作模塊將所述發(fā)送報(bào)文緩存到第四異步FIFO中,經(jīng)過時(shí)序轉(zhuǎn)換、數(shù)據(jù)位寬轉(zhuǎn)換后,轉(zhuǎn)換為通用包結(jié)構(gòu)形式報(bào)文,通過DMA通道發(fā)送給目標(biāo)設(shè)備。
報(bào)文的通用包結(jié)構(gòu)形式,主要包含了包頭(SOP)、包尾(EOP)、包內(nèi)容(DATA)、包指示符(有效指示符VALID、錯(cuò)誤指示符ERROR和最后一拍DATA字節(jié)數(shù)MOD),以及反壓狀態(tài)(FC)等信息。而所述DATA最小位寬為8比特,還可具有8的整數(shù)倍的其他位寬,可以根據(jù)目標(biāo)設(shè)備中報(bào)文的位寬進(jìn)行數(shù)據(jù)位寬轉(zhuǎn)換,轉(zhuǎn)換成合適的數(shù)據(jù)位寬后再發(fā)送給目標(biāo)設(shè)備。
步驟509、所述第三工作模塊通過協(xié)議層設(shè)備向?qū)Χ嗽O(shè)備發(fā)送報(bào)文發(fā)送完成命令,所述報(bào)文發(fā)送完成命令用于將所述發(fā)送報(bào)文對(duì)應(yīng)的報(bào)文發(fā)送有效指示信息更改為無效。
所述第三工作模塊將所述發(fā)送報(bào)文發(fā)送給目標(biāo)設(shè)備后,由于對(duì)端設(shè)備中該發(fā)送報(bào)文不需要再被發(fā)送給目標(biāo)設(shè)備,而該發(fā)送報(bào)文對(duì)應(yīng)的報(bào)文接收有效指示信息還是有效的,此時(shí)第三工作模塊就需要向?qū)Χ嗽O(shè)備發(fā)送報(bào)文發(fā)送完成命令,該報(bào)文發(fā)送完成命令用于指示對(duì)端設(shè)備將所述發(fā)送報(bào)文對(duì)應(yīng)的報(bào)文發(fā)送有效指示信息更改為無效。
所述報(bào)文發(fā)送指示信息的地址是從初始地址開始,按照上述步驟504-509將該初始地址對(duì)應(yīng)的報(bào)文發(fā)送給目標(biāo)地址后,所述控制器會(huì)將報(bào)文發(fā)送指示信息的初始地址自動(dòng)加1,繼續(xù)進(jìn)行步驟504-509,完成后再加1,以此循環(huán)進(jìn)行步驟504-509,直至超過了步驟503解析出的報(bào)文發(fā)送指示信息的初始地址和地址空間大小限定的報(bào)文發(fā)送指示信息的地址。
如圖6所示,為目標(biāo)設(shè)備中的報(bào)文以DMA寫的方式傳輸?shù)綄?duì)端設(shè)備的緩存中的方法,本方法中控制器的第二工作模塊和第三工作模塊進(jìn)行工作,該方 法的處理流程包括以下步驟:
步驟601、對(duì)端設(shè)備產(chǎn)生CPU寫操作命令,并將所述CPU寫操作命令組成PCIe協(xié)議包通過高速串行總線SerDes發(fā)送給協(xié)議層設(shè)備。
組裝成的PCIe協(xié)議包上設(shè)置有工作類型標(biāo)志位,所述工作類型標(biāo)志位表示為寫操作。
步驟602、協(xié)議層設(shè)備將所述PCIe協(xié)議包轉(zhuǎn)換成TLP包,并通過TLP接口發(fā)送給控制器。
該TLP包在PCIe協(xié)議中又稱存儲(chǔ)(memory)寫或IO寫命令的包。轉(zhuǎn)換成的TLP包上設(shè)置有工作類型標(biāo)志位,所述工作類型標(biāo)志位表示為寫操作。
步驟603、控制器將工作類型標(biāo)志位為寫操作的TLP包分配給第二工作模塊,所述第二工作模塊解析接收到的TLP包獲得DMA寫操作命令,然后啟動(dòng)所述第四工作模塊,將所述DMA寫操作命令發(fā)送給所述第四工作模塊。
所述CPU寫操作命令中包括DMA寫啟動(dòng)指令,報(bào)文接收指示信息的初始地址和地址空間大??;其中,DMA寫操作命令用于指示控制器開啟第四工作模塊。所述報(bào)文接收指示信息的初始地址和地址空間大小用于指示報(bào)文接收指示信息在緩存空間中的地址。
步驟604、第四工作模塊將報(bào)文接收指示信息的地址通過協(xié)議層設(shè)備發(fā)送給對(duì)端設(shè)備。
在傳輸過程中,第四工作模塊將報(bào)文接收指示信息的地址組裝成TLP包通過TLP接口發(fā)送給協(xié)議層設(shè)備,再由協(xié)議層設(shè)備將該TLP包轉(zhuǎn)換成PCIe協(xié)議包通過高速串行總線發(fā)送給對(duì)端設(shè)備。
所述對(duì)端設(shè)備中具有報(bào)文接收指示信息的緩存空間以及接收?qǐng)?bào)文的緩存空間,所述報(bào)文接收指示信息的初始地址和地址空間大小用于指示報(bào)文接收指示信息在緩存空間中的地址。啟動(dòng)第四工作模塊時(shí),第四工作模塊首次發(fā)送的報(bào)文接收指示信息的地址為報(bào)文接收指示信息的初始地址。
步驟605、所述對(duì)端設(shè)備將所述報(bào)文接收指示信息的地址中的報(bào)文接收指示信息內(nèi)容,通過協(xié)議層設(shè)備發(fā)送給第四工作模塊。
所述對(duì)端設(shè)備接收到報(bào)文接收指示信息的地址后,會(huì)在緩存報(bào)文接收指示信息的緩存空間中將該地址對(duì)應(yīng)的報(bào)文接收指示信息內(nèi)容發(fā)送給控制器。所述報(bào)文接收指示信息內(nèi)容包括報(bào)文接收有效指示信息、接收?qǐng)?bào)文的初始緩存地址。
步驟606、所述第四工作模塊的第五異步FIFO將目標(biāo)設(shè)備發(fā)送的通用包結(jié)構(gòu)形式的接收?qǐng)?bào)文進(jìn)行緩存、時(shí)序轉(zhuǎn)換和數(shù)據(jù)位寬轉(zhuǎn)換后,轉(zhuǎn)換為符合PCIe協(xié)議要求的TLP包結(jié)構(gòu)形式和時(shí)序的報(bào)文數(shù)據(jù)包。
目標(biāo)設(shè)備可以將接收?qǐng)?bào)文通過DMA通道發(fā)送給控制器的第四模塊,第四工作模塊的第五異步FIFO可以將目標(biāo)設(shè)備發(fā)送的通用包結(jié)構(gòu)形式的報(bào)文進(jìn)行緩存、時(shí)序轉(zhuǎn)換和數(shù)據(jù)位寬轉(zhuǎn)換后,轉(zhuǎn)換為符合PCIe協(xié)議要求的TLP包結(jié)構(gòu)形式和時(shí)序的報(bào)文數(shù)據(jù)包。在這里需要說明的是,當(dāng)?shù)谒墓ぷ髂K的第五異步FIFO中的緩存存滿的時(shí),第四工作模塊可以通知目標(biāo)設(shè)備不再發(fā)送接收?qǐng)?bào)文過來。
步驟607、在所述報(bào)文接收有效指示信息為有效時(shí),控制器將所述接收?qǐng)?bào)文的初始緩存地址以及從第五異步FIFO輸出的TLP包形式的報(bào)文數(shù)據(jù)包通過協(xié)議層設(shè)備發(fā)送給對(duì)端設(shè)備。
接收?qǐng)?bào)文的初始緩存地址為對(duì)端設(shè)備將接收到的報(bào)文進(jìn)行緩存的初始地址;在所述報(bào)文接收有效指示信息為有效時(shí)表明該地址為空可以緩存接收到的報(bào)文,此時(shí)第四工作模塊將所述接收?qǐng)?bào)文的初始緩存地址以及從第五異步FIFO輸出的TLP包形式的報(bào)文數(shù)據(jù)包通過協(xié)議層設(shè)備發(fā)送給對(duì)端設(shè)備,在此傳輸過程中數(shù)據(jù)形式的轉(zhuǎn)換參考上文描述。
若所述報(bào)文接收有效指示信息為無效或不正確時(shí),則所述控制器會(huì)反復(fù)重復(fù)上述過程,直到所述對(duì)端設(shè)備發(fā)送的所述接收指示信息為有效。
步驟608、所述對(duì)端設(shè)備從所述接收?qǐng)?bào)文的初始緩存地址處緩存報(bào)文數(shù)據(jù)包。
步驟609、所述第四工作模塊通過協(xié)議層設(shè)備向?qū)Χ嗽O(shè)備發(fā)送報(bào)文接收完成命令,所述報(bào)文接收完成命令用于所述對(duì)端設(shè)備將所述報(bào)文數(shù)據(jù)包初始緩存地址對(duì)應(yīng)的報(bào)文接收有效指示信息更改為無效。
所述第四工作模塊將所述接收?qǐng)?bào)文的報(bào)文數(shù)據(jù)包發(fā)送給對(duì)端設(shè)備后,由于對(duì)端設(shè)備會(huì)將從所述接收?qǐng)?bào)文的初始緩存地址處緩存報(bào)文數(shù)據(jù)包,所述報(bào)文數(shù)據(jù)包初始緩存地址對(duì)應(yīng)的緩存地址處就會(huì)被占用,而該地址對(duì)應(yīng)的報(bào)文接收有效指示信息還是有效的,此時(shí)第四工作模塊就需要向?qū)Χ嗽O(shè)備發(fā)送報(bào)文接收完成命令,該報(bào)文接收完成命令用于指示對(duì)端設(shè)備將所述報(bào)文數(shù)據(jù)包初始緩存地址對(duì)應(yīng)的報(bào)文接收有效指示信息更改為無效。
所述報(bào)文接收指示信息的地址是從初始地址開始,按照上述步驟604-609將接收到的報(bào)文緩存到該初始地址后,所述第四工作模塊會(huì)將報(bào)文接收指示信息的初始地址自動(dòng)加1,繼續(xù)進(jìn)行步驟604-609,完成后再加1,以此循環(huán)進(jìn)行步驟604-609,直至所述報(bào)文接收指示信息的地址超出了步驟603解析出的報(bào)文接收指示信息的初始地址和地址空間大小限定的報(bào)文發(fā)送接收信息的地址范圍。
本實(shí)施例方法中,控制器中兩個(gè)或兩個(gè)以上的工作模塊可以同時(shí)工作,這樣基于一條PCIe總線鏈路,本實(shí)施例方法可以實(shí)現(xiàn)同時(shí)進(jìn)行CPU讀寫訪問寄存器操作和數(shù)據(jù)報(bào)文的雙向傳輸,從而也大大簡化了一個(gè)PCIe總線設(shè)備或系統(tǒng),也具有應(yīng)用靈活多樣性的特點(diǎn);且本實(shí)施例方法中,一個(gè)所述控制器可以同時(shí)支持一個(gè)或一個(gè)以上所述目標(biāo)設(shè)備,具有非常好的擴(kuò)展性。數(shù)據(jù)報(bào)文的雙向傳輸以DMA方式進(jìn)行,且該DMA方式需通過所述CPU寫操作來控制其開關(guān)使能和確定數(shù)據(jù)緩存空間大小、數(shù)據(jù)初始地址。特別是,通過所述報(bào)文收發(fā)指示信息實(shí)現(xiàn)了查詢和控制DMA操作,以及實(shí)現(xiàn)了數(shù)據(jù)傳輸?shù)淖圆樵?、自控制、錯(cuò)誤或失敗重傳、所述報(bào)文發(fā)送指示信息空間的自輪詢等特點(diǎn),并兼具有數(shù)據(jù)位寬轉(zhuǎn)換、異步時(shí)鐘域轉(zhuǎn)換、統(tǒng)計(jì)等功能;且一個(gè)所述控制器可以同時(shí)支持一個(gè)或一個(gè)以上所述目標(biāo)設(shè)備,具有非常好的擴(kuò)展性。
實(shí)施例3
本發(fā)明實(shí)施例提供了一種基于增強(qiáng)型外設(shè)互連PCIe協(xié)議總線的數(shù)據(jù)傳輸裝置,如圖7所示,所述裝置包括:接收模塊701,分配模塊702,第一工作模塊703、第二工作模塊704、第三工作模塊705和第四工作模塊706,其中,
接收模塊701,用于接收對(duì)端設(shè)備發(fā)送的數(shù)據(jù)包,所述數(shù)據(jù)包上攜帶有工 作類型標(biāo)志位;
分配模塊702,用于在所述接收模塊701接收到的工作類型標(biāo)志位表示為讀操作時(shí),將所述數(shù)據(jù)包分配給第一工作模塊;
所述第一工作模塊703,用于在解析出所述分配模塊702分配的數(shù)據(jù)包獲得讀操作命令時(shí),將所述讀操作命令發(fā)送給目標(biāo)設(shè)備,接收目標(biāo)設(shè)備返回的讀數(shù)據(jù),并將所述讀數(shù)據(jù)發(fā)送給所述對(duì)端設(shè)備;
分配模塊702,還用于在所述接收模塊701接收到的工作類型標(biāo)志位表示為寫操作時(shí),將所述數(shù)據(jù)包分配給第二工作模塊;
所述第二工作模塊704,用于在解析出所述分配模塊702分配的所述數(shù)據(jù)包獲得寫操作命令時(shí),將所述數(shù)據(jù)包中的寫操作命令發(fā)送給目標(biāo)設(shè)備,接收目標(biāo)設(shè)備返回的寫操作完成信號(hào);
所述第二工作模塊704,還用于在解析所述數(shù)據(jù)包獲得DMA讀操作命令時(shí),啟動(dòng)所述第三工作模塊705,并將所述DMA讀操作命令發(fā)送給所述第三工作模塊705;
所述第三工作模塊705,用于根據(jù)所述第二工作模塊704發(fā)送的所述DMA讀操作命令獲得所述對(duì)端設(shè)備中的發(fā)送報(bào)文,并將所述發(fā)送報(bào)文發(fā)送給目標(biāo)設(shè)備;
所述第二工作模塊704,還用于在解析出所述數(shù)據(jù)包獲得DMA寫操作命令時(shí),啟動(dòng)所述第四工作模塊706,將所述DMA寫操作命令發(fā)送給所述第四工作模塊706;
所述第四工作模塊706,還用于根據(jù)所述第二工作模塊704發(fā)送的所述DMA寫操作命令將目標(biāo)設(shè)備發(fā)送的接收?qǐng)?bào)文,發(fā)送給對(duì)端設(shè)備。
可選的,如圖8所示,所述第一工作模塊703中包括:第一處理模塊7031,第一異步先入先出緩存器FIFO模塊7032和第二異步FIFO模塊7033;其中,
所述第一處理模塊7031,用于解析數(shù)據(jù)包獲得CPU讀操作命令,然后將所述CPU讀操作命令轉(zhuǎn)換為一個(gè)或多個(gè)通用寄存器讀操作訪問命令;其中,所述CPU讀操作命令中包括讀使能、讀初始地址、讀數(shù)據(jù)個(gè)數(shù),所述通用寄存器 讀操作訪問命令包括讀使能、讀地址;
所述第一處理模塊7031,還用于將所述一個(gè)或多個(gè)通用寄存器讀操作訪問命令緩存到第一異步先入先出緩存器FIFO模塊7032中;
所述第一異步FIFO模塊7032,用于將所述第一處理模塊7031緩存的一個(gè)或多個(gè)通用寄存器讀操作訪問命令的時(shí)序轉(zhuǎn)換為符合目標(biāo)設(shè)備的時(shí)序;
所述第一處理模塊7031,還用于將所述第一異步FIFO模塊7032轉(zhuǎn)換后的所述一個(gè)或多個(gè)通用寄存器讀操作訪問命令通過配置通道發(fā)送給所述目標(biāo)設(shè)備;通用寄存器讀操作訪問命令用于所述目標(biāo)設(shè)備進(jìn)行讀操作獲得讀數(shù)據(jù);
所述第二異步FIFO,用于通過配置通道接收所述讀數(shù)據(jù),并將所述讀數(shù)據(jù)轉(zhuǎn)換為符合PCIe協(xié)議要求的TLP包結(jié)構(gòu)形式和時(shí)序;
所述第一處理模7031,用于將所述第二異步FIFO模塊7033轉(zhuǎn)換后的讀數(shù)據(jù)發(fā)送給對(duì)端設(shè)備。
所述第一異步FIFO模塊,還用于在第一預(yù)設(shè)時(shí)間內(nèi)未接收到所述目標(biāo)設(shè)備發(fā)送的讀數(shù)據(jù)時(shí),自行生成無效讀數(shù)據(jù)。
可選的,如圖9所示,所述第二工作模塊704中包括:第二處理模塊7041,第三異步FIFO模塊7042;其中,
所述第二處理模塊7041,用于解析數(shù)據(jù)包獲得CPU寫操作命令,然后將所述CPU寫操作命令轉(zhuǎn)換為一個(gè)或多個(gè)通用寄存器寫操作訪問命令;其中,所述CPU寫操作命令中包括寫使能、寫數(shù)據(jù)、寫初始地址、寫數(shù)據(jù)個(gè)數(shù),所述通用寄存器寫操作訪問命令包括寫使能、寫地址、所述寫地址對(duì)應(yīng)的單個(gè)寫數(shù)據(jù);
所述第二處理模塊7041,還用于將所述一個(gè)或多個(gè)通用寄存器寫操作訪問命令緩存到第三異步FIFO模塊7042中;
所述第三異步FIFO模塊7042,用于將所述第二處理模塊7041緩存的所述一個(gè)或多個(gè)通用寄存器寫操作訪問命令的時(shí)序轉(zhuǎn)換為符合目標(biāo)設(shè)備的時(shí)序;
所述第二處理模塊7041,還用于將所述第三異步FIFO模塊7042轉(zhuǎn)換后的所述一個(gè)或多個(gè)通用寄存器寫操作訪問命令通過配置通道發(fā)送給所述目標(biāo)設(shè)備;通用寄存器寫操作訪問命令用于所述目標(biāo)設(shè)備在寫地址寫入所述寫地址對(duì)應(yīng)的 單個(gè)寫數(shù)據(jù);
所述第二處理模塊7041,還用于通過配置通道接收所述目標(biāo)設(shè)備發(fā)送的寫操作完成信號(hào)。
所述第二處理模塊,還用于在第二預(yù)設(shè)時(shí)間內(nèi)未接收到所述目標(biāo)設(shè)備發(fā)送的寫操作完成信號(hào)時(shí),生成所述寫操作完成信號(hào)。
可選的,所述DMA讀操作命令中包括報(bào)文發(fā)送指示信息的初始地址和地址空間大??;如圖10所示,所述第三工作模塊705包括第三處理模塊7051和第四異步FIFO模塊7052;其中,
第三處理模塊7051,用于在第i次時(shí),根據(jù)所述DMA讀操作命令將報(bào)文發(fā)送指示信息的地址發(fā)送給對(duì)端設(shè)備;其中,所述報(bào)文發(fā)送指示信息的地址為報(bào)文發(fā)送指示信息的初始地址+i-1,i為大于等于1的整數(shù);所述報(bào)文發(fā)送指示信息的地址不超出所述報(bào)文發(fā)送指示信息的初始地址和地址空間大小限定的地址范圍
第三處理模塊7051,還用于接收對(duì)端設(shè)備發(fā)送的所述報(bào)文發(fā)送指示信息的地址中的報(bào)文發(fā)送指示信息內(nèi)容;其中,所述報(bào)文發(fā)送指示信息內(nèi)容包括報(bào)文發(fā)送有效指示信息、報(bào)文大小和報(bào)文初始緩存的地址;
第三處理模塊7051,還用于在所述報(bào)文發(fā)送有效指示信息為有效時(shí),將所述報(bào)文大小和報(bào)文初始緩存地址發(fā)送給對(duì)端設(shè)備;
第三處理模塊7051,還用于接收所述對(duì)端設(shè)備發(fā)送的所述報(bào)文大小和報(bào)文初始緩存地址對(duì)應(yīng)的發(fā)送報(bào)文,并將所述發(fā)送報(bào)文緩存到第四異步FIFO模塊7052中;
所述第四異步FIFO模塊7052,用于在將所述第三處理模塊7051緩存的發(fā)送報(bào)文經(jīng)過時(shí)序轉(zhuǎn)換、數(shù)據(jù)位寬轉(zhuǎn)換后,轉(zhuǎn)換為通用包結(jié)構(gòu)形式報(bào)文,通過DMA通道發(fā)送給目標(biāo)設(shè)備;
第三處理模塊7051,還用于在所述第四異步FIFO模塊7052將所述發(fā)送報(bào)文發(fā)送給目標(biāo)設(shè)備后,向?qū)Χ嗽O(shè)備發(fā)送報(bào)文發(fā)送完成命令,所述報(bào)文發(fā)送完成命令用于所述對(duì)端設(shè)備將所述發(fā)送報(bào)文對(duì)應(yīng)的報(bào)文發(fā)送有效指示信息更改為無 效。
可選的,所述DMA寫操作命令中包括報(bào)文接收指示信息的初始地址和地址空間大??;如圖11所示,所述第四工作模塊706包括:第四處理模塊7061和第五異步FIFO模塊7062,其中,
所述第四處理模塊7061,用于在第j次時(shí),根據(jù)所述DMA寫操作命令將報(bào)文接收指示信息的地址發(fā)送給對(duì)端設(shè)備;其中,所述報(bào)文接收指示信息的地址為報(bào)文接收指示信息的初始地址+j-1,j為大于等于1的整數(shù);所述報(bào)文接收指示信息的地址未超出所述報(bào)文接收指示信息的初始地址和地址空間大小限定的地址范圍;
所述第四處理模塊7061,還用于接收對(duì)端設(shè)備發(fā)送的所述報(bào)文接收指示信息的地址中的報(bào)文接收指示信息內(nèi)容;其中,所述報(bào)文接收指示信息內(nèi)容包括報(bào)文接收有效指示信息、接收?qǐng)?bào)文的初始緩存地址;
所述第五異步FIFO模塊7062,用于將目標(biāo)設(shè)備發(fā)送的通用包結(jié)構(gòu)形式的接收?qǐng)?bào)文進(jìn)行緩存、時(shí)序轉(zhuǎn)換和數(shù)據(jù)位寬轉(zhuǎn)換后,轉(zhuǎn)換為符合PCIe協(xié)議要求的TLP包結(jié)構(gòu)形式和時(shí)序的報(bào)文數(shù)據(jù)包;
所述第四處理模塊7061,還用于在所述報(bào)文接收有效指示信息為有效時(shí),將所述接收?qǐng)?bào)文的初始緩存地址以及所述第五異步FIFO模塊7062輸出的報(bào)文數(shù)據(jù)包發(fā)送給對(duì)端設(shè)備;所述接收?qǐng)?bào)文的初始緩存地址用于所述對(duì)端設(shè)備從所述接收?qǐng)?bào)文的初始緩存地址處緩存報(bào)文數(shù)據(jù)包;
所述第四處理模塊7061,還用于向?qū)Χ嗽O(shè)備發(fā)送報(bào)文接收完成命令,所述報(bào)文接收完成命令用于所述對(duì)端設(shè)備將所述報(bào)文數(shù)據(jù)包初始緩存地址對(duì)應(yīng)的報(bào)文接收有效指示信息更改為無效。
在實(shí)際應(yīng)用中,接收模塊701,分配模塊702,第一工作模塊703、第二工作模塊704、第三工作模塊705和第四工作模塊706可以由位于控制器上的中央處理器(CPU)、微處理器(MPU)、數(shù)字信號(hào)處理器(DSP)或現(xiàn)場可編程門陣列(FPGA)等器件實(shí)現(xiàn)。
本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實(shí)施例可提供為方法、系統(tǒng)、或計(jì) 算機(jī)程序產(chǎn)品。因此,本發(fā)明可采用硬件實(shí)施例、軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本發(fā)明可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲(chǔ)介質(zhì)(包括但不限于磁盤存儲(chǔ)器和光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。
本發(fā)明是參照根據(jù)本發(fā)明實(shí)施例的方法、設(shè)備(系統(tǒng))、和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計(jì)算機(jī)程序指令到通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個(gè)機(jī)器,使得通過計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的裝置。
這些計(jì)算機(jī)程序指令也可存儲(chǔ)在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計(jì)算機(jī)可讀存儲(chǔ)器中,使得存儲(chǔ)在該計(jì)算機(jī)可讀存儲(chǔ)器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能。
這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的步驟。
以上所述,僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。