本發(fā)明屬于通信設(shè)備技術(shù)領(lǐng)域,尤其是涉及一種基于fpga實(shí)現(xiàn)數(shù)據(jù)間隔選擇連續(xù)輸出的方法。
背景技術(shù):
目前,隨著通信技術(shù)的發(fā)展,通信、測(cè)控、檢測(cè)等設(shè)備均會(huì)使用fpga進(jìn)行基帶的調(diào)制解調(diào)及數(shù)據(jù)的處理。在fpga與單片機(jī)通信的接口模塊中,需要接收基帶處理的相關(guān)數(shù)據(jù),根據(jù)需要篩選有用信息傳輸給單片機(jī),通常些數(shù)據(jù)都是多種數(shù)據(jù)(數(shù)據(jù)信號(hào),配置,狀態(tài)指示等)隨機(jī)排列傳輸。對(duì)于數(shù)據(jù)信號(hào),單片機(jī)為了讀取方便,通常希望數(shù)據(jù)信號(hào)能存在一個(gè)連續(xù)的地址空間中;對(duì)于控制信號(hào),單片機(jī)希望能夠在最快的時(shí)間內(nèi)接收到。這樣在fpga的數(shù)據(jù)處理中就會(huì)出現(xiàn)數(shù)據(jù)的阻塞、丟失、或者不連續(xù)輸出等問題,不僅會(huì)浪費(fèi)大量的時(shí)間等待有用的信息,而且會(huì)導(dǎo)致緊急信息不能給及時(shí)有效的傳輸,還會(huì)給單片機(jī)讀取數(shù)據(jù)帶來不必要的麻煩,大大降低了通信效率。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明旨在提出一種基于fpga實(shí)現(xiàn)數(shù)據(jù)間隔選擇連續(xù)輸出的方法,以解決目前fpga芯片與單片機(jī)進(jìn)行數(shù)據(jù)傳輸時(shí),出現(xiàn)數(shù)據(jù)阻塞、丟失、或者不連續(xù)輸出等問題。
為達(dá)到上述目的,本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的:
一種基于fpga實(shí)現(xiàn)數(shù)據(jù)間隔選擇連續(xù)輸出的方法,包括以下步驟:
s1、在fpga中使用fifo存儲(chǔ)器緩存數(shù)據(jù);
s2、對(duì)fpga接口模塊連接fifo存儲(chǔ)器的接口進(jìn)行定義,調(diào)節(jié)fifo存儲(chǔ)器輸入的時(shí)鐘頻率和輸出的時(shí)鐘頻率,配合相應(yīng)的控制信號(hào),實(shí)現(xiàn)選擇需要的數(shù)據(jù)傳輸,并實(shí)現(xiàn)連續(xù)地址輸出。
進(jìn)一步的,所述步驟s2中,對(duì)fpga接口模塊連接fifo存儲(chǔ)器的接口進(jìn)行定義,定義方法如下:
data_data[19:0]:fpga需要傳輸?shù)臄?shù)據(jù),這路數(shù)據(jù)為數(shù)據(jù)信息;
data_cfg[19:0]:fpga需要傳輸?shù)臄?shù)據(jù),這路數(shù)據(jù)為控制信息;
data_state[19:0]:fpga需要傳輸?shù)臄?shù)據(jù),這路數(shù)據(jù)為狀態(tài)指示信息;
每個(gè)定義接口都連接一個(gè)fifo存儲(chǔ)器,所述fifo存儲(chǔ)器的輸出端都連接fifo_out存儲(chǔ)器的輸入端,所述fif_out存儲(chǔ)器的輸出端連接單片機(jī)。進(jìn)一步的,所述步驟s2中,所述控制信號(hào)控制方法如下:
control_data為傳輸數(shù)據(jù)信息的控制信號(hào),當(dāng)為‘1’時(shí),表示需要給單片機(jī)傳輸;當(dāng)為‘0’時(shí)表示不需要給單片機(jī)傳輸;
control_cfg為傳輸控制信息的控制信號(hào),當(dāng)為‘1’時(shí),表示需要給單片機(jī)傳輸;當(dāng)為‘0’時(shí)表示不需要給單片機(jī)傳輸;
control_state為傳輸狀態(tài)指示信息的控制信號(hào),當(dāng)為‘1’時(shí),表示需要給單片機(jī)傳輸;當(dāng)為‘0’時(shí)表示不需要給單片機(jī)傳輸;
data_out[19:0]:fpga給單片機(jī)的輸出數(shù)據(jù)。
進(jìn)一步的,所述fifo存儲(chǔ)器的輸出時(shí)鐘頻率快于輸入時(shí)鐘頻率。
進(jìn)一步的,所述fpga的data_data[19:0]接口連接的fifo存儲(chǔ)器,采用兩個(gè)fifo存儲(chǔ)器進(jìn)行乒乓讀寫。
相對(duì)于現(xiàn)有技術(shù),本發(fā)明所述的基于fpga實(shí)現(xiàn)數(shù)據(jù)間隔選擇連續(xù)輸出的方法具有以下優(yōu)勢(shì):
本發(fā)明所述的基于fpga實(shí)現(xiàn)數(shù)據(jù)間隔選擇連續(xù)輸出的方法實(shí)現(xiàn)容易,只需要控制信號(hào),即可實(shí)現(xiàn)重要數(shù)據(jù)優(yōu)先傳輸,根據(jù)需要傳輸數(shù)據(jù)以及保證連續(xù)輸出數(shù)據(jù),使用fifo保證數(shù)據(jù)在傳輸過程中不會(huì)丟失。
附圖說明
構(gòu)成本發(fā)明的一部分的附圖用來提供對(duì)本發(fā)明的進(jìn)一步理解,本發(fā)明的示意性實(shí)施例及其說明用于解釋本發(fā)明,并不構(gòu)成對(duì)本發(fā)明的不當(dāng)限定。在附圖中:
圖1為本發(fā)明實(shí)施例所述的基于fpga實(shí)現(xiàn)數(shù)據(jù)間隔選擇連續(xù)輸出的方法原理示意圖。
具體實(shí)施方式
需要說明的是,在不沖突的情況下,本發(fā)明中的實(shí)施例及實(shí)施例中的特征可以相互組合。
在本發(fā)明的描述中,需要理解的是,術(shù)語“中心”、“縱向”、“橫向”、“上”、“下”、“前”、“后”、“左”、“右”、“豎直”、“水平”、“頂”、“底”、“內(nèi)”、“外”等指示的方位或位置關(guān)系為基于附圖所示的方位或位置關(guān)系,僅是為了便于描述本發(fā)明和簡(jiǎn)化描述,而不是指示或暗示所指的裝置或元件必須具有特定的方位、以特定的方位構(gòu)造和操作,因此不能理解為對(duì)本發(fā)明的限制。此外,術(shù)語“第一”、“第二”等僅用于描述目的,而不能理解為指示或暗示相對(duì)重要性或者隱含指明所指示的技術(shù)特征的數(shù)量。由此,限定有“第一”、“第二”等的特征可以明示或者隱含地包括一個(gè)或者更多個(gè)該特征。在本發(fā)明的描述中,除非另有說明,“多個(gè)”的含義是兩個(gè)或兩個(gè)以上。
在本發(fā)明的描述中,需要說明的是,除非另有明確的規(guī)定和限定,術(shù)語“安裝”、“相連”、“連接”應(yīng)做廣義理解,例如,可以是固定連接,也可以是可拆卸連接,或一體地連接;可以是機(jī)械連接,也可以是電連接;可以是直接相連,也可以通過中間媒介間接相連,可以是兩個(gè)元件內(nèi)部的連通。對(duì)于本領(lǐng)域的普通技術(shù)人員而言,可以通過具體情況理解上述術(shù)語在本發(fā)明中的具體含義。
下面將參考附圖并結(jié)合實(shí)施例來詳細(xì)說明本發(fā)明。
如圖1所示,一種基于fpga實(shí)現(xiàn)數(shù)據(jù)間隔選擇連續(xù)輸出的方法,包括以下步驟:
s1、在fpga中使用fifo存儲(chǔ)器緩存數(shù)據(jù);
s2、對(duì)fpga接口模塊連接fifo存儲(chǔ)器的接口進(jìn)行定義,調(diào)節(jié)fifo存儲(chǔ)器輸入的時(shí)鐘頻率和輸出的時(shí)鐘頻率,配合相應(yīng)的控制信號(hào),實(shí)現(xiàn)選擇需要的數(shù)據(jù)傳輸,并實(shí)現(xiàn)連續(xù)地址輸出。
其中,所述步驟s2中,對(duì)fpga接口模塊連接fifo存儲(chǔ)器的接口進(jìn)行定義,定義方法如下:
data_data[19:0]:fpga需要傳輸?shù)臄?shù)據(jù),這路數(shù)據(jù)為數(shù)據(jù)信息;
data_cfg[19:0]:fpga需要傳輸?shù)臄?shù)據(jù),這路數(shù)據(jù)為控制信息;
data_state[19:0]:fpga需要傳輸?shù)臄?shù)據(jù),這路數(shù)據(jù)為狀態(tài)指示信息;
每個(gè)定義接口都連接一個(gè)fifo存儲(chǔ)器,所述fifo存儲(chǔ)器的輸出端都連接fifo_out存儲(chǔ)器的輸入端,所述fif_out存儲(chǔ)器的輸出端連接單片機(jī)。其中,所述步驟s2中,所述控制信號(hào)控制方法如下:
control_data為傳輸數(shù)據(jù)信息的控制信號(hào),當(dāng)為‘1’時(shí),表示需要給單片機(jī)傳輸;當(dāng)為‘0’時(shí)表示不需要給單片機(jī)傳輸;
control_cfg為傳輸控制信息的控制信號(hào),當(dāng)為‘1’時(shí),表示需要給單片機(jī)傳輸;當(dāng)為‘0’時(shí)表示不需要給單片機(jī)傳輸;
control_state為傳輸狀態(tài)指示信息的控制信號(hào),當(dāng)為‘1’時(shí),表示需要給單片機(jī)傳輸;當(dāng)為‘0’時(shí)表示不需要給單片機(jī)傳輸;
data_out[19:0]:fpga給單片機(jī)的輸出數(shù)據(jù)。
其中,所述fifo的輸出時(shí)鐘頻率快于輸入時(shí)鐘頻率。
其中,所述fpga的data_data[19:0]接口連接的fifo存儲(chǔ)器,采用兩個(gè)fifo存儲(chǔ)器進(jìn)行乒乓讀寫。
如圖1所示,fpga內(nèi)首先使用fifo存儲(chǔ)器將數(shù)據(jù)接收并存儲(chǔ),保證數(shù)據(jù)不丟失。通過control信號(hào)決定數(shù)據(jù)是否需要傳輸給單片機(jī)。再根據(jù)事先定義好的數(shù)據(jù)輸出的優(yōu)先級(jí)將數(shù)據(jù)按順序排列到fifo_out存儲(chǔ)器中,
為了保證fpga內(nèi)部能夠及時(shí)處理數(shù)據(jù),并保證數(shù)據(jù)能夠及時(shí)的輸出,ⅰ、ⅱ、ⅲ三部分的時(shí)鐘頻率是不同的。ⅱ的時(shí)鐘需要對(duì)輸入時(shí)鐘進(jìn)行分頻。為了保證數(shù)據(jù)能夠及時(shí)處理不對(duì)fifo造成過度的阻塞或者fifo溢出,分頻的頻率需要慎重考慮。需要根據(jù)fpga內(nèi)部數(shù)據(jù)速度和control信號(hào)控制的有效數(shù)據(jù)的數(shù)量綜合考慮決定如何分頻。
每個(gè)fifo都會(huì)有一組信號(hào)指示fifo當(dāng)前的數(shù)據(jù)情況,fifo_empty表示當(dāng)前fifo是否為空,信號(hào)為‘1’表示fifo空,信號(hào)為‘0’表示fifo非空,即有數(shù)據(jù);fifo_full表示當(dāng)前fifo是否為滿,信號(hào)為‘1’表示fifo滿,信號(hào)為‘0’表示fifo不滿,即還可以輸入數(shù)據(jù);fifo_rd_en表示是否讀取當(dāng)前fifo的數(shù)據(jù),信號(hào)為‘1’表示讀取fifo,信號(hào)為‘0’表示不讀取fifo;fifo_wr_en表示是否寫入當(dāng)前fifo,信號(hào)為‘1’表示寫入fifo,信號(hào)為‘0’表示不寫入fifo。
如圖1所示,fpga將三路數(shù)據(jù)送到fifo存儲(chǔ)器,首先根據(jù)數(shù)據(jù)打包的包頭不同(數(shù)據(jù)傳輸給fpga之前會(huì)按照事先規(guī)定的信號(hào)類型在信號(hào)前插入一個(gè)包頭,例如數(shù)據(jù)信息插入包頭0x00fff;控制信息插入包頭0x00eee等)在內(nèi)部存入三個(gè)fifo中緩存,防止數(shù)據(jù)丟失。當(dāng)fifo_out的fifo_full信號(hào)為‘0’的時(shí)候,表示fifo_out還有空,可以被寫入數(shù)據(jù)。fifo1~fifo3的讀信號(hào)fifo_rd_en可以有選擇的置1,根據(jù)control_cfg、control_state、control_data的知識(shí),開始讀取數(shù)據(jù)。3個(gè)fifo的讀信號(hào)要根據(jù)優(yōu)先級(jí)順序data_cfg>data_state>data_data檢測(cè),如果data_cfg的fifo的fifo_empty為‘0’,表示有data_cfg信息需要傳輸,當(dāng)control_cfg為‘1’時(shí),則現(xiàn)將data_cfg的fifo_rd_en置‘1’,否則置零;以此類推檢測(cè)data_state是否有數(shù)據(jù)需要傳輸,當(dāng)data_cfg和data_state的數(shù)據(jù)都傳輸完畢后,將data_data的fifo_rd_en置1,開始傳輸數(shù)據(jù)信息。這樣即可保證配置信息和狀態(tài)信息優(yōu)先傳輸,保證系統(tǒng)的高效運(yùn)行。
當(dāng)fifo1~fifo3的讀信號(hào)fifo_rd_en和相應(yīng)的control信號(hào)同時(shí)有效時(shí),表示該信號(hào)是需要輸出的有用信息,這時(shí)候fifo_out的寫信號(hào)fifo_wr_en置1,fifo1~fifo3的數(shù)據(jù)按順序讀出來。將讀出的數(shù)據(jù)存入到fifo_out中。因?yàn)閏ontrol信號(hào)不是連續(xù)為1的,因此寫入到fifo_out中的數(shù)據(jù)不是連續(xù)寫的。通過fifo_out后,這個(gè)數(shù)據(jù)就可以是連續(xù)的數(shù)據(jù),每個(gè)時(shí)鐘周期連續(xù)輸出。
因?yàn)樵冖⒉糠謱?shí)現(xiàn)的是并行數(shù)據(jù)轉(zhuǎn)為串行數(shù)據(jù),因此還需要對(duì)各個(gè)fifo的深度和ⅰ、ⅱ、ⅲ部分的時(shí)鐘速率進(jìn)行合理設(shè)置,要求既要保證fifo深度的合理性,最大限度的節(jié)約fpga內(nèi)部有限的資源,三種數(shù)據(jù)能夠完整儲(chǔ)存。對(duì)于fifo深度的選擇需要根據(jù)實(shí)際情況進(jìn)行設(shè)置,如fifo1存數(shù)數(shù)據(jù)信息需要深度較深的fifo,fifo2和fifo3存儲(chǔ)配置信息和狀態(tài)信息,則深度比較適中的fifo即可滿足要求,fifo深度的具體設(shè)置本發(fā)明中不詳述。對(duì)于始終速率的設(shè)置,也需要根據(jù)數(shù)據(jù)的特點(diǎn)進(jìn)行合理安排。比如,如果data_data數(shù)據(jù)的空閑時(shí)間較短,若ⅱ的時(shí)鐘速率與ⅰ相同,勢(shì)必會(huì)造成fifo1,fifo2,fifo3的數(shù)據(jù)大量存儲(chǔ),經(jīng)過一定時(shí)間的積累,fifo1會(huì)被寫滿,造成數(shù)據(jù)的阻塞和丟失。因此ⅱ部分的時(shí)鐘速率要比ⅰ部分的時(shí)鐘速率快一些,且讀取data_cfg和data_state的頻率也應(yīng)該適當(dāng)降低,以保證data_data的傳輸。另外,時(shí)鐘速率過快會(huì)導(dǎo)致fpga內(nèi)部時(shí)鐘約束更為嚴(yán)格,fpga的資源消耗過大,對(duì)于數(shù)據(jù)量很大的fifo1來說可以使用兩個(gè)fifo進(jìn)行乒乓讀寫,乒乓fifo的具體設(shè)計(jì)本發(fā)明不詳細(xì)描述。因此在設(shè)計(jì)ⅱ部分的時(shí)鐘頻率時(shí)要綜合考慮上述多種因素,選擇合適的時(shí)鐘頻率。ⅲ部分的時(shí)鐘頻率沒有太多要求,不需要單獨(dú)設(shè)計(jì)時(shí)鐘頻率。如果希望fpga設(shè)計(jì)方便,可以使用與ⅰ部分相同的時(shí)鐘頻率;如果希望單片機(jī)設(shè)計(jì)方便,可以使用與單片機(jī)匹配的時(shí)鐘頻率。
以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。